摘要:貪吃蛇類默識貪吃蛇速度,毫秒地圖軸分為多少單位地圖軸分為多少單位貪吃蛇運動速度貪吃蛇每節身體和食物的寬高地圖軸分為多少單位初始化貪吃蛇屬性蛇移動方向食物和食物的坐標游戲開始創建地圖初始化食物初始化貪吃蛇綁定鍵盤方向更改貪吃蛇方向移動貪吃蛇創
/**
貪吃蛇類
@author 默識
@param {int} speed 貪吃蛇速度,毫秒
@param {int} x 地圖x軸分為多少單位
@param {int} y 地圖y軸分為多少單位
@returns {Snake} none
*/
function Snake(speed, x, y) {
//貪吃蛇運動速度 this.speed = speed; //貪吃蛇每節身體和食物的寬高 this.width = window.innerWidth / x; this.height = window.innerHeight / y; //地圖xy軸分為多少單位 this.x = x; this.y = y; //初始化貪吃蛇屬性 this.sBody = [ [0, 1, "green"], [1, 1, "green"], [2, 1, "green"], [3, 1, "red"] ]; //蛇移動方向 this.sDirection = "right"; //食物和食物的坐標 this.food = null; this.foodX = 0; this.foodY = 0;
}
/**
游戲開始
@returns {undefined} none
*/
Snake.prototype.start = function () {
this.createMap();//創建地圖 this.createFood();//初始化食物 this.createSnake();//初始化貪吃蛇 this.bind();//綁定鍵盤方向更改貪吃蛇方向 //移動貪吃蛇 setInterval(function () { snake.moveSnake(); }, this.speed);
};
/**
創建貪吃蛇地圖
@returns {undefined}none
*/
Snake.prototype.createMap = function () {
document.body.style.backgroundColor = "black";
};
/**
創建貪吃蛇食物
@returns {undefined}none
*/
Snake.prototype.createFood = function () {
//創建食物 var food = document.createElement("div"); this.food = food; this.foodX = Math.floor(Math.random() * this.x); this.foodY = Math.floor(Math.random() * this.y); //食物的樣式 with (food.style) { position = "absolute"; width = this.width + "px"; height = this.height + "px"; backgroundColor = "green"; left = this.foodX * this.width + "px";//食物隨機X軸坐標 top = this.foodY * this.height + "px";//食物隨機Y軸坐標 } //食物添加到地圖上 document.body.appendChild(food);
};
/**
創建貪吃蛇
@returns {undefined}none
*/
Snake.prototype.createSnake = function () {
//繪制蛇 for (var i = 0; i < this.sBody.length; i++) { this.sBody[i][3] = this.sBody[i][3] || document.createElement("div"); //設置蛇的樣式 with (this.sBody[i][3].style) { position = "absolute"; width = this.width + "px"; height = this.height + "px"; left = this.sBody[i][0] * this.width + "px"; top = this.sBody[i][1] * this.height + "px"; backgroundColor = this.sBody[i][2]; } //放入地圖中 document.body.appendChild(this.sBody[i][3]); }
};
/**
綁定方向事件更改貪吃蛇運動方向
@returns {undefined}none
*/
Snake.prototype.bind = function () {
var tmp = this; document.onkeyup = function (e) { var e = window.event || e; switch (e.keyCode) { case 37: tmp.sDirection = "left"; break; case 38: tmp.sDirection = "up"; break; case 39: tmp.sDirection = "right"; break; case 40: tmp.sDirection = "down"; break; } }
};
/**
貪吃蛇行動
@returns {undefined}none
*/
Snake.prototype.moveSnake = function () {
//舍身跟隨前一節運動,即改變坐標,注意蛇身先走,要不蛇頭緊隨的一段身體會跟蛇頭重疊 for (var i = 0; i < this.sBody.length - 1; i++) { this.sBody[i][0] = this.sBody[i + 1][0]; this.sBody[i][1] = this.sBody[i + 1][1]; } //蛇運動根據方向改變xy軸坐標 switch (this.sDirection) { case "up": this.sBody[this.sBody.length - 1][1]--; break; case "right": this.sBody[this.sBody.length - 1][0]++; break; case "down": this.sBody[this.sBody.length - 1][1]++; break; case "left": this.sBody[this.sBody.length - 1][0]--; break } //貪吃蛇吃食物 if (this.sBody[this.sBody.length - 1][0] === this.foodX && this.sBody[this.sBody.length - 1][1] === this.foodY ) { //創建一節身體 var node = [this.sBody[0][0], this.sBody[0][1], "green"]; //身體生長 this.sBody.unshift(node); //食物位置重置 this.foodX = Math.floor(Math.random() * this.x); this.foodY = Math.floor(Math.random() * this.y); with (this.food.style) { left = this.foodX * this.width + "px";//食物隨機X軸坐標 top = this.foodY * this.height + "px";//食物隨機Y軸坐標 } } //判斷游蛇是否碰到邊界 if (this.sBody[this.sBody.length - 1][0] < 0 || this.sBody[this.sBody.length - 1][0] >= this.x || this.sBody[this.sBody.length - 1][1] < 0 || this.sBody[this.sBody.length - 1][1] >= this.y ) { this.gameover(); return; } //顯示新貪吃蛇位置 this.createSnake();
};
/**
游戲結束
@returns {undefined} none
*/
Snake.prototype.gameover = function () {
alert("GAME OVER!"); location.reload();
};
var snake = new Snake(100, 60, 40);
snake.start();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82702.html
摘要:前言偶爾看到兩年前寫的貪吃蛇,當時沒把自動尋路的算法寫好,蛇容易掛,周末找了個時間把當年的坑填上,寫了個不會掛的貪吃蛇。 前言 偶爾看到兩年前寫的貪吃蛇,當時沒把自動尋路的算法寫好,蛇容易掛,周末找了個時間把當年的坑填上,寫了個不會掛的貪吃蛇。 兩年前的版本_點擊查看 這次更新的版本_點擊查看 代碼比較簡單,使用 canvas 完成游戲的畫圖,拋開 A* 算法的實現,整個 html 代...
摘要:貪吃蛇并不是通過操作來完成移動的,而是通過記錄貪吃蛇的路徑來將身體渲染出來。目前沒有內置的操作符判斷對象的內容是否相同。 還是用的vue,本來以為不合適,但想法錯了。貪吃蛇并不是通過操作dom來完成移動的,而是通過記錄貪吃蛇的路徑來將身體渲染出來。 一般移動元素,我們都是變動它的css達到目的,但我在寫貪吃蛇的時候發現這樣很難以實現,參考了網上的資源,發現大部分人是通過記錄貪吃蛇的路徑...
摘要:封裝手寫的方筆記使用檢測文件前端掘金副標題可以做什么以及使用中會遇到的坑。目的是幫助人們用純中文指南實現復選框中多選功能前端掘金作者緝熙簡介是推出的一個天挑戰。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測試框架 Chai.js 源碼貢獻者之一,Chai.js 中會遇到很多異常處理...
摘要:封裝手寫的方筆記使用檢測文件前端掘金副標題可以做什么以及使用中會遇到的坑。目的是幫助人們用純中文指南實現復選框中多選功能前端掘金作者緝熙簡介是推出的一個天挑戰。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測試框架 Chai.js 源碼貢獻者之一,Chai.js 中會遇到很多異常處理...
閱讀 1105·2021-11-16 11:45
閱讀 3124·2021-10-13 09:40
閱讀 714·2019-08-26 13:45
閱讀 1188·2019-08-26 13:32
閱讀 2167·2019-08-26 13:23
閱讀 911·2019-08-26 12:16
閱讀 2823·2019-08-26 11:37
閱讀 1748·2019-08-26 10:32