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中的replace方法使用介绍
Oct 28 Javascript
table对象中的insertRow与deleteRow使用示例
Jan 26 Javascript
javascript数组输出的两种方式
Jan 13 Javascript
jQuery验证插件validation使用指南
Apr 21 Javascript
javascript中substring()、substr()、slice()的区别
Aug 30 Javascript
js图片轮播手动切换效果
Nov 10 Javascript
详谈js原型继承的一些问题
Sep 06 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
Apr 04 Javascript
巧妙运用v-model实现父子组件传值的方法示例
Apr 07 Javascript
jquery图片预览插件实现方法详解
Jul 18 jQuery
关于Js中new操作符的作用详解
Feb 21 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
天使彦史上最神还原,性别曝光的那一刻,百万网友恋爱了
2020/03/02 国漫
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
php使用google地图应用实例
2014/12/31 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
js读写(删除)Cookie实例详解
2013/04/17 Javascript
js实现按Ctrl+Enter发送效果
2014/09/18 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
原生js实现类似fullpage的单页/全屏滚动
2017/01/22 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
vuex实现购物车功能
2020/06/28 Javascript
[49:08]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.27
2020/12/01 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
Python单链表简单实现代码
2016/04/27 Python
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
Python模块搜索路径代码详解
2018/01/29 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
Python 实现异步调用函数的示例讲解
2018/10/14 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python Web框架之Django框架文件上传功能详解
2019/08/16 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
HTML5 video播放器全屏(fullScreen)方法实例
2015/04/24 HTML / CSS
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
网站创业计划书
2014/04/30 职场文书
信访稳定工作汇报
2014/10/27 职场文书
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android