手起刀落-一起来写经典的贪吃蛇游戏
回味
小時候玩的經典貪吃蛇游戲我們印象仍然深刻,謀劃了幾天,小時候喜歡玩的游戲,長大了終于有能力把他做出來(從來都沒有通關過,不知道自己寫的程序,是不是能通關了...),好了,閑話不多談,先來看一下效果吧!!
功能和小時候玩的貪吃蛇一樣,
1、選擇速度 slownormalfast 2、選擇是否有墻作為障礙物onoff看完效果就先附上地址嘍:大山深處修煉的小龍蝦,歡迎fork.
結構分解
如果構建一個簡單的經典貪吃蛇游戲呢?我們根據面板可以分解出如下結構:
因為其他面板比較簡單,我們重點來看一下游戲面板
游戲面板
游戲面板是核心,在游戲面板中,我們來分解一下游戲面板我們需要的因素:
場景、snake、食物
首先我們需要一個游戲場景、snake、食物這些基礎設施
這里使用canvas作為我們的整個游戲的場景:
需要一只snake,后面初始化他的位置
var activeDot = function (x, y) {ctx.fillStyle = "#eee";ctx.fillRect(x * 10, y * 10, 10, 10); }需要食物作為對象(關于食物我們需要定義一些規則,如食物的產生)
var food = {x: 0,y: 0 };規則
規則是游戲的核心
1、關于游戲的規則snake的方向控制:(使用鍵盤的上下左右鍵控制蛇的方向)
// changer dirvar changeDir = function (key) {if (key == 38 && snake_dir != 2) {snake_next_dir = 0;} else {if (key == 39 && snake_dir != 3) {snake_next_dir = 1;} else {if (key == 40 && snake_dir != 0) {snake_next_dir = 2;} else {if (key == 37 && snake_dir != 1) {snake_next_dir = 3;}}}}}關于食物,如果食物被吃掉,我們就需要產生新的食物
// add foodvar addFood = function () {food.x = Math.floor(Math.random() * ((canvas.width / 10) - 1));food.y = Math.floor(Math.random() * ((canvas.height / 10) - 1));for (var i = 0; i < snake.length; i++) {// 如果食物被吃就增加食物if (checkBlock(food.x, food.y, snake[i].x, snake[i].y)) {addFood();}}}var checkBlock = function (x, y, _x, _y) {return (x == _x && y == _y) ? true : false;}接下來是核心的函數,根據選擇的速度和是否有墻體作為障礙物的設置,讓蛇運動起來,并且實現
1、根據選擇slow、norma、fast決定蛇運動速度速度
2、如果蛇碰到自己==自殺,游戲結束
3、有墻模式碰到墻體,游戲結束
4、無墻模式蛇穿過墻體,從另一側出現
5、使蛇碰到食物就加入自身身體的一部分,執行增加食物函數
ok以上展示出一些核心部分,構建出一個舞臺中一只小蛇的故事.
小時候爸媽手機里有一款小游戲叫貪吃蛇。就是一條小蛇,不停地在屏幕上游走,吃各個方向出現的蛋,越吃越長。只要蛇頭碰到屏幕四周,或者碰到自己的身子,小蛇就立即斃命。方寸的舞臺間,亦有無限精彩;PS:到現在也沒有通關過..現在不知道能不能通關了...
最后在附上次源碼,歡迎fork交流:okaychen... 因為自己測試用的服務器被占用,目前只有做的效果圖供大家參考嘍.
掘金地址:手起刀落-一起來寫經典的貪吃蛇游戲
轉載于:https://www.cnblogs.com/okaychen/p/7954207.html
總結
以上是生活随笔為你收集整理的手起刀落-一起来写经典的贪吃蛇游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: notepad++修改背景色
- 下一篇: win10常见问题处理办法