貪吃蛇

找對象

(1)蛇

屬性: 長度丢间、顏色、位置驹针、頭烘挫、移動方向
方法: 吃、移動柬甥、長大

(2)食物

屬性: 大小饮六、顏色、位置
方法: 改變位置

(3)游戲引擎

屬性: 場景苛蒲、蛇卤橄、食物
方法: 初始化、鍵盤控制臂外、啟動游戲窟扑、停止游戲

實現(xiàn)對象

游戲引擎

采用 字面量的形式 創(chuàng)建對象。 因為游戲引擎只有1個漏健,采用這種方式會更合適些嚎货。代碼如下:

定義  游戲引擎  對象
var gGamepower = {
    rows : 10,//行數(shù)
    cols : 15,//列數(shù)
    Alltd: [],//儲存所有td
    food : null,//食物
    snake: null,//蛇
    timer : null,//定時器
      //清空環(huán)境
    clear: function () {
        for (var i = 0;i<this.Alltd.length ;i++ )
        {
            for (j=0;j<this.Alltd[i].length ;j++ )
            {
                this.Alltd[i][j].className = ""
            }
        }
    },
//游戲開始
    start : function () {
//初始化游戲
        var oTable = document.createElement("table")
        for (i=0;i<gGamepower.rows ;i++ )
        {   //Y
            var oTr = document.createElement("tr")
            var arr = []
            for (j=0;j<gGamepower.cols ;j++ )
            {   //X
                var oTd = document.createElement("td")
                oTr.appendChild(oTd)
                arr.push(oTd)
            }
            oTable.appendChild(oTr)
            this.Alltd.push(arr)
        }
        document.body.appendChild(oTable)
        this.food = new Food();//顯示食物
        this.snake = new Snake();//顯示蛇
        //this.snake.fresh();
        //定時器
        gGamepower.timer=setInterval(function(){
            gGamepower.clear()
            gGamepower.snake.move()
            gGamepower.food.show()
        },500)
              //鍵盤控制
        this.keyContorl();
        
    },
             //定義鍵盤控制
    keyContorl : function () {
        window.onkeydown = function (e){
            var a = e.keyCode;
            if (a==37)
            {//左
                if (gGamepower.snake.direct == "left")
                {
                    return;
                }
                gGamepower.snake.direct = "left"

            }
            else if (a==38)
            {//上
                if (gGamepower.snake.direct == "up")
                {
                    return;
                }
                gGamepower.snake.direct = "up"
            }
            else if (a==39)
            {//右
                if (gGamepower.snake.direct == "right")
                {
                    return;
                }
                gGamepower.snake.direct = "right"
            }
            else if (a==40)
            {//下
                if (gGamepower.snake.direct = "down")
                {
                    return;
                }
                gGamepower.snake.direct = "down"
            }
            

        }       
    }
    
}

食物

function Food () {
//坐標
    this.x = 0;
    this.y = 0;
    this.change()
}
//食物顯示
Food.prototype.show = function () {
    gGamepower.Alltd[this.y][this.x].className = "food"
}
//隨機改變食物位置
Food.prototype.change = function () {
    this.x = parseInt(Math.random()*gGamepower.cols);
    this.y = parseInt(Math.random()*gGamepower.rows);
    this.show();

}

因為蛇可能需要手動創(chuàng)建,可能有多條蛇蔫浆,所以 采用 構造函數(shù)的方式 更合適些厂抖。
(擴展) 蛇的顏色、蛇的大小克懊、蛇的初始位置 都可以改忱辅,也可以繼承的方式來實現(xiàn)不同的蛇

function Snake () {
    this.arr = [
        {x: 5, y: 2},
        {x: 4, y: 2},
        {x: 3, y: 2},
        {x: 2, y: 2},
        {x: 1, y: 2}
    ]
    this.direct = "right"

    
}

Snake.prototype.fresh = function () {
    for (i=0;i<this.arr.length ;i++ )
    {
        var x = this.arr[i].x
        var y = this.arr[i].y
        gGamepower.Alltd[y][x].className = "snake"
    }
}
Snake.prototype.move = function () {
    var x = this.arr[0].x
    var y = this.arr[0].y
    if (this.direct == "right")
    {
        x++
    }
    else if (this.direct == "down")
    {
        y++
    }
    else if (this.direct == "up")
    {
        y--;
    }
        else if (this.direct == "left")
    {
        x--;
    }
    if (x>=gGamepower.cols||y>=gGamepower.rows||x<0||y<0)
    {
        clearInterval(gGamepower.timer)
        alert("GG~");
        return ;
    }
    if (x == gGamepower.food.x && y == gGamepower.food.y)
    {
        this.arr.unshift({x: x, y: y});
        gGamepower.food.change();
        this.fresh();
        return ;
    }

    this.arr.unshift({x:x,y:y})
    this.arr.pop()
    this.fresh()
}

