JS实战面向对象贪吃蛇小游戏示例

目录
  • 思考
  • 一、贪吃蛇效果图
  • 二、贪吃蛇分析
    • 2.1 开始游戏功能
    • 2.2 运动功能
      • 2.2.1 蛇的不同方向的运动
      • 2.2.2 键盘控制方向运动功能
    • 2.3 吃食物功能
      • 2.3.1 食物的产生
      • 2.3.2 吃食物的过程
    • 2.4 死亡判定功能
      • 2.4.1 触边死亡判断(撞墙了)
      • 2.4.2 自己撞到自己
    • 2.5 暂停/继续游戏功能
  • 总结

思考

第一步思考蛇分为几个部分,蛇头和蛇身体是怎么形成的。

第二步思考蛇是怎么运动的;如何通过键盘控制蛇的走向。

第三步思考游戏在什么情况下会结束。

第四步思考食物是怎么产生的,产生的位置和蛇的位置有什么需要注意的点。

第五步思考蛇是怎么吃到食物的;吃到后蛇的身体会变长,食物又会产生新的。

第六步做完以后多玩几次,享受一下自己的劳动成果。!!!

一、贪吃蛇效果图

二、贪吃蛇分析

2.1 开始游戏功能

当用户进入游戏主界面时,可在界面中下方显眼的位置找到“start”按钮,点击后用户可进行新游戏。获取button变量,给它添加一个addEventListener('click', function() {})点击事件。

btnstart.addEventListener('click', function() {
     btnstart.style.display = 'none';
     //调用中介类
     game = new Game();
     var table = document.querySelector('table');
     table.addEventListener('click', function() {
        //清除定时器
        clearInterval(game.timer);
        btnstop.style.display = 'block';
     })
});

2.2 运动功能

2.2.1 蛇的不同方向的运动

当用户点击”开始游戏“按钮后,蛇的方向默认从左到右方向移动。

//当前的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 "T":
            //向上移动
            this.body.unshift({ "row": this.body[0].row - 1, "col": this.body[0].col });
            break;
}

2.2.2 键盘控制方向运动功能

用户可通过使用键盘上的上下左右方位键控制蛇的移动方向,蛇在控制的方向上进行直线前进。

Game.prototype.bindEvent = function() {
    var self = this;
    //键盘事件
    document.onkeydown = function(e) {
        switch (e.keyCode) {
            //按左键
            case 37:
                //先进行判断(如果当前的方向是向右移动,此时我们不能按左键)
                if (self.snake.direction == 'R') return;
                // self.snake.direction = 'L';
                self.snake.changeDirection('L');
                self.d = "L";
                break;
                //按上键
            case 38:
                if (self.snake.direction == 'D') return;
                self.snake.changeDirection('T');
                self.d = "T";
                break;
                //按右键
            case 39:
                if (self.snake.direction == 'L') return;
                self.snake.changeDirection('R');
                self.d = "R";
                break;
                //按下键
            case 40:
                if (self.snake.direction == 'T') return;
                self.snake.changeDirection('D');
                self.d = "D";

                break;
        }

    }

};

2.3 吃食物功能

2.3.1 食物的产生

食物的位置:遍历蛇的row和col,然后和随机生成的row和col进行判断是否重合。

var self = this; //指的是window
    //下面的do-while循环语句作用是先创建一个row和col,在判断这个是否在蛇身上
    do {
        //食物的位置
        this.row = parseInt(Math.random() * gameSnake.row);
        this.col = parseInt(Math.random() * gameSnake.col);
    } while ((function() {
        //遍历蛇的row和col,然后和随机生成的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;
})());

2.3.2 吃食物的过程

当界面任意位置出现食物,用户使用方位键控制蛇移动到食物周围,当蛇头碰到食物时则表示贪吃蛇吃到此食物,界面上会在任意位置出现下一个食物,用户再次控制蛇去吃这一食物。

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

2.4 死亡判定功能

当蛇头在前进方向上撞到墙壁或蛇头吃到蛇身时,给出死亡判定,并弹框给出用户本次游戏得分。

2.4.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.4.2 自己撞到自己

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 + '分');
        clearInterval(game.timer);
    }
}

2.5 暂停/继续游戏功能

btnstop.addEventListener('click', function() {
    btnstop.style.display = 'none';
    game.timer = setInterval(function() {
    // 定时器里面的核心就是游戏的渲染本质,清屏-更新-渲染
    game.f++;
    // 清屏
    game.clear();
    // 蛇的运动/更新
    // 蛇的更新速度  当蛇边长的时候,速度加快
    var during = game.snake.body.length < 30 ? 30 - game.snake.body.length : 1;
    // 蛇的更新
    game.f % during == 0 && game.snake.update();
    // 渲染蛇
    game.snake.render();
    // 渲染食物
    game.food.render();
    }, 20);
})

总结

贪吃蛇小游戏项目,需要理清楚思路。

