0
我需要在C#控制檯應用程序中編寫蛇遊戲。我有一條可以移動的蛇,但唯一的問題是它的尾巴不會被切斷,這意味着你可以基本上保持每一步的成長,而不用吃一塊。如果你能幫助我,我會很高興。下面的代碼:C#控制檯蛇尾將不會被刪除
namespace ConsoleApplication11
{
class Program
{
static void MainMenu()
{
Console.SetCursorPosition(40, 12);
Console.ForegroundColor = ConsoleColor.Blue;
Console.Write("S");
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("N");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("A");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.Write("K");
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("E");
Console.ResetColor();
Console.SetCursorPosition(32, 13);
Console.WriteLine("Press Enter to start!");
}
static void SnakeMovement()
{
Console.Clear();
Random rnd = new Random();
int foodX = rnd.Next(1, 80);
int foodY = rnd.Next(1, 25);
int snakeX = rnd.Next(1, 80);
int snakeY = rnd.Next(1, 25);
if ((snakeX == foodX) && (snakeY == foodY))
{
snakeX = rnd.Next(1, 80);
snakeY = rnd.Next(1, 25);
}
int i = 0;
int userScore = 0;
ConsoleKeyInfo userAction;
int[] ArrSnakeItselfX = new int[2000];
int[] ArrSnakeItselfY = new int[2000];
ArrSnakeItselfX[1] = (snakeX);
ArrSnakeItselfY[1] = (snakeY);
ArrSnakeItselfX[2] = (snakeX);
ArrSnakeItselfY[2] = (snakeY - 1);
ArrSnakeItselfX[3] = (snakeX);
ArrSnakeItselfY[3] = (snakeY - 2);
Console.SetCursorPosition(foodX, foodY);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("#");
Console.ResetColor();
i = ArrSnakeItselfX.Count();
while (true)
{
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0]);
Console.Write("@");
Console.SetCursorPosition(ArrSnakeItselfX[1], ArrSnakeItselfY[1]);
Console.Write("$");
Console.SetCursorPosition(ArrSnakeItselfX[2], ArrSnakeItselfY[2]);
Console.Write("$");
if ((snakeX == foodX) && (snakeY == foodY))
{
foodX = rnd.Next(1, 80);
foodY = rnd.Next(1, 25);
Console.SetCursorPosition(foodX, foodY);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("#");
Console.ResetColor();
i = ArrSnakeItselfX.Count();
userScore++;
}
userAction = Console.ReadKey(true);
if (userAction.Key == ConsoleKey.W)
{
while (!Console.KeyAvailable)
{
ArrSnakeItselfY[0]--;
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0]);
Console.Write("@");
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0] + 1);
Console.Write("$");
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
Console.Write(" ");
Thread.Sleep(500);
if ((ArrSnakeItselfX[0] == foodX) && (ArrSnakeItselfY[0] == foodY))
{
foodX = rnd.Next(1, 80);
foodY = rnd.Next(1, 25);
Console.SetCursorPosition(foodX, foodY);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("#");
Console.ResetColor();
ArrSnakeItselfX[i] = (ArrSnakeItselfX[i - 1]);
ArrSnakeItselfY[i] = (ArrSnakeItselfY[i - 1] + 1);
i = ArrSnakeItselfX.Count();
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
userScore++;
}
}
}
if (userAction.Key == ConsoleKey.D)
{
while (!Console.KeyAvailable)
{
ArrSnakeItselfX[0] = ArrSnakeItselfX[0] + 1;
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0]);
Console.Write("@");
Console.SetCursorPosition(ArrSnakeItselfX[0] - 1, ArrSnakeItselfY[0]);
Console.Write("$");
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
Console.Write("");
Thread.Sleep(500);
if ((ArrSnakeItselfX[0] == foodX) && (ArrSnakeItselfY[0] == foodY))
{
foodX = rnd.Next(1, 80);
foodY = rnd.Next(1, 25);
Console.SetCursorPosition(foodX, foodY);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("#");
Console.ResetColor();
ArrSnakeItselfX[i] = (ArrSnakeItselfX[i - 1]);
ArrSnakeItselfY[i] = (ArrSnakeItselfY[i - 1] + 1);
i = ArrSnakeItselfX.Count();
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
userScore++;
}
}
}
if (userAction.Key == ConsoleKey.A)
{
while (!Console.KeyAvailable)
{
ArrSnakeItselfX[0] = ArrSnakeItselfX[0] - 1;
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0]);
Console.Write("@");
Console.SetCursorPosition(ArrSnakeItselfX[0] + 1, ArrSnakeItselfY[0]);
Console.Write("$");
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
Console.Write("");
Thread.Sleep(500);
if ((ArrSnakeItselfX[0] == foodX) && (ArrSnakeItselfY[0] == foodY))
{
foodX = rnd.Next(1, 80);
foodY = rnd.Next(1, 25);
Console.SetCursorPosition(foodX, foodY);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("#");
Console.ResetColor();
ArrSnakeItselfX[i] = (ArrSnakeItselfX[i - 1]);
ArrSnakeItselfY[i] = (ArrSnakeItselfY[i - 1] + 1);
i = ArrSnakeItselfX.Count();
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
userScore++;
}
}
}
if (userAction.Key == ConsoleKey.S)
{
while (!Console.KeyAvailable)
{
ArrSnakeItselfY[0]++;
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0]);
Console.Write("@");
Console.SetCursorPosition(ArrSnakeItselfX[0], ArrSnakeItselfY[0] - 1);
Console.Write("$");
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
Console.Write("");
Thread.Sleep(500);
if ((ArrSnakeItselfX[0] == foodX) && (ArrSnakeItselfY[0] == foodY))
{
foodX = rnd.Next(1, 80);
foodY = rnd.Next(1, 25);
Console.SetCursorPosition(foodX, foodY);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("#");
Console.ResetColor();
ArrSnakeItselfX[i] = (ArrSnakeItselfX[i - 1]);
ArrSnakeItselfY[i] = (ArrSnakeItselfY[i - 1] + 1);
i = ArrSnakeItselfX.Count();
Console.SetCursorPosition(ArrSnakeItselfX[i - 1], ArrSnakeItselfY[i - 1]);
userScore++;
}
}
}
}
}
static void Main(string[] args)
{
while (true)
{
Console.CursorVisible = false;
ConsoleKeyInfo userStartingGame;
MainMenu();
userStartingGame = Console.ReadKey(true);
if (userStartingGame.Key == ConsoleKey.Enter)
{
SnakeMovement();
}
else
{
}
}
}
}
}
非常感謝!我仍然需要加強代碼,但現在我差不多完成了! – gogonamee
例如,您可以使用'List'來代替兩個數組,因爲一個點可以同時保存座標和一個列表,您可以刪除最後一個元素並在前面插入一個新元素,因此您不必複製所有移位元素 –
derpirscher
我知道,但是這是一個學校的項目,並且指令使用數組。 – gogonamee