這裡我們暫且將食物數量設定為1,就如經典貪吃蛇那樣。
接下來就是判斷要如何走了,而影響蛇行走方向的要素無非就是蛇頭與各個物件的關係,與蛇身的關係:下一步不能碰到蛇身自己撞死自己,下一步不能碰到牆,下一步要在以上條件之下盡可能往離食物更近的方向走。
由於之前設計的貪吃蛇就有判斷下一步會不會自殺的函式塊judgemove(),可以很方便得運用到智慧型蛇的移動判斷中。下面可以擬出判斷函式judgenextmove(),返回的是下一步的方向。
char judgenextmove()
//對於down這一方向來說
if(s == 1)
}//對於left這一方向來說
if(a == 1)
}//對於right這一方向來說
if(d == 1)
};printf("w:%d a:%d s:%d d:%d \n ",w,a,s,d);
printf("%d %d\n",foodx[foodnumber-1],foody[foodnumber-1]);
return do;
}
接下來就是把主函式裡邊的readinput換成judgenextmove就可以了。
這樣直接執行程式就可以看到一條疾如風的智障蛇。
若要讓蛇一秒一步慢慢地走向死亡就可以通過使用老師提供linux下非阻塞地檢測鍵盤輸入的**來完成
#include
#include
#include
#include
#include
#include
#include
static
struct termios ori_attr, cur_attr;
static __inline
int tty_reset(void)
static __inline
int tty_set(void)
static __inline
int kbhit(void)
else
if (retval)
return
1; /* fd_isset(0, &rfds) will be true. */
else
return
0; return0;}
//將你的 snake **放在這裡
int main()
else
}//恢復終端設定
if(tty_set_flag == 0)
tty_reset();
return
0;}
並將我們的snake**放入其中main函式中提示的位置即可。
通過這種演算法可以初步解決一些問題,但是蛇會把自己繞入死胡同裡自殺。我們可以發現一種玩貪吃蛇的極端保守的方法:讓蛇沿著固定的「s」型路線迴圈走過介面,這樣可以百分百通關。再結合上邊的思路,可以形成新的思路:
若食物滿足其座標符合在蛇的每乙個部位的同一方向(如左上方);則執行上述的移動法則,當不符合時,蛇頭就沿著會讓蛇死亡的物體(牆,蛇身)行走(即不考慮食物位置,僅僅選擇乙個不會讓他死亡的方向走並按著這一方向直到將要碰到讓蛇死亡的物體),直到出現滿足食物滿足其座標符合在蛇的每乙個部位的同一方向這一條件時,再進行上述移動法則。
這樣蛇便可以很好的存活。
字元遊戲 智慧型蛇
基本原理 對於貪吃蛇怎麼在螢幕上移動,其實就是不斷重新整理螢幕,在乙個迴圈裡,每一次迴圈就像一張,以計算機的強大計算速度,連線成動態移動的蛇輕而易舉。由5個主要函式組成 1.首先初始化地圖,包括圍牆,蛇和食物。2.是否產生食物,判別條件為蛇頭是否與食物座標重合。3.獲取移動速度,蛇越長移速越快,移速...
字元遊戲 智慧型蛇
智慧型蛇是字串版貪吃蛇的公升級版。在這篇文章中,我將記錄我的學習過程,起到同大家分享 交流的目的。本次專案的任務是讓蛇有一定的智慧型,能通過演算法具有 感知 決策 行動 的能力。開發環境為linux。在編寫前,首先要掌握如何在終端上實現清屏。在字元終端上完成 清屏 修改游標位置 設定字元前景和背景色...
Linux 字元遊戲 智慧型蛇
這周作業 智慧型蛇。其目的是讓蛇自動一秒走一步,自動尋找食物。實現這個目的的難點有以下幾個 對策 使用sleep函式 具體使用方法及注意事項 在標頭檔案加入 unistd.h 標頭檔案 注意sleep的開頭是小寫 區別於windows sleep 括號裡面的單位是毫秒。例項 sleep 1000 p...