js实现经典贪吃蛇小游戏

 更新时间:2020年03月19日 08:41:29   作者:✧* ꧁柠檬ヤ汽水꧂✧*  
这篇文章主要为大家详细介绍了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 = `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>

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

相关文章

  • IE浏览器IFrame对象内存不释放问题解决方法

    IE浏览器IFrame对象内存不释放问题解决方法

    IFrame对象占用的内存资源在窗体关闭后不会释放。弹出关闭反复多次后,IE浏览器内存占用可超过数百M,严重时IE浏览器报错
    2014-08-08
  • js动态生成form 并用ajax方式提交的实现方法

    js动态生成form 并用ajax方式提交的实现方法

    下面小编就为大家带来一篇js动态生成form 并用ajax方式提交的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 必备的JS调试技巧汇总

    必备的JS调试技巧汇总

    试想一下:出现了某个bug,有人用几分钟就搞定了,有人用了半天或者一天都找不到原因所在。你愿意当前者还是后者呢?想当前者的就请好好看完本篇文章吧。文中涉及较多Gif演示动画请注意。
    2016-07-07
  • 常见Ajax下载文件方式以及报错解决办法

    常见Ajax下载文件方式以及报错解决办法

    AJAX(Asynchronous JavaScript and XML)是一种用于创建快速、动态和交互式网页的技术,它的主要优势在于能够在不刷新整个网页的情况下与服务器进行数据交互,这篇文章主要给大家介绍了关于常见Ajax下载文件方式以及报错解决办法的相关资料,需要的朋友可以参考下
    2024-01-01
  • JS判断空对象的几个方法大盘点

    JS判断空对象的几个方法大盘点

    在做数据交互的时候,我们经常需要判断数据或者对象是不是为空,避免当接口异常时候前端页面崩溃,下面这篇文章主要给大家介绍了关于JS判断空对象的几个方法,需要的朋友可以参考下
    2022-02-02
  • JavaScript组件开发完整示例

    JavaScript组件开发完整示例

    这篇文章主要介绍了JavaScript组件开发的方法,结合完整实例形式分析了组件的原理与实现技巧,代码包含的详尽的注释,便于理解,需要的朋友可以参考下
    2015-12-12
  • 把json格式的字符串转换成javascript对象或数组的方法总结

    把json格式的字符串转换成javascript对象或数组的方法总结

    下面小编就为大家带来一篇把json格式的字符串转换成javascript对象或数组的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • JS实现程序暂停与继续功能代码解读

    JS实现程序暂停与继续功能代码解读

    程序暂停与继续的实现方法有很多,在本文为大家介绍下js中是如果做到的,并对具体的功能代码进行注释说明,感兴趣的朋友不要错过
    2013-10-10
  • javascript实现rgb颜色转换成16进制格式

    javascript实现rgb颜色转换成16进制格式

    本文给大家分享的是使用javascript实现rgb颜色转换成16进制格式的方法和示例代码,有需要的小伙伴可以参考下。
    2015-07-07
  • 基于Cesium实现加载显示热力图

    基于Cesium实现加载显示热力图

    这篇文章主要介绍了如何利用Cesium实现加载显示热力图,文中的示例代码讲解详细,对我们学习或工作有一定的帮助,需要的可以参考一下
    2022-06-06

最新评论