贪吃蛇心得

整体思路

用面向对象的思路写一个贪吃蛇游戏,首先需要找到游戏中的所有对象。在每一个游戏的实现中都会有一个游戏引擎对象,我们定义为gameBox,除此之外该游戏还包括了蛇(snake),食物(food)两个对象。找到对象后再去分析对象所具有的属性和方法,并通过代码去实现它。

实现过程

1、游戏引擎对象的实现。

由于在每个游戏中,引擎对象一般都只有一个,所以我们可以用对象字面量的形式来定义,具体代码如下:

var gameBox = {

    rows: 20,
    cols: 20,
        allTds: [],
        start: function(){
                var oTable = document.createElement('table');

        for (var i=0; i<this.cols; i++)
        { 
            var aTr = document.createElement('tr');
            var arr = [];

            for (var j=0; j<this.cols; j++)
            {   
                var aTd = document.createElement('td');
                aTr.appendChild(aTd);
                arr.push(aTd);
            }
            this.allTds.push(arr);
            oTable.appendChild(aTr);
        }

        document.body.appendChild(oTable);
       }

整个游戏的环境我们用一个表格来实现,最原始的 游戏引擎对象包括表格的行数(rows)、列数(cols)以及保存所有td的数组(allTds)三个属性,和一个将环境添加到页面的方法(start)。

2、食物对象的实现。

食物除了具有自身大小,颜色,位置等属性外,还具有显示,改变位置等方法,由于在游戏中可能不止出现一个食物,所以我们采用构造函数的方式来创建食物对象。

function Food(){

    this.x = 0;
    this.y = 0;
}

Food.prototype.change = function(){

    this.x = parseInt(Math.random()*gameBox.cols);
    this.y = parseInt(Math.random()*gameBox.rows);
    
    this.show();
    
}
Food.prototype.show = function(){
    
    gameBox.allTds[this.y][this.x].className = 'food'; 
}

定义两个x,y属性i来保存食物的位置,然后当达到一定要求时改变食物的位置,食物的位置是随机的,所以需要创建两个随机数,作为食物的位置。

3、蛇对象的实现

和食物一样,蛇在游戏中可能也不止一条,所以我们也采用构造函数的方式来定义对象。

function Snake(){

    this.nodes = [
        {x:5,y:1},      
        {x:4,y:1},
        {x:3,y:1},
        {x:2,y:1},
        {x:1,y:1}
    ];

    this.directer = 'down';
}

Snake.prototype.render = function(){

    for (var i=0; i<this.nodes.length; i++)
    {
        var x = this.nodes[i].x;
        var y = this.nodes[i].y;

        gameBox.allTds[y][x].className = 'snake';
    }
}

Snake.prototype.move = function(){

    var x = this.nodes[0].x;
    var y = this.nodes[0].y

    if (this.directer == "right")
    {
        x++;
    }
    if(this.directer == "left")
    {
        x--;
    }
    if (this.directer == "up")
    {
        y--;
    }
    if (this.directer == "down")
    {
        y++;
    }
    
    if (x>=gameBox.cols || y>=gameBox.rows || x<0 || y<0)
    {
        alert("Game Over!!");
        clearInterval(gameBox.timer)
        return ;
    }

    
    this.nodes.unshift({x:x,y:y});

    this.nodes.pop({x:x,y:y});

    if (x == gameBox.food.x && y == gameBox.food.y)
    {
        this.nodes.unshift({x:x,y:y});
        gameBox.food.change();
        

    }
    
    this.render();
}

在蛇对象中定义一个nodes属性来保存蛇,directer属性保存蛇的运动方向render方法将蛇显示在游戏环境中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 1.建立三个外接文件,分别是写出游戏引擎、描述食物的、描述蛇的js。 2.在主页面进行游戏的运行。 3.在游戏引擎...
    qzuser_1d64阅读 2,979评论 2 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,051评论 25 707
  • 放风筝的人丢过很多东西 老婆、孩子、钱包、手机。。。 那天他跟着风筝跑进了夕阳里 他弄丢了整个世界 远方只有天空和...
    活在诗下阅读 221评论 0 0
  • 写于2015年6月2日,可能已过时,请谨慎参考。 不知才哪儿看来的: 如果你有一个问题,你想到可以用正则来解决,那...
    周骅阅读 532评论 1 2
  • 林清玄曾说:真正的生活品质,是回到自我,清楚衡量自己的能力与条件,在这有限的条件下追求最好的事物与生活。用自己的标...
    温以沫阅读 180评论 0 0