字元遊戲 智慧型蛇

2021-08-14 03:18:32 字數 2495 閱讀 1828

智慧型蛇是字串版貪吃蛇的公升級版。在這篇文章中,我將記錄我的學習過程,起到同大家分享、交流的目的。

本次專案的任務是讓蛇有一定的智慧型,能通過演算法具有 「感知 - 決策 - 行動」 的能力。開發環境為linux。

在編寫前,首先要掌握如何在終端上實現清屏。在字元終端上完成「清屏」「修改游標位置」「設定字元前景和背景色」等操作,是通過輸出 esc序列實現的。對於 vt100 終端, printf(「\033[2j」) 就實現了清屏。詳細內容參見, c語言與vt100控制碼程式設計

明確智慧型蛇程式設計框架(偽**):

輸出字元矩陣

while

not 遊戲結束 do

wait(time)

ch=wheregonext(hx,hy,fx,fy)

case ch do

『a』:左前進一步,break

『d』:右前進一步,break

『w』:上前進一步,break

『s』:下前進一步,break

endcase

輸出字元矩陣

endwhile

輸出 game over!!!

接下來,最重要的就是設計蛇智慧型執行的演算法了。

偽**:

// hx,hy: 頭的位置

// fx,fy:食物的位置

function

wheregonext

(hx,hy,fx,fy) 記錄可走的方向

// 用陣列distance[3]= 記錄離食物的距離

// 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置

// 例如:假設輸入」a」 則distance[0] = |fx – (hx-1)| + |fy – hy|

// 如果 hx-1,hy 位置不是blank,則 distance[0] = 9999

// 選擇distance中存最小距離的下標p,注意最小距離不能是9999

// 返回 movable[p]

}

c語言實現:

char wheregonext(int hx,int hy,int fx,int fy)

;// 用陣列movable[3]= 記錄可走的方向

intdistance[4]=;// 用陣列distance[3]= 記錄離食物的距離

distance[0] = abs(fy - hy) + abs(fx - hx+1);// 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置

if (map[hy][hx-1] !=blank_cell&&map[hy][hx-1] != snake_food)

distance[0] = 9999;// 如果 hy,hx-1 位置不是blank,則 distance[0] = 9999

distance[1] = abs(fy - hy) + abs(fx -hx-1) ;// 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置

if (map[hy][hx+1] != blank_cell&&map[hy][hx+1] != snake_food)

distance[1] = 9999;// 如果 hy,hx+1 位置不是blank,則 distance[0] = 9999

distance[2] = abs(fy - hy+1) + abs(fx - hx) ;// 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置

if (map[hy-1][hx] != blank_cell&&map[hy-1][hx]!=snake_food)

distance[2] = 9999;// 如果 hy-1,hx 位置不是blank,則 distance[0] = 9999

distance[3] = abs(fy - hy-1) + abs(fx -hx) ;// 分別計算蛇頭周邊四個位置到食物的距離。h頭的位置,f食物位置

if (map[hy+1][hx] != blank_cell&&map[hy+1][hx] != snake_food)

distance[3] = 9999;// 如果 hy+1,hx 位置不是blank,則 distance[0] = 9999

// 選擇distance中存最小距離的下標p,注意最小距離不能是9999

intmin=0;

for (int i = 0; i <= 3; i++)

return moveable[min];// 返回 movable[p]

}

這種演算法的缺點就是——沒有考慮蛇尾、軌跡等位置,導致蛇會自己被自己走死。

效果動畫

雖然這蛇經常把自己」走死」,但好歹是一條可以自己走的蛇。在今後的學習中,我會繼續學習更好的演算法,來讓蛇更智慧型。

字元遊戲 智慧型蛇

基本原理 對於貪吃蛇怎麼在螢幕上移動,其實就是不斷重新整理螢幕,在乙個迴圈裡,每一次迴圈就像一張,以計算機的強大計算速度,連線成動態移動的蛇輕而易舉。由5個主要函式組成 1.首先初始化地圖,包括圍牆,蛇和食物。2.是否產生食物,判別條件為蛇頭是否與食物座標重合。3.獲取移動速度,蛇越長移速越快,移速...

字元遊戲 智慧型蛇

這裡我們暫且將食物數量設定為1,就如經典貪吃蛇那樣。接下來就是判斷要如何走了,而影響蛇行走方向的要素無非就是蛇頭與各個物件的關係,與蛇身的關係 下一步不能碰到蛇身自己撞死自己,下一步不能碰到牆,下一步要在以上條件之下盡可能往離食物更近的方向走。由於之前設計的貪吃蛇就有判斷下一步會不會自殺的函式塊ju...

Linux 字元遊戲 智慧型蛇

這周作業 智慧型蛇。其目的是讓蛇自動一秒走一步,自動尋找食物。實現這個目的的難點有以下幾個 對策 使用sleep函式 具體使用方法及注意事項 在標頭檔案加入 unistd.h 標頭檔案 注意sleep的開頭是小寫 區別於windows sleep 括號裡面的單位是毫秒。例項 sleep 1000 p...