智慧型蛇是字串版貪吃蛇的公升級版。在這篇文章中,我將記錄我的學習過程,起到同大家分享、交流的目的。
本次專案的任務是讓蛇有一定的智慧型,能通過演算法具有 「感知 - 決策 - 行動」 的能力。開發環境為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...