这样的美杜莎,你不爱?

Posted N奈斯先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这样的美杜莎,你不爱?相关的知识,希望对你有一定的参考价值。

   欢迎加入前端技术营!如果你也是前端学习者或者对前端有学习的想法,那就跟着我一起从零开始进击前端。
  致力于尽可能详细且简洁的介绍前端知识、自己的捷径,也是学习路上的记录。欢迎探讨



蛇的初始化和创建

        table
        border-collapse: collapse;
        background: transparent;
        border: 1px solid pink;
        
        td
        width: 24px;
        height: 24px;
        border: 1px solid pink;
        
    <div id="app"></div>
    <script src="js/game.js"></script>
    <script>
        var game = new Game()
    </script>
function Game() 
    // alert('欢迎来到贪吃蛇');
    //行数
    this.row = 20;
    //列数
    this.col = 20;
    // 分数
    this.score = 0;
    //初始化蛇类
    this.init();

Game.prototype.init = function () 
    this.dom = document.createElement("table");
    var tr, td;
    //遍历行和列上树
    for (var i = 0; i < this.row; i++) 
        //遍历行,创建结点上树
        tr = document.createElement("tr");
        for (var j = 0; j < this.col; j++) 
            //遍历列,创建结点上树
            td = document.createElement("td");
            //追加到tr
            console.log(tr);
            tr.appendChild(td);
        
        //追加结点上树
        this.dom.appendChild(tr);
    
    //表格上树
    document.getElementById("app").appendChild(this.dom);

function Snake() 
    //蛇的初始化身体
    this.body = [
        /*  "row": 3, "col": 7 ,
        "row": 3,"col": 6, */

         "row": 3, "col": 5 ,
        "row": 3, "col": 4,
        "row": 3,"col": 3,
        "row": 3,"col": 2 ];

蛇的运动

Snake.prototype.update = function () 
    //当前的direction接收willdirection
    this.direction = this.willDirection;
    switch (this.direction) 
        case "R":
            //向右移动
            this.body.unshift(
                "row": this.body[0].row,
                "col": this.body[0].col + 1
            );
            break;
        case "D":
            //向下移动
            this.body.unshift(
                "row": this.body[0].row + 1,
                "col": this.body[0].col
            );
            break;
        case "L":
            //向左移动
            this.body.unshift(
                "row": this.body[0].row,
                "col": this.body[0].col - 1
            );
            break;
        case "U":
            //向上移动
            this.body.unshift(
                "row": this.body[0].row - 1,
                "col": this.body[0].col
            );
            break;

    
// 设置键盘事件监听
Game.prototype.bindEvent = function () 
    var self = this;
    //键盘事件
    document.onkeydown = function (event) 
        // 获取键盘值
        console.log(event.keyCode, 'event');
        switch (event.keyCode) 
            //按下左键
            case 37:
                //先进行判断,如果当前的方向是向右移动,此时不能按左键
                if (self.snake.direction == 'R') return;
                self.snake.changeDirection("L");
                break;
            case 38:
                //按下上键
                //先进行判断,如果当前的方向是向下移动,此时不能按上键
                if (self.snake.direction == 'D') return;
                self.snake.changeDirection("U");
                break;
            case 39:
                //按下右键
                //先进行判断,如果当前的方向是向左移动,此时不能按右键
                if (self.snake.direction == 'L') return;
                self.snake.changeDirection("R");
                break;
            case 40:
                //按下下键
                //先进行判断,如果当前的方向是向上移动,此时不能按下键
                if (self.snake.direction == 'U') return;
                self.snake.changeDirection("D");
                break;
        

    
;

死亡判定

//死亡判定1:超出边界
    if (this.body[0].col > game.col - 1 || this.body[0].row > game.row - 1 || this.body[0].col < 0 || this.body[0].row < 0) 
        alert('游戏结束,得分为:' + game.score + "分");
        this.body.unshift(); //删除是因为当前的头增是不合法的,因为已经结束了
        clearInterval(game.timer)
    
    // //死亡判定2:自己撞自己:当前蛇的头部和身体的某一部分row和col重合时
    for (var i = 1; i < this.body.length; i++) 
        if (this.body[0].col == this.body[i].col && this.body[0].row == this.body[i].row) 
            alert('游戏结束,得分为:' + game.score + "分");
            this.body.unshift(); //删除是因为当前的头增是不合法的,因为已经结束了
            clearInterval(game.timer)
        

    

食物的创建

function Food(gameSnake) 
    var self = this;
    // alert('食物');
    //食物的位置
    //do while 作用是先创建一个位置,再判断是否在蛇身上
    do 
        this.row = parseInt(Math.random() * gameSnake.row);
        this.col = parseInt(Math.random() * gameSnake.col);
     while ((function () 
            //遍历蛇的row和col然后和新随机出来的进行判断是否重合
            for (var i = 0; i < gameSnake.snake.body.length; i++) 
                if (gameSnake.snake.body[i].row == self.row && gameSnake.snake.body[i].col == self.col) 
                    return true;
                
            
            return false;
        )());
    console.log(this.row, this.col);

Food.prototype.render = function () 
    game.sethtml(this.row, this.col, "🍤")

蛇吃食物

//蛇吃食物
    //判断如果当前蛇的头部没有和食物进行重合,就代表此时没有吃到食物,进行尾部删除;否则相反
    if (this.body[0].row == game.food.row && this.body[0].col == game.food.col) 
        // alert('吃到了');
        // 此时只有头部增加了,尾部没有删除
        // 创建新食物
        game.food = new Food(game)
        //加分数
        game.score++;
        //让帧编号归0,因为蛇会窜一下
        game.f = 0;
     else 
        this.body.pop()
    

效果

总体思路就是这样,再把游戏盘稍加修饰,老规矩,代码在下方

好了,退下吧,本王要休息了
哎~记得三连


  • 扫码回复“贪吃蛇”获取源码
  • 点赞加关注,持续更新实用技巧、热门资源、软件教程等
  • 有任何 软件 影视 教程资源 考证资料等需求留言即可

以上是关于这样的美杜莎,你不爱?的主要内容,如果未能解决你的问题,请参考以下文章

求以美杜莎为主题的游戏!!~

数据挖掘显示《漫威终极联盟3》或追加剧情DLC

美杜莎软件如何拟合化学反应

美杜莎和九头蛇的对比

求解课后题

美杜莎传奇没有破解版吗