我需要在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
}
答案 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("@");
当你吃东西时,你基本上必须做同样的事情,除了你不删掉最后一个元素,但是将数组大小增加一个并保留最后一个元素。