书上C#贪吃蛇代码好像有缺少的部分,但不知道在哪儿,有没有人能帮帮我😭(明天就要交了😱)
你当我是你的背后灵吗
你不放代码我怎么知道你的代码长什么样子
using System;
using System.Collections.Generic;
namespace SnakeGame
{
class Program
{
// 设定地图大小
const int Width = 20;
const int Height = 10;
// 蛇的节点列表
static List<Node> Snake = new List<Node>();
// 食物坐标
static int FoodX, FoodY;
// 记录蛇的移动方向
static int dx = 1;
static int dy = 0;
static void Main(string[] args)
{
// 初始化蛇
InitSnake();
// 随机生成食物
GenerateFood();
while (true)
{
// 显示地图和蛇
Console.Clear();
PrintMap();
// 移动蛇头
MoveSnake();
// 判断是否吃到食物
if (Snake[0].x == FoodX && Snake[0].y == FoodY)
{
// 确认为蛇头吃到食物,增加身体节点
GenerateFood();
Snake.Add(new Node(Snake[Snake.Count - 1].x, Snake[Snake.Count - 1].y));
}
// 判断是否碰到边界或蛇身
if (Snake[0].x < 0 || Snake[0].x >= Width || Snake[0].y < 0 || Snake[0].y >= Height)
{
Console.WriteLine("Game Over!");
break;
}
else
{
for (int i = 1; i < Snake.Count; i++)
{
if (Snake[0].x == Snake[i].x && Snake[0].y == Snake[i].y)
{
Console.WriteLine("Game Over!");
return;
}
}
}
// 刷新画面
System.Threading.Thread.Sleep(200);
}
}
// 初始化蛇
private static void InitSnake()
{
Snake.Add(new Node(0, 0));
Snake.Add(new Node(1, 0));
Snake.Add(new Node(2, 0));
}
// 生成食物
private static void GenerateFood()
{
Random rand = new Random(Guid.NewGuid().GetHashCode());
bool over = false;
while (!over)
{
FoodX = rand.Next(Width);
FoodY = rand.Next(Height);
over = true;
for (int i = 0; i < Snake.Count; i++)
{
if (Snake[i].x == FoodX && Snake[i].y == FoodY)
{
over = false;
break;
}
}
}
}
// 移动蛇
private static void MoveSnake()
{
for (int i = Snake.Count - 1; i > 0; i--)
{
Snake[i].x = Snake[i - 1].x;
Snake[i].y = Snake[i - 1].y;
}
Snake[0].x += dx;
Snake[0].y += dy;
// 接收键盘输入,确定蛇头移动方向
if (Console.KeyAvailable)
{
ConsoleKey key = Console.ReadKey(true).Key;
if (key == ConsoleKey.LeftArrow && dx == 0)
{
dx = -1;
dy = 0;
}
else if (key == ConsoleKey.RightArrow && dx == 0)
{
dx = 1;
dy = 0;
}
else if (key == ConsoleKey.UpArrow && dy == 0)
{
dx = 0;
dy = -1;
}
else if (key == ConsoleKey.DownArrow && dy == 0)
{
dx = 0;
dy = 1;
}
}
}
// 显示地图和蛇
private static void PrintMap()
{
for (int i = 0; i < Height; i++)
{
for (int j = 0; j < Width; j++)
{
if (i == FoodY && j == FoodX)
{
Console.Write("★");
}
else if (i == Snake[0].y && j == Snake[0].x)
{
Console.Write("◆");
}
else
{
bool print = false;
for (int k = 1; k < Snake.Count; k++)
{
if (i == Snake[k].y && j == Snake[k].x)
{
Console.Write("◇");
print = true;
break;
}
}
if (!print)
{
Console.Write(" ");
}
}
}
Console.WriteLine();
}
}
// 节点类,用来表示蛇的节点或食物坐标
class Node
{
public int x;
public int y;
public Node(int x, int y)
{
this.x = x;
this.y = y;
}
}
}
}