贪吃蛇c#代码
以下是一个简单的贪吃蛇游戏的C#代码示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace SnakeGame
{
class Program
{
static void Main(string[] args)
{
Console.WindowHeight = 16;
Console.WindowWidth = 32;
int windowHeight = Console.WindowHeight;
int windowWidth = Console.WindowWidth;
int score = 0;
int gameSpeed = 100;
int direction = 0; // 0 - right, 1 - down, 2 - left, 3 - up
int foodX, foodY;
Random randomNumbersGenerator = new Random();
foodX = randomNumbersGenerator.Next(1, windowWidth - 2);
foodY = randomNumbersGenerator.Next(1, windowHeight - 2);
Console.BufferHeight = Console.WindowHeight;
Console.BufferWidth = Console.WindowWidth;
List<int> snakeX = new List<int>() { 5, 6, 7 };
List<int> snakeY = new List<int>() { 5, 5, 5 };
for (int i = 0; i < snakeX.Count; i++)
{
Console.SetCursorPosition(snakeX[i], snakeY[i]);
Console.Write("*");
}
Console.SetCursorPosition(foodX, foodY);
Console.Write("@");
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo userInput = Console.ReadKey();
switch (userInput.Key)
{
case ConsoleKey.LeftArrow:
if (direction != 0)
direction = 2;
break;
case ConsoleKey.UpArrow:
if (direction != 1)
direction = 3;
break;
case ConsoleKey.RightArrow:
if (direction != 2)
direction = 0;
break;
case ConsoleKey.DownArrow:
if (direction != 3)
direction = 1;
break;
}
}
switch (direction)
{
case 0:
snakeX.Insert(0, snakeX[0] + 1);
snakeY.Insert(0, snakeY[0]);
break;
case 1:
snakeX.Insert(0, snakeX[0]);
snakeY.Insert(0, snakeY[0] + 1);
break;
case 2:
snakeX.Insert(0, snakeX[0] - 1);
snakeY.Insert(0, snakeY[0]);
break;
case 3:
snakeX.Insert(0, snakeX[0]);
snakeY.Insert(0, snakeY[0] - 1);
break;
}
if (snakeX[0] == foodX && snakeY[0] == foodY)
{
score++;
gameSpeed--;
foodX = randomNumbersGenerator.Next(1, windowWidth - 2);
foodY = randomNumbersGenerator.Next(1, windowHeight - 2);
Console.SetCursorPosition(foodX, foodY);
Console.Write("@");
}
else
{
Console.SetCursorPosition(snakeX[snakeX.Count - 1], snakeY[snakeY.Count - 1]);
Console.Write(" ");
snakeX.RemoveAt(snakeX.Count - 1);
snakeY.RemoveAt(snakeY.Count - 1);
}
if (snakeX[0] < 0 || snakeX[0] >= windowWidth || snakeY[0] < 0 || snakeY[0] >= windowHeight)
break;
for (int i = 1; i < snakeX.Count; i++)
{
if (snakeX[i] == snakeX[0] && snakeY[i] == snakeY[0])
return;
}
Console.SetCursorPosition(snakeX[0], snakeY[0]);
Console.Write("*");
Thread.Sleep(gameSpeed);
}
Console.SetCursorPosition(windowWidth / 2 - 4, windowHeight / 2);
Console.WriteLine("Game Over!");
Console.SetCursorPosition(windowWidth / 2 - 4, windowHeight / 2 + 1);
Console.WriteLine("Score: " + score);
Console.ReadLine();
}
}
}
这个代码使用了控制台窗口来实现贪吃蛇游戏。玩家可以使用方向键来控制蛇的移动方向,目标是吃到食物并尽可能地增加分数。游戏会根据分数来调整蛇的移动速度。当蛇撞到墙壁或者自己时,游戏结束并显示最终得分。
这段代码使用了C#的控制台窗口来实现贪吃蛇游戏。游戏开始时,设置了窗口的大小和缓冲区的大小,并初始化了一些变量,如窗口的高度和宽度、分数、游戏速度、蛇的初始位置等。
在游戏循环中,首先检查用户是否有输入,如果有,则根据输入来改变蛇的移动方向。然后根据当前的移动方向来更新蛇的位置。如果蛇的头部与食物的位置重合,则增加分数、加快游戏速度,并生成新的食物。如果蛇的头部与食物的位置不重合,则删除蛇的尾部,以实现蛇的移动效果。
在每次循环中,还需要检查蛇是否撞到了墙壁或者自己的身体,如果是,则游戏结束。最后,根据游戏结束的条件,显示游戏结束的提示信息和最终得分。
这段代码只是一个简单的贪吃蛇游戏的实现,还可以根据需要进行扩展和优化,例如添加更多的游戏规则、增加难度等。