js 貪吃蛇 設計模式 中介模式

2021-10-11 15:16:10 字數 1535 閱讀 3337

渲染蛇的邏輯,此時的邏輯是snake類調game類的setcolor方法,因為本質其實就是table**渲染顏色,table**在game類初始建立的,所以理應讓game設定渲染顏色的方法

蛇的運動其實就是蛇在進行body陣列的更新,比如我們向右運動,本質就是body陣列中,尾部刪除,頭部增加。所以蛇會渲染新的狀態

此時蛇會邊長而不是運動,這樣是因為我們只是告訴了蛇如果渲染顏色, 之前渲染過的,需要擦除一下

此時我們給game設定乙個擦除螢幕的方法

接下來我們要在定時器中進行遊戲的三步走:清屏,更新和渲染

接下來蛇要在不同的方向進行運動,此時我們可以給game設定乙個bindevent事件,進行鍵盤的事件監聽,改變運動方向

此時snake類也必須有對應的方向匹配,我們在snake的初始化的時候設定了乙個this.direction = 「r」

運動優化:

此時我們發現蛇是可以原地調頭的,不符合遊戲的規則,所以我們需要優化

第一步在按鍵盤的時候需要先判定一下當前的蛇的運動方向,比如我們的蛇是朝右運動的,此時就不能按左

第二步講蛇的改變封裝了乙個方法,防止在每一幀中進行的方向衝突,比如我們的蛇雖然不能原地調頭了,但是我們的渲染是在500ms後執行的,中間有500ms的空隙可以進行非常規操作,所以我們設定該方法解決這個問題

此時我們建立乙個food類,用來產生食物

在game進行例項化然後在定時器中進行渲染

但是此時會發現食物會渲染到蛇的身上

所以此時我們在隨機食物的row和col的時候要先判斷一下是否在蛇的身上

function game()

game.prototype.init = function()

//判斷死亡2、自己吃自己

for(var i=1;i}

//吃食物:如果蛇頭和食物重合則吃到食物了

if(this.body[0].row == game.food.row && this.body[0].col == game.food.col)else

//每走一步 未刪

}//snake類呼叫game的setcolor方法

snake.prototype.render = function()

}//問題 如果在定時器每次執行的時間範圍內 向右行走的蛇 先按下鍵盤的下鍵瞬間再按下左 那麼蛇還是會原地掉頭,因為update 1s執行一次(this.direction)改變了量次 執行最後一次所以還是會原地掉頭

// 解決方法 設定乙個this.direction的接收器willdirection

snake.prototype.changedirection = function (d)

function food(gamesnake) while((function () 

return false;

}})())

}food.prototype.render = function ()

C 貪吃蛇設計

class map enum char map row col 地圖 map void drawmap 繪製地圖 bool isvaildpoint int x,int y 1.利用列舉來定義常量,在類外部可以通過作用域解析來獲取列舉常量,便於所有類的交流.2.通過二維陣列儲存地圖,在構造的時候讀取...

js 實現貪吃蛇專案

近來在學習js高階,便學習著做個網頁版貪吃蛇專案。map tools.js function window.tools tools food.js function game.prototype.start function function runsnake if heady 0 heady ma...

js貪吃蛇(建構函式)

給大家分享一下這幾天我研究的乙個貪吃蛇,挺簡單的,但是實現起來其實有點繞的,我給大家附上完整 一起分析學習一下,主要用的是建構函式。思想 1 設計蛇 屬性有寬 高 方向 狀態 有多少節 方法 顯示,跑 2 設計食物 屬性寬 高 3 顯示蛇 根據狀態向地圖裡加元素 4 蛇跑起來 下一節到前一節的位置,...