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 相关文章推荐
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
Apr 27 Javascript
js每隔5分钟执行一次ajax请求的实现方法
Nov 27 Javascript
Javascript监视变量变化的方法
Jun 09 Javascript
详解如何在Angular优雅编写HTTP请求
Dec 05 Javascript
react+ant design实现Table的增、删、改的示例代码
Dec 27 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
JavaScript使用面向对象实现的拖拽功能详解
Jun 12 Javascript
在vue中阻止浏览器后退的实例
Nov 06 Javascript
写给新手同学的vuex快速上手指北小结
Apr 14 Javascript
Vue点击切换Class变化,实现Active当前样式操作
Jul 17 Javascript
在vue中嵌入外部网站的实现
Nov 13 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网站判断用户是否是手机访问的方法
2013/11/01 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
js 颜色选择器(兼容firefox)
2009/03/05 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
JavaScript函数详解
2015/02/27 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
jQuery easyui刷新当前tabs的方法
2016/09/23 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python实现方便使用的级联进度信息实例
2015/05/05 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
实习自荐信
2013/10/13 职场文书
高中生毕业自我鉴定范文
2013/12/22 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
电子信息工程自荐信
2014/05/26 职场文书
Python中使用subprocess库创建附加进程
2021/05/11 Python
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS