Saturday, May 12, 2012

JavaScript版贪吃蛇



共逃掉高挂科率课4节,高点名率2节,从昨天中午写到半夜,再从早八点弄到现在(等下还要抓紧时间赶物理实验报告:(),这个伟大的工程终于完成了。。。掌声+撑个懒腰。
感觉web开发语言都很神奇,几种结合起来就很容易产生不错的效果,这条蛇的起源正式来自这种想法。闲来无事,想着用JS写点好玩的东西(成品可能很弱智,至少技术上好玩。。),转瞬想到贪吃蛇,完全自己实现不太可能,毕竟毫无开发经验,果断百度,诶哟还真有,发现这么个好东西Js版贪吃蛇解析和详细注释,马上down出源码开始研究,半个下午后代码全部照写了一遍,逻辑也研究透彻了,然后到此为止??of course not!Because:
  • 做人不能太不要脸
  • 原版成品不符合亦疯一贯坚持的亮瞎狗眼原则
于是,果断开始进行改造,期间搞出过万花筒写轮蛇,二百五闪光蛇,后来实在是太过混乱,干脆从简,百度了图片两张,效果不错。
其它改造的地方包括:
  • 炸弹(贪吃蛇木有障碍肿么行,那还不横行霸道了)
  • 穿墙开关
  • 分数记录
  • 速度可自由输入
  • 速度显示
START GAME:贪吃蛇
问题:rank应该不是最好的排序算法,我在将snake[1]加上背景色后,发现其一直在循环向后移位,但是funnyhao的注释说的是:“排列数组,时刻保持snake[1]为蛇头”,显然这里存在问题,蛇的所有结点都在变换位置,这也是导致我万花筒写轮蛇,二百五闪光蛇越写越混乱的原因。最简的做法因该可以是:蛇和食物发生碰撞时,蛇的前进状态不变,前进一步后,在蛇尾压入与原蛇尾相同的块。但是由于午饭时间到了,这样完全重构的大工程,我还是觉得午饭为重。
1
2
3
4
5
6
function rank() { // 排列数组,时刻保持snake[1]为蛇头
    for (var len = snake.length; len > 0; len--) {
        snake[len] = snake[len - 1];
    }
    snake[0] = { };
}
本来准备做一个程序逻辑的思维导图,不过搞到现在实在是疲惫了,暂且放下。
如果您有建议或发现BUG,请回复告诉我,谢谢:)。
PS:再次感谢funnyhao。
游戏界面


原创文章,转载请注明: 转载自叶科忠's Blog

No comments:

Post a Comment