首页 > 语言 > JavaScript > 正文

JS学习笔记之贪吃蛇小游戏demo实例详解

2024-05-06 15:38:43
字体:
来源:转载
供稿:网友

本文实例讲述了JS学习笔记之贪吃蛇小游戏demo实例。分享给大家供大家参考,具体如下:

最近跟着视频教程打了一个贪吃蛇,

来记录一下实现思路,

先上代码
静态页

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8" />  <title>贪吃蛇</title></head><style>*{  margin: 0;  padding: 0;}  .map{    width:800px;    height: 600px;    background-color: #ccc;    position:relative;  }</style><body><!-- 画出地图,设置样式 --> <div class="map"> </div></body><script src="food.js"></script><script src="snake.js"></script><script src="game.js"></script></html>

food.js

//食物就是一个对象,宽高横纵坐标,先定义构造函数,然后创建对象(function (){  var elements=[];//用来保存每个小方块食物  function Food(x,y,width,height,color){    //横纵坐标    this.x=x||0;    this.y=y||0;    this.width=width||20;    this.height=height||20;    //背景颜色    this.color=color||"green";  }  //为原型添加初始化的方法(作用:在页面上取显示这个食物)  //因为食物要在地图上显示,所以,需要地图这个参数  Food.prototype.init=function(map){    //先删除这个食物    //外部无法访问的函数    remove()    var div=document.createElement("div");    //把这个div加到map中    map.appendChild(div);    //设置div的样式    div.style.width=this.width+"px";    div.style.height=this.height+"px";    div.style.backgroundColor=this.color;    // div.style.left=this.x+"px";    //先脱离文档流    div.style.position="absolute";    //随机横纵坐标    this.x=parseInt(Math.random()*(map.offsetWidth/this.width))*this.width;    this.y=parseInt(Math.random()*(map.offsetHeight/this.height))*this.height;    div.style.left=this.x+"px";    div.style.top=this.y+"px";    // Food.prototype.init=function(map){    // }    //把div加入到数组elements中    elements.push(div);  }  function remove(){    //elements数组中有这个食物    for(var i=0;i<elements.length;i++){      var ele=elements[i]      //找到这个子元素的父级元素,然后删除这个子元素      ele.parentNode.removeChild(ele);      //再次把elements中的这个子元素也要删除      elements.splice(i,1)    }  }  //把Food暴露给Window,外部可以使用  window.Food=Food;}());

snake.js

//蛇(function(){  var elements=[];//存放小蛇的每个身体部分  //蛇的构造函数  function Snake(width,height,direction){    //小蛇的每个部分的宽    this.width=width||20;    this.height=height||20;    //身体    this.body=[      {x:3,y:2,color:"red"},      {x:2,y:2,color:"orange"},      {x:1,y:2,color:"orange"}    ];    this.direction=direction||"right";  }//蛇的初始化  Snake.prototype.init=function(map){    remove()    //循环遍历创建div    for(var i=0;i<this.body.length;i++){      var obj=this.body[i];      //创建div      var div=document.createElement("div");      //把div加入到map地图中      map.appendChild(div);      //设置div的样式;      div.style.position="absolute";      div.style.width=this.width+"px";      div.style.height=this.height+"px";      div.style.left=obj.x*this.width+"px";      div.style.top=obj.y*this.height+"px";      div.style.backgroundColor=obj.color;      //把div加入到elements数组中--目的是删除      elements.push(div)    }  }  //蛇的移动  Snake.prototype.move=function(food,map){    //改变蛇身体位置    var i=this.body.length-1; //2    for(;i>0;i--){      this.body[i].x=this.body[i-1].x;      this.body[i].y=this.body[i-1].y;    }    //判断方向---改变小蛇的头的坐标位置    switch (this.direction){      case "right":        this.body[0].x+=1;        break;      case "left":        this.body[0].x-=1;        break;      case "top":        this.body[0].y-=1;        break;      case "bottom":        this.body[0].y+=1;        break;    }    //判断有没有吃到食物    //小蛇的头的坐标和食物位置    var headX=this.body[0].x*this.width;    var headY=this.body[0].y*this.height;    //食物的横纵坐标    var foodX=food.x;    var foodY=food.y;    if(headX==foodX&&headY==foodY){      //获取蛇的最后尾巴      var last=this.body[this.body.length-1];      //把最后的蛇尾复制一份      this.body.push({        x:last.x,        y:last.y,        color:last.color      })      //重新初始化食物      food.init(map);    }  }  //删除小蛇的私有函数  function remove(){    //获取数组    var i=elements.length-1;    for(;i>=0;i--){      //先从当前的子元素中找到该子元素的父级元素,然后再弄死这个子元素      var ele=elements[i];      //从map地图上删除这个子元素div      ele.parentNode.removeChild(ele);      elements.splice(i,1);    }  }  window.Snake=Snake;}());//蛇(function(){  var elements=[];//存放小蛇的每个身体部分  //蛇的构造函数  function Snake(width,height,direction){    //小蛇的每个部分的宽    this.width=width||20;    this.height=height||20;    //身体    this.body=[      {x:3,y:2,color:"red"},      {x:2,y:2,color:"orange"},      {x:1,y:2,color:"orange"}    ];    this.direction=direction||"right";  }//蛇的初始化  Snake.prototype.init=function(map){    remove()    //循环遍历创建div    for(var i=0;i<this.body.length;i++){      var obj=this.body[i];      //创建div      var div=document.createElement("div");      //把div加入到map地图中      map.appendChild(div);      //设置div的样式;      div.style.position="absolute";      div.style.width=this.width+"px";      div.style.height=this.height+"px";      div.style.left=obj.x*this.width+"px";      div.style.top=obj.y*this.height+"px";      div.style.backgroundColor=obj.color;      //把div加入到elements数组中--目的是删除      elements.push(div)    }  }  //蛇的移动  Snake.prototype.move=function(food,map){    //改变蛇身体位置    var i=this.body.length-1; //2    for(;i>0;i--){      this.body[i].x=this.body[i-1].x;      this.body[i].y=this.body[i-1].y;    }    //判断方向---改变小蛇的头的坐标位置    switch (this.direction){      case "right":        this.body[0].x+=1;        break;      case "left":        this.body[0].x-=1;        break;      case "top":        this.body[0].y-=1;        break;      case "bottom":        this.body[0].y+=1;        break;    }    //判断有没有吃到食物    //小蛇的头的坐标和食物位置    var headX=this.body[0].x*this.width;    var headY=this.body[0].y*this.height;    //食物的横纵坐标    var foodX=food.x;    var foodY=food.y;    if(headX==foodX&&headY==foodY){      //获取蛇的最后尾巴      var last=this.body[this.body.length-1];      //把最后的蛇尾复制一份      this.body.push({        x:last.x,        y:last.y,        color:last.color      })      //重新初始化食物      food.init(map);    }  }  //删除小蛇的私有函数  function remove(){    //获取数组    var i=elements.length-1;    for(;i>=0;i--){      //先从当前的子元素中找到该子元素的父级元素,然后再弄死这个子元素      var ele=elements[i];      //从map地图上删除这个子元素div      ele.parentNode.removeChild(ele);      elements.splice(i,1);    }  }  window.Snake=Snake;}());            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选