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之典型高阶函数应用介绍二
Jan 10 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
深入浅析javascript立即执行函数
Oct 23 Javascript
jquery自定义表格样式
Nov 23 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 Javascript
全面了解js中的script标签
Jul 04 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
微信小程序自定义select下拉选项框组件的实现代码
Aug 28 Javascript
Vue 2.0 侦听器 watch属性代码详解
Jun 19 Javascript
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
Vue3实现简易音乐播放器组件
Aug 14 Vue.js
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中循环语句的用法介绍
2012/01/30 PHP
CodeIgniter生成网站sitemap地图的方法
2013/11/13 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
从新浪弄下来的全屏广告代码 与使用说明
2007/03/15 Javascript
JS俄罗斯方块,包含完整的设计理念
2010/12/11 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
javascript每日必学之循环
2016/02/19 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
基于JavaScript实现添加到购物车效果附源码下载
2016/08/22 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
bootstrap里bootstrap动态加载下拉框的实例讲解
2018/08/10 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
JavaScript实现轮播图效果代码实例
2019/09/28 Javascript
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
wxPython之解决闪烁的问题
2018/01/15 Python
Python使用正则表达式获取网页中所需要的信息
2018/01/29 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
医学专业毕业生个人的求职信
2013/12/04 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
临时租车协议范本
2014/09/23 职场文书
2015年化验室工作总结
2015/04/23 职场文书
高中班长竞选稿
2015/11/20 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js