js实现经典贪吃蛇小游戏


Posted in Javascript onMarch 19, 2020

本文实例为大家分享了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 = `width:${this.w}px;height:${this.h}px;background:${this.c};margin:0 auto;position:relative;border:solid 10px black;`;
      document.body.appendChild(this.mapEle);
    }
  }
  class Food{
    constructor(){
      this.w = 20;
      this.h = 20;
      this.c = "red";
      this.x = 0;
      this.y = 0;
      this.createEle();
    }
    createEle(){
      this.foodEle = document.createElement("div");
      this.foodEle.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.c};
position:absolute;left:${this.x * this.w}px;top:${this.y * this.h}px;`;
      m.mapEle.appendChild(this.foodEle);
    }
    randomPos(){
      this.x = random(0,(m.w-this.w) / this.w);
      this.y = random(0,(m.h-this.h) / this.h);
      this.foodEle.style.left = this.x * this.w + "px";
      this.foodEle.style.top = this.y * this.h + "px";
    }
  }
  class Snake{
    constructor(){
      this.w = 20;
      this.h = 20;
      this.body = [{
        ele:null,
        x:4,
        y:3,
        c:randomColor()
      },{
        ele:null,
        x:3,
        y:3,
        c:randomColor()
      },{
        ele:null,
        x:2,
        y:3,
        c:randomColor()
      }];
 
      this.d = "right";
 
      this.createEle();
    }
    createEle(){
      for(var i=0;i<this.body.length;i++){
        if(!this.body[i].ele){
          this.body[i].ele = document.createElement("div");
          m.mapEle.appendChild(this.body[i].ele);
        }
        this.body[i].ele.style.cssText = `width:${this.w}px;height:${this.h}px;background:${this.body[i].c};
position:absolute;left:${this.body[i].x * this.w}px;top:${this.body[i].y * this.h}px;`;
      }
      this.body[0].ele.innerHTML = "0";
 
      setTimeout(()=>{
        this.move();
      },300);
    }
    move(){
      for(var i=this.body.length-1; i>0; i--){
        this.body[i].x = this.body[i-1].x;
        this.body[i].y = this.body[i-1].y;
      }
      switch(this.d){
        case "left":
          this.body[0].x -= 1;
          break;
        case "right":
          this.body[0].x += 1;
          break;
        case "top":
          this.body[0].y -= 1;
          break;
        case "bottom":
          this.body[0].y += 1;
          break;
      }
      
      if(this.body[0].x < 0 || this.body[0].y < 0 || this.body[0].x > ((m.w-this.w) / this.w) || this.body[0].y > ((m.h-this.h) / this.h)){
        alert("撞墙了");
        return;
      }
 
      if(this.body[0].x === f.x && this.body[0].y === f.y){
        this.body.push({
          ele:null,
          x:this.body[this.body.length-1].x,
          y:this.body[this.body.length-1].y,
          c:randomColor()
        })
        f.randomPos();
      }
 
      for(var i=1;i<this.body.length;i++){
        if(this.body[0].x == this.body[i].x && this.body[0].y == this.body[i].y){
          alert("撞到自己了");
          return;
        }
      }
 
      this.createEle();
    }
    direct(type){
      
      switch(type){
        case 37:
          if(this.d === "right") break;
          this.d = "left";
          break;
        case 38:
          if(this.d === "bottom") break;
          this.d = "top";
          break;
        case 39:
          if(this.d === "left") break;
          this.d = "right";
          break;
        case 40:
          if(this.d === "top") break;
          this.d = "bottom";
          break;
      }
    }
  }
 
  function random(a,b){
    return Math.round(Math.random()*(a-b)+b)
  }
  function randomColor(){
    return `rgb(${random(0,255)},${random(0,255)},${random(0,255)})`
  }
 
  var m = new Map();
  
  var f = new Food();
  
    f.randomPos();
 
  var s = new Snake();
  document.onkeydown = function(eve){
    var e = eve || window.event;
    var code = e.keyCode || e.which;
    s.direct(code);
  }
 
</script>

js实现经典贪吃蛇小游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 有用的脚本函数
May 07 Javascript
Javascript继承(上)——对象构建介绍
Nov 08 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
当json键为数字时的取值方法解析
Nov 15 Javascript
Node.js中的缓冲与流模块详细介绍
Feb 11 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
详谈JS中实现种子随机数及作用
Jul 19 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
JavaScript DOM元素常见操作详解【添加、删除、修改等】
May 09 Javascript
layui--select使用以及下拉框实现键盘选择的例子
Sep 24 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
Jul 28 Javascript
利用JavaScript模拟京东按键输入功能
Dec 01 Javascript
javascrpt密码强度校验函数详解
Mar 18 #Javascript
Node.js Domain 模块实例详解
Mar 18 #Javascript
js判断密码强度的方法
Mar 18 #Javascript
vue项目配置使用flow类型检查的步骤
Mar 18 #Javascript
Vue项目中使用flow做类型检测的方法
Mar 18 #Javascript
JavaScript正则表达式验证登录实例
Mar 18 #Javascript
JS正则表达式验证密码强度
Mar 18 #Javascript
You might like
PHP的开发框架的现状和展望
2007/03/16 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
用javascript操作xml
2006/11/04 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
jQuery中:animated选择器用法实例
2014/12/29 Javascript
js中this的用法实例分析
2015/01/10 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
python实现抽奖小程序
2020/04/15 Python
基于Python函数和变量名解析
2019/07/19 Python
django连接oracle时setting 配置方法
2019/08/29 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
python用tkinter实现一个gui的翻译工具
2020/10/26 Python
python实现图片转字符画
2021/02/19 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
abstract是什么意思
2012/02/12 面试题
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
中学生社会实践教育活动总结
2015/05/06 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL