Answers:
代表蛇
创建一个Snake游戏非常简单。您需要做的第一件事是代表蛇的身体的方法。如果您认为蛇是由块或砖块组成的,则您的身体可以简单地列为这些块坐标的列表。
在您的情况下,如果您打算做一个控制台应用程序,那么每个应用程序都将是控制台上的一个字符,并且位置将对应于控制台输出的一行或一行。因此,您从以下开始:
// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();
此时,您的清单为空,因此您的蛇没有身体。假设您想要一条长度为5的蛇,其头部应从位置(5,2)开始并向底部生长。只需在游戏开始时将这些位置添加到列表中,例如:
// Initialize the snake with 5 blocks starting downwards from (5,2)
for(int i=0; i<5; ++i)
{
body.Add(new Point(5, 2 + i));
}
渲染蛇
为了渲染,只需在正文列表的每个位置绘制一个字符。例如,上面的示例可以绘制为:
...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
|
x = 5
通过为字符的头(列表中的第一个元素)和尾部(列表中的最后一个元素)选择不同的字符,甚至根据相邻块的位置来定位它们,您会变得更加复杂。但是对于初学者来说,只需将所有内容渲染为a #
或诸如此类。
例如,您可以从包含背景的2D char数组开始,如下所示:
// Array with map characters
char[,] render = new char[width, height];
// Fill with background
for(x=0; x<width; ++x)
for(y=0; y<height; ++y)
render[x,y] = '.';
然后遍历蛇的身体,将其绘制到数组上:
// Render snake
foreach(Point point in body)
render[point.X, point.Y] = '#';
最后,再次遍历数组,并将每个字符写入控制台,每行末尾都有一个换行符。
// Render to console
for(y=0; y<height; ++y)
{
for(x=0; x<width; ++x)
{
Console.Write(render[x,y]);
}
Console.WriteLine();
}
移动蛇
最后,运动。您需要做的第一件事就是跟踪Direction
蛇在移动。这可以是一个简单的枚举:
// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }
只需从列表中删除最后一个块并将其按正确的方向添加到前面,即可完成移动蛇的动作。换句话说:
// Remove tail from body
body.RemoveAt(body.Count - 1);
// Get head position
Point next = body[0];
// Calculate where the head should be next based on the snake's direction
if(direction == Direction.Left)
next = new Point(next.X-1, next.Y);
if(direction == Direction.Right)
next = new Point(next.X+1, next.Y);
if(direction == Direction.Up)
next = new Point(next.X, next.Y-1);
if(direction == Direction.Down)
next = new Point(next.X, next.Y+1);
// Insert new head into the snake's body
body.Insert(0, next);
每次计时器打勾时,您都会更新蛇的位置并在新位置绘制形状
使用System.Windows.Forms.Timer进行后台操作,以触发游戏移动蛇。
对结构使用类和继承