美文网首页
贪吃蛇心得

贪吃蛇心得

作者: 银河战舰_cc3f | 来源:发表于2017-10-16 21:01 被阅读0次

整体思路

用面向对象的思路写一个贪吃蛇游戏,首先需要找到游戏中的所有对象。在每一个游戏的实现中都会有一个游戏引擎对象,我们定义为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方法将蛇显示在游戏环境中。

相关文章

  • 贪吃蛇心得

    整体思路 用面向对象的思路写一个贪吃蛇游戏,首先需要找到游戏中的所有对象。在每一个游戏的实现中都会有一个游戏引擎对...

  • 《贪吃蛇大作战》简单的游戏,不简单的社会

    从接触到观察再到思考,我的10 天游戏体验心得。 最近有一款游戏风靡朋友圈《贪吃蛇大作战》,先不要...

  • 贪吃蛇巴士 for Mac(休闲街机游戏) v0.1

    贪吃蛇巴士(snakeybust)是将经典街机游戏“贪吃蛇”用现代图形来展现的休闲街机游戏。贪吃蛇巴士Mac版游戏...

  • 贪吃蛇背后的故事

    贪吃蛇介绍 贪吃蛇最先出现于1976年,是Gremlin平台推出的一款经典街机游戏Blockade。贪吃蛇(也叫做...

  • 贪吃蛇心得体会

    1.建立三个外接文件,分别是写出游戏引擎、描述食物的、描述蛇的js。 2.在主页面进行游戏的运行。 3.在游戏引擎...

  • 贪吃蛇大结局

    童年的回忆,贪吃蛇大结局,看一下贪吃蛇最后变成了什么?

  • JS-进阶-Day2

    贪吃蛇案例:

  • 贪吃蛇

    js 贪吃蛇代码

  • 我的贪吃蛇

    最近一直在玩一个游戏――贪吃蛇大作战,为此,耗费我不少时间。 我给我的贪吃蛇命名:我的贪吃蛇wr,后面wr是我名字...

  • 萌萌小蛇蛇

    这绝对是一个会令你振奋的贪吃蛇游戏,支持多人在线的贪吃蛇游戏。好好想想,你是否已经腻歪了单纯的吃食物变长的贪吃蛇游...

网友评论

      本文标题:贪吃蛇心得

      本文链接:https://www.haomeiwen.com/subject/hyyluxtx.html