贪吃蛇游戏——如何计算下一个苹果的位置

Snake game - how to calculate the next apple position

为了好玩,我正在 javascript 实现贪吃蛇游戏,我已经成功实现了蛇、它的动作和 snake-growth 的东西吃一个苹果。

要计算苹果的位置,我目前正在执行以下步骤:

  1. 创建一个新苹果object
  2. 为苹果创建随机坐标(X 和 Y,在 game-container 边界之间)
  3. 检查苹果的坐标是否等于snake-blocks坐标之一
  4. 如果第 3 步为真,则重新计算苹果的位置,否则在 game-container
  5. 中绘制苹果

不幸的是我发现这个算法很弱..假设我有一个 10 x 10 的游戏容器,红色方块是苹果,绿色方块是我的蛇头(初始游戏状态)

随着游戏的进行,蛇吃的苹果越来越多,它的长度也越来越长,留下越来越少的空方格来放置苹果

现在假设蛇在吃一个苹果时达到了 99 的长度。这意味着只剩下 一个 方格可以放置下一个苹果。我的算法(这显然是最坏的情况)可能需要永远才能随机化正确的值,因为它会丢弃蛇头或尾巴已经占据的任何随机位置,根本不关心在一个范围内随机化新位置仅 "empty cells" 而不是随机化整个 10 x 10 游戏 canvas.

我应该如何解决我的 busillis?你能给我一些我可以使用的好算法的建议吗?

谢谢

正如评论中所说,我能想到的最简单的解决方案是制作一个自由坐标列表,然后从中随机选择。 并且您可以仅在需要时(当您需要添加一个苹果时)计算自由坐标。