html5贪吃蛇小游戏设计与实现,HTML贪吃蛇代码

  html5贪吃蛇小游戏设计与实现,HTML贪吃蛇代码

  游戏操作说明

  通过方向键控制贪吃蛇上下左右移动。贪吃蛇吃到食物之后会变长一个长度。游戏具体实现

  游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制每个方块的移动呢? 如果观察蛇的移动,可以发现,从蛇的头部到尾部,每个方块在下一时刻的位置就是它的前一个方块在当前时刻

  的位置。因此我们需要做的只是控制贪吃蛇的头部的运动。其他部分的位置都可以依次类推。另外一个值得注意的问题是

  贪吃蛇吃下食物之后,新增加的方块应该放在哪个位置。

  答案就是在下一时刻,新增加的方块应该出现在当前时刻的尾部位置。

  因此,在吃下食物之后应该在更新蛇的每个位置之前,增加一个方块,并且将其位置设定在当前时刻的尾部位置。

  然后在当前时刻更新出了新增方块之外的所有方块的位置

  index.html

  snake.js复制代码代码如下:

  定义变量画布;

  var ctx

  定义变量定时器;

  //度量值

  var x _ cnt=15

  var y _ cnt=15

  定义变量单位=48;

  var box _ x=0;

  var box _ y=0;

  var box_width=15 *单位;

  var box_height=15 *单位;

  var bound _ left=box _ x;

  var bound _ right=box _ x box _ width

  var bound _ up=box _ y;

  var bound _ down=box _ y box _ height

  //图像

  var图像_精灵

  //对象

  定义变量蛇;

  定义变量食物;

  var food _ x;

  var food _ y;

  //函数

  功能角色(sx,sy,sw,sh,方向、状态、速度、图像、旗帜)

  {

  this.x=sx

  this.y=sy

  this.w=sw

  this.h=sh

  this.direction=方向;

  this.status=状态

  this.speed=速度;

  this.image=图像

  this.flag=flag

  }

  功能转移(键码)

  {

  开关(键码)

  {

  案例37:

  返回1;

  案例38:

  返回3;

  案例39:

  return 2;

  案例40:

  返回0;

  }

  }

  函数添加食物()

  {

  //food _ x=box _ x math。地板(数学。random()*(box _ width-unit));

  //food _ y=box _ y数学。地板(数学。random()*(box _ height-unit));

  food _ x=单位*数学。地板(数学。random()* x _ CNT);

  food _ y=单位*数学。地板(数学。random()* y _ CNT);

  食物=新角色(food_x,food_y,unit,unit,0,0,0,image_sprite,true);

  }

  功能播放(事件)

  {

  定义变量键码;

  if (event==null)

  {

  键码=窗口。事件。关键代码;

  窗户。事件。防止默认();

  }

  其他

  {

  键码=事件。关键代码;

  事件。防止默认();

  }

  var cur _ direction=transfer(键码);

  蛇[0]。方向=当前方向

  }

  功能更新()

  {

  //在移动蛇之前向蛇添加新的部分

  if (snake[0].x==food.x snake[0].y==food.y)

  {

  定义变量长度=蛇.长度

  var tail _ x=snake[长度- 1]。x;

  var tail _ y=snake[长度- 1]。y;

  var tail=新角色(tail_x,tail_y,unit,unit,snake[length - 1]).方向,0,0,image_sprite,true);

  蛇.推(尾巴);

  添加食物();

  }

  //修改属性

  //移动头部

  开关(蛇[0]).方向)

  {

  案例0://向下

  蛇[0]。y=单位;

  if (snake[0].y上界_下单位)

  蛇[0]。y=bound _ down-unit;

  打破;

  案例1://左

  蛇[0]。x -=单位;

  if (snake[0].x界_左)

  蛇[0]。x=向左绑定

  打破;

  案例2://对

  蛇[0]。x=单位;

  if (snake[0].x界_右单位)

  蛇[0]。x=bound _ right-unit;

  打破;

  案例3://上

  蛇[0]。y -=单位;

  if (snake[0].y bound_up)

  蛇[0]。y=绑定_绑定

  打破;

  }

  //移动蛇的其他部分

  for(var I=snake。长度-1;I=0;我-)

  {

  如果(i 0)

  //snake[i].方向=蛇[i-1].方向;

  {

  蛇[我]。x=snake[i - 1].x;

  蛇[我]。y=snake[i - 1].y;

  }

  }

  }

  函数绘图场景()

  {

  ctx.clearRect(box_x,box_y,box_width,box _ height);

  ctx.strokeStyle=rgb(0,0,0 ;

  ctx.strokeRect(box_x,box_y,box_width,box _ height);

  //检测冲突

  //绘制图像

  for(var I=0;我蛇。长度;我)

  {

  ctx.drawImage(image_sprite,snake[i]).x,蛇[我]。y);

  }

  ctx.drawImage(image_sprite,food.x,food。y);

  }

  函数初始化()

  {

  画布=文档。getelementbyid(“scene”);

  CTX=画布。获取上下文(“2d”);

  //图像

  Image _ sprite=new Image();

  图像_精灵。src=图像/精灵。png ;

  image_sprite.onLoad=function()

  {}

  //对象

  snake=new Array();

  var head=新角色(0 *单位,0 *单位,单位,单位,5,0,1,image_sprite,true);

  蛇.推(头);

  窗户。addevent侦听器( keydown ,play,false);

  添加食物();

  设置间隔(更新,300);//注意

  setInterval(drawScene,30);

  }

  相关阅读:html5贪吃蛇游戏使用63行代码完美实现

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: