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 相关文章推荐
jQuery Ajax之load()方法
Oct 12 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
js获取及修改网页背景色和字体色的方法
Dec 29 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
Mar 06 Javascript
jQuery 跨域访问解决原理案例详解
Jul 09 Javascript
TypeScript入门-接口
Mar 30 Javascript
详解Vue.js分发之作用域槽
Jun 13 Javascript
使用JavaScript实现一个小程序之99乘法表
Sep 21 Javascript
详解javascript常用工具类的封装
Jan 30 Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
关于redux-saga中take使用方法详解
Feb 27 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
学习php笔记 字符串处理
2010/10/19 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
jquery 页面全选框实践代码
2010/04/02 Javascript
jQuery动态添加删除select项(实现代码)
2013/09/03 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
原生js实现轮播图的示例代码
2017/02/20 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
详解python中__name__的意义以及作用
2019/08/07 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
python 实现图片裁剪小工具
2021/02/02 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
秘书岗位职责
2013/11/18 职场文书
十佳护士获奖感言
2014/02/18 职场文书
受资助学生感谢信
2015/01/21 职场文书
南湾猴岛导游词
2015/02/09 职场文书
卫生主题班会
2015/08/14 职场文书