到此这篇关于JS实战面向对象贪吃蛇小游戏示例的文章就介绍到这了,更多相关JS贪吃蛇小游戏内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript实现经典贪吃蛇游戏

    本文实例为大家分享了JavaScript实现经典贪吃蛇游戏的具体代码,供大家参考,具体内容如下 主要使用单例模式,所有元素动态创建: 1.创建地图 var Map; function map(){ this.mapp=null; this.makemap=function(){ this.mapp=document.createElement ("div"); this.mapp.className ="mymap"; document.body.appendChi

  • javascript实现贪吃蛇小游戏思路

    javascript小游戏贪吃蛇实现思路讲解(完整代码实现),供大家参考,具体内容如下 效果流程 1.首先我们要操作的canvas <!doctype html> <html> <head> <meta charset="utf-8"> <title>贪吃蛇</title> </head> <body> <canvas id="canvas"></can

  • JavaScript 精美贪吃蛇实现流程

    目录 一.创建html结构 二.创建表格 三.创建蛇头.蛇身 四.创建食物 五.让蛇动起来 六.控制蛇的方向 七.完整代码 index.html Game.js Snake.js Food.js 八.图片 九.总结 这篇文章不简单!! 今天博主呕心沥血写了一个贪吃蛇的小游戏,整个过程从无到有简直扣人心弦. 接下来本博主就来好好说到说到这个过程!! 话不多说,我们还是先来看看最后的呈现效果吧. 看完了才知道什么叫做操作,简直传奇!! 接下来不吹牛来讲讲实际操作 ! 首先我们要知道所谓的贪吃蛇无非就

  • JS实战面向对象贪吃蛇小游戏示例

    目录 思考 一.贪吃蛇效果图 二.贪吃蛇分析 2.1 开始游戏功能 2.2 运动功能 2.2.1 蛇的不同方向的运动 2.2.2 键盘控制方向运动功能 2.3 吃食物功能 2.3.1 食物的产生 2.3.2 吃食物的过程 2.4 死亡判定功能 2.4.1 触边死亡判断(撞墙了) 2.4.2 自己撞到自己 2.5 暂停/继续游戏功能 总结 思考 第一步思考蛇分为几个部分,蛇头和蛇身体是怎么形成的. 第二步思考蛇是怎么运动的:如何通过键盘控制蛇的走向. 第三步思考游戏在什么情况下会结束. 第四步思考

  • Java实战之贪吃蛇小游戏(源码+注释)

    一.工程文件 二.Main.java package com.company; import javax.swing.*; public class Main { public static void main(String[] args) { //创建窗体对象 JFrame frame = new JFrame(); //创建窗体参数() frame.setBounds(10,10,900,720); //设置不允许更改大小 //frame.setResizable(false); //设置关

  • 基于pygame实现贪吃蛇小游戏示例

    目录 游戏截图 引入库 初始化模型 获取键盘事件 移动贪吃蛇 吃食物逻辑 碰撞到自身逻辑 结束游戏 显示文字函数 完整代码 游戏截图 引入库 import copy import random import sys import pygame 初始化模型 # 蛇模型 snake_list = [[10, 10]] # 食物的模型 x = random.randint(10, 490) y = random.randint(10, 490) food_point = [x, y] food_r,

  • JS+Canvas实现贪吃蛇小游戏

    今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不到有用的资料(不是代码!),所以说呢,只能自力更生 -_- 首先是大致要考虑的东西: 1.要有蛇(没蛇怎么叫贪吃蛇). 2.然后要有地图(蛇是不能上天的). 3.不能水平\垂直掉头(如果想掉头,需要至少变换方位并且至少移动一格才可). 4.食物(不然怎么贪吃). 5.吃了食物要变长(这才是精髓).

  • js实现经典贪吃蛇小游戏

    本文实例为大家分享了js实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 <script> class Map{ constructor(){ this.w = 800; this.h = 400; this.c = "#ccc"; this.createEle(); } createEle(){ this.mapEle = document.createElement("div"); this.mapEle.style.cssText = `wid

  • 原生js实现简单贪吃蛇小游戏

    本文实例为大家分享了js实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 先上图 话不多说,代码奉上,喜欢的请留下你的小星星♥(ˆ◡ˆԅ) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial

  • JS实现简单贪吃蛇小游戏

    本文实例为大家分享了JS实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 1.使用语言 HTML+CSS+JavaScript 2.使用工具 visual studio code 3.GitHub项目地址:贪吃蛇 4.项目运行截图: 5.项目功能分析:主要使用数组来存储蛇的位置,地图和蛇都是一个二维数组,对于有蛇的地方,地图的CSS就会发生改变,同时添加了添加了一个音乐播放按钮,通过CSS动画实现旋转. 6.项目代码:(项目代码有详细的注释) snake.html <!-- * @Auth

  • 纯js和css完成贪吃蛇小游戏demo

    本文实例为大家分享了js贪吃蛇小游戏demo,纯js和css完成,供大家参考,具体内容如下 <!doctype html> <html> <meta charset="utf-8"> <head> <style> *{ margin: 0; padding:0; } .content{ position: absolute; width: 500px; height: 500px; background-color: #212

  • JS学习笔记之贪吃蛇小游戏demo实例详解

    本文实例讲述了JS学习笔记之贪吃蛇小游戏demo实例.分享给大家供大家参考,具体如下: 最近跟着视频教程打了一个贪吃蛇, 来记录一下实现思路, 先上代码 静态页 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>贪吃蛇</title> </head> <style> *{ mar

  • js实现贪吃蛇小游戏

    本文实例为大家分享了js实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> &

随机推荐