17.8 编程挑战

  如下是可能改进游戏以及为游戏添加功能的几种方式。

#1:让游戏更大

  将游戏的大小修改为500像素的方形空间。你需要修改哪些代码,才能让游戏以500像素的大小运行?

#2:给贪吃蛇涂色

  贪吃蛇有点令人厌烦:其身体的每一段都是蓝色的。如果修改颜色以创建颜色段的话,看上去会更像一条真的蛇。例如,让蛇的头部是绿色的,然后,身体其他部分的颜色在蓝色和黄色之间变换,或者选择你自己的颜色。

#3:让游戏随着你玩的过程加速

  修改游戏,以便每次贪吃蛇吃了一个苹果,游戏都会加速。为了做到这一点,必须修改代码以使用setTimeout而不是setInterval,因为setInterval保持以一个固定的间隔调用一个函数,而不会改变时间间隔。相反,可以用setTimeout重复地调用一个函数,并且在每次调用它的时候修改延迟超时。


var animationTime = 100;
var gameLoop = function () {
// The code that draws and updates the game should go here
setTimeout(gameLoop, animationTime);
};
gameLoop();

  gameLoop函数调用setTimeout(gameLoop,animationTime),这表示“在animationTime毫秒之后,再次调用gameloop”,而不是使用setInterval来重复地调用一个函数。和setInterval一样,这也是重复地调用一个函数的方法,在每次函数调用之间有一个简短的暂停。不同之处在于,可以通过修改animationTime,很容易地在代码中的任何地方修改动画时间,并且程序会把这个值用于后续的setTimeout调用。

在这里,还需要记住另一件事情,即找到一种新的方式在游戏结束的时候停止游戏循环。该怎么做到这一点呢?

#4修改apple.move方法

  每次移动一个苹果,它都会移动到一个新的随机位置,但是,并没有编写任何代码来防止苹果移动到贪吃蛇身体的某个部分已经占据的一个块。为了防止这种情况,修改move方法以考虑贪吃蛇的身体段的当前位置。(提示,使用while循环持续调用move,直到它选定了一个贪吃蛇没有占用的位置。)