在蛇游戏中,如何移动具有不同部分的蛇?

时间:2013-06-03 05:23:44

标签: javascript algorithm canvas coffeescript

我看过一些用javascript构建蛇游戏的examples,他们似乎用这个算法移动蛇:

  1. 放置一块你下一个要打的地方
  2. 从尾巴上取下最后一块。
  3. 这可以让蛇在四处移动。但这只有在蛇是一种纯色时才有效。我正在尝试制作一个蛇游戏,其中蛇的每个部分都会在视觉上不同:

    multi colored snake

    假装黑色是头部,蓝色是尾部。上述算法不适用于此蛇,因为删除尾部会改变“部件”的顺序/颜色。 EG:你的尾巴不再是蓝色,它会变成青色。

    我可以使用什么算法来移动这条蛇,使其头部呈黑色,尾部保持蓝色,中间的所有颜色也保持相同的顺序?

2 个答案:

答案 0 :(得分:2)

您将使用现有算法,但迭代所有单元格,使用下一个单元格的颜色填充单元格,以给出蛇移动的印象。

你可能有一些看起来像这样的代码......

if (this.body.length > this.length) {
    var oldPosition = this.body.shift();
    World.setCellAt(oldPosition.x, oldPosition.y, 0);
}

this.body.push({
    x: this.x,
    y: this.y
});

你的循环看起来像......

this.body.forEach(function(piece, index) {
      var nextPiece = this.body[index + 1];

      if (nextPiece) {
           piece.color = nextPiece.color;
      }

});

答案 1 :(得分:2)

您仍然可以使用之前的算法,但会将颜色分别存储到像素中。

假设您有一个列表pixel[0..n]

包含x,y坐标。

您可以创建另一个列表color[0..n]

假设原始算法添加了第一个像素,然后删除了最后一个像素。

您的显示功能可能如下所示:

for i in 0..n:
    draw(pixel[i], "red")

现在你只需要:

for i in 0..n:
    draw(pixel[i], color[i])

假设您的draw函数需要pixelcolor