C#Console Snake Tail不会被删除

时间:2016-04-30 15:43:45

标签: c#

我需要在C#控制台应用程序中编写蛇形游戏。我有一条可以移动的蛇,但唯一的问题是它的尾巴不会被切断,这意味着你可以在不吃一块的情况下基本保持每一步的成长。如果你能帮助我,我会很高兴的。这是代码:

set.seed(11) # Set seed for reproducibility
(x = matrix(rnorm(10),nrow = 5))

            [,1]        [,2]
[1,] -0.59103110 -0.93415132
[2,]  0.02659437  1.32360565
[3,] -1.51655310  0.62491779
[4,] -1.36265335 -0.04572296
[5,]  1.17848916 -1.00412058

cobo(x, 3)

            [,1]        [,2]
[1,] -0.59103110 -0.93415132
[2,]  0.02659437  1.32360565
[3,]  0.00000000  0.00000000
[4,] -1.36265335 -0.04572296
[5,]  1.17848916 -1.00412058

}

1 个答案:

答案 0 :(得分:0)

除了ArrSnakeItSelfX之外,你不会更新任何ArrSnakeItSelfX[0]的坐标,这是在不吃东西的情况下移动蛇的头部。数组中的所有其他坐标都是错误的,所以

Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
Console.Write(" ");

始终写入同一屏幕位置。

当你的蛇在不吃东西的情况下移动时,你必须将阵列中的所有坐标向后移动一个。因此,最后一个位置(旧尾部)将被删除,并在阵列中的索引0处插入新的头部位置。

var e = ArrSnakeItselfX.Length;

Console.SetCursorPosition(ArrSnakeItselfX[e - 1], ArrSnakeItselfY[e - 1]);
Console.Write(" ");  //erase tail of snake

for (int i = e-1; i>0; i--) { //shift all coordinates by one position in the array
   ArrSnakeItselfX[i] = ArrSnakeItselfX[i-1];
   ArrSnakeItselfY[i] = ArrSnakeItselfY[i-1];
}

//set new head position
ArrSnakeItselfX[0] = //new x of head;
ArrSnakeItselfY[0] = //new y of head;
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0]);
Console.Write("@");

当你吃东西时,你基本上必须做同样的事情,除了你不删掉最后一个元素,但是将数组大小增加一个并保留最后一个元素。