2

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

  1. 将一块放在你将要成为下一个刻度的地方
  2. 从你的尾巴上取下最后一块。

这给出了蛇四处移动的效果。但这仅在蛇是一种纯色时才有效。我正在尝试制作一个蛇游戏,其中蛇的每个部分都会在视觉上有所不同,如下所示:

多色蛇

假设黑色是头部,蓝色是尾部。上述算法不适用于这条蛇,因为去除尾巴会改变“部分”的顺序/颜色。EG:你的尾巴不再是蓝色的,它会变成蓝绿色。

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

4

2 回答 2

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需要 apixel和 a的函数color

于 2013-06-03T05:39:49.997 回答
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;
      }

});
于 2013-06-03T05:28:46.333 回答