手起刀落 一起來寫經典的貪吃蛇遊戲

2022-01-11 02:39:52 字數 2193 閱讀 8872

小時候玩的經典貪吃蛇遊戲我們印象仍然深刻,謀劃了幾天,小時候喜歡玩的遊戲,長大了終於有能力把他做出來(從來都沒有通關過,不知道自己寫的程式,是不是能通關了...),好了,閒話不多談,先來看一下效果吧!!

功能和小時候玩的貪吃蛇一樣,

1、選擇速度 

slow

normal

fast

2、選擇是否有牆作為障礙物

onoff

如果構建乙個簡單的經典貪吃蛇遊戲呢?我們根據面板可以分解出如下結構:

因為其他面板比較簡單,我們重點來看一下遊戲面板

遊戲面板是核心,在遊戲面板中,我們來分解一下遊戲面板我們需要的因素:

首先我們需要乙個遊戲場景、snake、食物這些基礎設施

這裡使用canvas作為我們的整個遊戲的場景:

需要乙隻snake,後面初始化他的位置

var activedot = function (x, y)
需要食物作為物件(關於食物我們需要定義一些規則,如食物的產生)

var food = ;
規則是遊戲的核心

1、關於遊戲的規則
snake的方向控制:(使用鍵盤的上下左右鍵控制蛇的方向)

// changer dir

var changedir = function (key) else else else }}

}}

關於食物,如果食物被吃掉,我們就需要產生新的食物

// add food

var addfood = function () }}

var checkblock = function (x, y, _x, _y)

接下來是核心的函式,根據選擇的速度和是否有牆體作為障礙物的設定,讓蛇運動起來,並且實現

1、根據選擇slow、norma、fast決定蛇運動速度速度

2、如果蛇碰到自己==自殺,遊戲結束

3、有牆模式碰到牆體,遊戲結束

4、無牆模式蛇穿過牆體,從另一側出現

5、使蛇碰到食物就加入自身身體的一部分,執行增加食物函式

var mainloop = function () 

snake.pop();

snake.unshift()

// --wall

if (wall == 1)

} else

if (snake[i].x == canvas.width / 10)

if (snake[i].y < 0)

if (snake[i].y == canvas.height / 10) }}

// autophagy death

for (var i = 1; i < snake.length; i++)

}// eat food

if (checkblock(snake[0].x, snake[0].y, food.x, food.y)) ;

score += 1;

altscore(score);

addfood();

activedot(food.x, food.y);

}// --------------------

ctx.beginpath();

ctx.fillstyle = "#111";

ctx.fillrect(0, 0, canvas.width, canvas.height);

// --------------------

for (var i = 0; i < snake.length; i++)

// --------------------

activedot(food.x, food.y);

settimeout(mainloop, snake_speed);

}

ok以上展示出一些核心部分,構建出乙個舞台中乙隻小蛇的故事.

小時候爸媽手機裡有一款小遊戲叫貪吃蛇。就是一條小蛇,不停地在螢幕上游走,吃各個方向出現的蛋,越吃越長。只要蛇頭碰到螢幕四周,或者碰到自己的身子,小蛇就立即斃命。方寸的舞台間,亦有無限精彩;ps:到現在也沒有通關過..現在不知道能不能通關了...

一起來寫web server 04

從這個版本開始,後面的 差不多是越來越難啦.這個版本,我們主要是要實現乙個執行緒池版本的web server.這個版本的設計出自unp.思想非常簡單,那就是父執行緒首先構建n多子執行緒,這些子執行緒全部爭搶全域性的一把鎖,只有搶到了鎖的執行緒才能夠呼叫accept函式,否則都會阻塞掉.執行緒池版本的...

shell 清楚空格 一起來寫乙個Shell指令碼吧

說實話,寫指令碼這一塊屬實 業務不精 一來現如今的工具已經比較方便了,二來自己還是比較懶。正巧最近再嘗試公司的雲編譯功能,雖然雲編譯外掛程式自動做了大量的工作,但是最終也只是把產物 apk 拉到本地某檔案目錄下,因此還是需要我們主動要install。因此基於這個場景就像寫乙個指令碼可以一鍵的把拉下的...

一起來點讚

description 小a同學最近接了乙個專案,專案的一部分內容是設計朋友圈模組,他在寫點贊功能的時候遇到了一點麻煩。現在他的資料表裡面有如下內容資訊 zhangsan 1 lisi 2 zhangsan 2 lisi 3 wangwu 1 wangwu 2 wangwu 3 其中每一行的由兩部分...