用 js 寫個自動尋路的貪吃蛇

前言

偶爾看到兩年前寫的貪吃蛇,當時沒把自動尋路的算法寫好,蛇容易掛,週末找了個時間把當年的坑填上,寫了個不會掛的貪吃蛇。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

TODO

目前只是實現了不死,在某些條件下,程序仍是會陷入一個循環,這個有空在改進吧,歡迎提 PR。遊戲

相關文章
相關標籤/搜索