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的设计模式
Nov 22 Javascript
JavaScript入门教程(3) js面向对象
Jan 31 Javascript
JavaScript 学习笔记(九)call和apply方法
Jan 11 Javascript
jquery 新浪网易的评论块制作
Jul 01 Javascript
jQuery操作input值的各种方法总结
Nov 21 Javascript
浅谈js中对象的使用
Aug 11 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
从零学习node.js之利用express搭建简易论坛(七)
Feb 25 Javascript
react高阶组件经典应用之权限控制详解
Sep 07 Javascript
纯js代码生成可搜索选择下拉列表的实例
Jan 11 Javascript
JS实现前端动态分页码代码实例
Jun 02 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 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
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
jQuery功能函数详解
2015/02/01 Javascript
详谈LABJS按需动态加载js文件
2015/05/07 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
在vue项目中安装使用Mint-UI的方法
2017/12/27 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
gulp构建小程序的方法步骤
2019/05/31 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
python中requests使用代理proxies方法介绍
2017/10/25 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python脚本开机自启的实现方法
2019/06/28 Python
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
中学生英语演讲稿
2014/04/26 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
就业意向协议书
2015/01/29 职场文书
辞职离别感言
2015/08/04 职场文书
劳动合同变更协议书范本
2019/04/18 职场文书
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记