偶爾看到兩年前寫的貪吃蛇,當時沒把自動尋路的算法寫好,蛇容易掛,週末找了個時間把當年的坑填上,寫了個不會掛的貪吃蛇。html
兩年前的版本_點擊查看git
此次更新的版本_點擊查看github
代碼比較簡單,使用 canvas 完成遊戲的畫圖,拋開 A* 算法的實現,整個 html 代碼在 300 行之內~
源碼 :
https://github.com/myfjdthink...算法
首先要找出一個模式能夠保持蛇不掛,這個模式就是
「跟着尾巴跑」canvas
若是蛇頭和蛇尾是能夠連通的,那麼就不會掛。
因此只要保證任意時刻蛇頭和蛇尾能連通便可。
尋路的僞代碼以下:安全
if(head to flood){ // 蛇頭能連通食物 模擬蛇吃到食物後的狀態 if(newHead to tail){ // 吃到食物後還能鏈接尾巴 安全 eat flood } else { // 吃到食物後沒法鏈接尾巴 放棄 flow tail } } else { flow tail // 跟着尾巴跑 }
在吃食物以前,須要模擬吃到食物後蛇的狀態,判斷此時蛇是否還能鏈接尾巴,由此決定是否吃掉食物。code
使用 A* 算法能夠快速找到倆點之間的最短路徑,網上找了個實現,就直接扒下來使用啦。
http://devpro.it/examples/ast...htm
目前只是實現了不死,在某些條件下,程序仍是會陷入一個循環,這個有空在改進吧,歡迎提 PR。遊戲