国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS用原型對象寫的貪吃蛇,很粗糙的代碼

YanceyOfficial / 1780人閱讀

摘要:貪吃蛇類默識貪吃蛇速度,毫秒地圖軸分為多少單位地圖軸分為多少單位貪吃蛇運動速度貪吃蛇每節身體和食物的寬高地圖軸分為多少單位初始化貪吃蛇屬性蛇移動方向食物和食物的坐標游戲開始創建地圖初始化食物初始化貪吃蛇綁定鍵盤方向更改貪吃蛇方向移動貪吃蛇創

/**

貪吃蛇類

@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

相關文章

  • 深入理解js

    摘要:詳解十大常用設計模式力薦深度好文深入理解大設計模式收集各種疑難雜癥的問題集錦關于,工作和學習過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內存管理。 延遲加載 (Lazyload) 三種實現方式 延遲加載也稱為惰性加載,即在長網頁中延遲加載圖像。用戶滾動到它們之前,視口外的圖像不會加載。本文詳細介紹了三種延遲加載的實現方式。 詳解 Javascript十大常用設計模式 力薦~ ...

    caikeal 評論0 收藏0
  • js 寫個自動尋路貪吃

    摘要:前言偶爾看到兩年前寫的貪吃蛇,當時沒把自動尋路的算法寫好,蛇容易掛,周末找了個時間把當年的坑填上,寫了個不會掛的貪吃蛇。 前言 偶爾看到兩年前寫的貪吃蛇,當時沒把自動尋路的算法寫好,蛇容易掛,周末找了個時間把當年的坑填上,寫了個不會掛的貪吃蛇。 兩年前的版本_點擊查看 這次更新的版本_點擊查看 代碼比較簡單,使用 canvas 完成游戲的畫圖,拋開 A* 算法的實現,整個 html 代...

    gaara 評論0 收藏0
  • 小白成長日記:寫個貪吃

    摘要:貪吃蛇并不是通過操作來完成移動的,而是通過記錄貪吃蛇的路徑來將身體渲染出來。目前沒有內置的操作符判斷對象的內容是否相同。 還是用的vue,本來以為不合適,但想法錯了。貪吃蛇并不是通過操作dom來完成移動的,而是通過記錄貪吃蛇的路徑來將身體渲染出來。 一般移動元素,我們都是變動它的css達到目的,但我在寫貪吃蛇的時候發現這樣很難以實現,參考了網上的資源,發現大部分人是通過記錄貪吃蛇的路徑...

    archieyang 評論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測文件前端掘金副標題可以做什么以及使用中會遇到的坑。目的是幫助人們用純中文指南實現復選框中多選功能前端掘金作者緝熙簡介是推出的一個天挑戰。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測試框架 Chai.js 源碼貢獻者之一,Chai.js 中會遇到很多異常處理...

    you_De 評論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測文件前端掘金副標題可以做什么以及使用中會遇到的坑。目的是幫助人們用純中文指南實現復選框中多選功能前端掘金作者緝熙簡介是推出的一個天挑戰。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測試框架 Chai.js 源碼貢獻者之一,Chai.js 中會遇到很多異常處理...

    lwx12525 評論0 收藏0

發表評論

0條評論

YanceyOfficial

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<