资源描述:
《贪吃蛇游戏实现思路及源代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、HTML5贪吃蛇游戏实现思路及源代码点评:游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制,下面为大家简要介绍下具体的实现,感兴趣的朋友可以参考下,希望对大家有所帮助游戏操作说明通过方向键控制贪吃蛇上下左右移动。贪吃蛇吃到食物之后会变长一个长度。游戏具体实现游戏难点是怎么模拟贪吃蛇的移动。如果只是一个方块的话显然很简单。但是当蛇的长度变长之后要怎么样控制每个方块的移动呢?如果观察蛇的移动,可以发现,从蛇的头部到尾部,每个方块在下一时刻的位置就是它的前一个方块在当前时刻的位置。因此我们需
2、要做的只是控制贪吃蛇的头部的运动。其他部分的位置都可以依次类推。另外一个值得注意的问题是贪吃蛇吃下食物之后,新增加的方块应该放在哪个位置。答案就是在下一时刻,新增加的方块应该出现在当前时刻的尾部位置。因此,在吃下食物之后应该在更新蛇的每个位置之前,增加一个方块,并且将其位置设定在当前时刻的尾部位置。然后在当前时刻更新出了新增方块之外的所有方块的位置index.htmlsnake.js复制代码代码如下:varcanvas;varctx;vartimer;//measuresvarx_cnt=15;vary_cnt=15;varunit=
3、48;varbox_x=0;varbox_y=0;varbox_width=15*unit;varbox_height=15*unit;varbound_left=box_x;varbound_right=box_x+box_width;varbound_up=box_y;varbound_down=box_y+box_height;//imagesvarimage_sprite;//objectsvarsnake;varfood;varfood_x;varfood_y;//functionsfunctionRole(sx,sy,sw
4、,sh,direction,status,speed,image,flag){this.x=sx;this.y=sy;this.w=sw;this.h=sh;this.direction=direction;this.status=status;this.speed=speed;this.image=image;this.flag=flag;}functiontransfer(keyCode){switch(keyCode){case37:return1;case38:return3;case39:return2;case40:ret
5、urn0;}}functionaddFood(){//food_x=box_x+Math.floor(Math.random()*(box_width-unit));//food_y=box_y+Math.floor(Math.random()*(box_height-unit));food_x=unit*Math.floor(Math.random()*x_cnt);food_y=unit*Math.floor(Math.random()*y_cnt);food=newRole(food_x,food_y,unit,unit,0,0
6、,0,image_sprite,true);}functionplay(event){varkeyCode;if(event==null){keyCode=window.event.keyCode;window.event.preventDefault();}else{keyCode=event.keyCode;event.preventDefault();}varcur_direction=transfer(keyCode);snake[0].direction=cur_direction;}functionupdate(){//a
7、ddanewparttothesnakebeforemovethesnakeif(snake[0].x==food.x&&snake[0].y==food.y){varlength=snake.length;vartail_x=snake[length-1].x;vartail_y=snake[length-1].y;vartail=newRole(tail_x,tail_y,unit,unit,snake[length-1].direction,0,0,image_sprite,true);snake.push(tail);addF
8、ood();}//modifyattributes//movetheheadswitch(snake[0].direction){case0://downsnake[0].y+=unit;if(snake[0].y>bo