贪吃蛇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#的控制台窗口来实现贪吃蛇游戏。游戏开始时,设置了窗口的大小和缓冲区的大小,并初始化了一些变量,如窗口的高度和宽度、分数、游戏速度、蛇的初始位置等。

在游戏循环中,首先检查用户是否有输入,如果有,则根据输入来改变蛇的移动方向。然后根据当前的移动方向来更新蛇的位置。如果蛇的头部与食物的位置重合,则增加分数、加快游戏速度,并生成新的食物。如果蛇的头部与食物的位置不重合,则删除蛇的尾部,以实现蛇的移动效果。

在每次循环中,还需要检查蛇是否撞到了墙壁或者自己的身体,如果是,则游戏结束。最后,根据游戏结束的条件,显示游戏结束的提示信息和最终得分。

这段代码只是一个简单的贪吃蛇游戏的实现,还可以根据需要进行扩展和优化,例如添加更多的游戏规则、增加难度等。