總結

面向對象又更深的理解

*Alltd里面有兩個數(shù)組(數(shù)組里面包含數(shù)組)

需要再多練習

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谭溉,隨后出現(xiàn)的幾起案子墙懂,更是在濱河造成了極大的恐慌,老刑警劉巖扮念,帶你破解...
    沈念sama閱讀 216,997評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件损搬,死亡現(xiàn)場離奇詭異,居然都是意外死亡柜与,警方通過查閱死者的電腦和手機巧勤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄匕,“玉大人颅悉,你說我怎么就攤上這事∏ń常” “怎么了剩瓶?”我有些...
    開封第一講書人閱讀 163,359評論 0 353
  • 文/不壞的土叔 我叫張陵驹溃,是天一觀的道長。 經常有香客問我延曙,道長豌鹤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,309評論 1 292
  • 正文 為了忘掉前任枝缔,我火速辦了婚禮布疙,結果婚禮上,老公的妹妹穿的比我還像新娘愿卸。我一直安慰自己灵临,他們只是感情好,可當我...
    茶點故事閱讀 67,346評論 6 390
  • 文/花漫 我一把揭開白布擦酌。 她就那樣靜靜地躺著俱诸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赊舶。 梳的紋絲不亂的頭發(fā)上睁搭,一...
    開封第一講書人閱讀 51,258評論 1 300
  • 那天,我揣著相機與錄音笼平,去河邊找鬼园骆。 笑死,一個胖子當著我的面吹牛寓调,可吹牛的內容都是我干的锌唾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夺英,長吁一口氣:“原來是場噩夢啊……” “哼晌涕!你這毒婦竟也來了?” 一聲冷哼從身側響起痛悯,我...
    開封第一講書人閱讀 38,970評論 0 275
  • 序言:老撾萬榮一對情侶失蹤余黎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后载萌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惧财,經...
    沈念sama閱讀 45,403評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡扭仁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,596評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了搀突。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,769評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡描姚,死狀恐怖戈次,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情怯邪,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評論 5 344
  • 正文 年R本政府宣布澄步,位于F島的核電站和泌,受9級特大地震影響,放射性物質發(fā)生泄漏武氓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,075評論 3 327
  • 文/蒙蒙 一东羹、第九天 我趴在偏房一處隱蔽的房頂上張望忠烛。 院中可真熱鬧,春花似錦美尸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尸疆。三九已至,卻和暖如春寿弱,著一層夾襖步出監(jiān)牢的瞬間按灶,已是汗流浹背症革。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評論 1 269
  • 我被黑心中介騙來泰國打工噪矛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留量蕊,地道東北人艇挨。 一個月前我還...
    沈念sama閱讀 47,831評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像势就,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子苞冯,可洞房花燭夜當晚...
    茶點故事閱讀 44,678評論 2 354

推薦閱讀更多精彩內容

  • 貪吃蛇是眾多90后小時候玩過的一款經典手游舅锄,但是在程序員眼中則是幾頁代碼的編輯,代碼里所涉及的內容也比較簡...
    3c58eba4eb74閱讀 449評論 0 0
  • 整體思路 用面向對象的思路寫一個貪吃蛇游戲皇忿,首先需要找到游戲中的所有對象烘贴。在每一個游戲的實現(xiàn)中都會有一個游戲引擎對...
    銀河戰(zhàn)艦_cc3f閱讀 609評論 0 0
  • 貪吃蛇項目總結 項目需求分析 采用 "面向對象編程" 思路,因為 面向對象的思想 更適應于應用程序的編寫老翘。 1. ...
    lvye1221閱讀 1,029評論 0 0
  • 先看繼承和冒充锻离;# function a(){};b.prototye= new a()'b 繼承a,是可以把a的...
    King小志閱讀 277評論 2 2
  • 眾所周知,http的連接是無狀態(tài)的虱朵。 HTTP無狀態(tài)協(xié)議是指協(xié)議對于事務處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處...
    擼碼東閱讀 1,646評論 0 5