Đại diện cho rắn
Tạo một trò chơi Snake khá đơn giản. Điều đầu tiên bạn cần là một cách để thể hiện cơ thể con rắn của bạn. Nếu bạn coi con rắn của mình được tạo thành từ các khối hoặc gạch, cơ thể bạn có thể chỉ đơn giản là một danh sách các tọa độ khối này.
Trong trường hợp của bạn, nếu bạn có ý định làm một ứng dụng bàn điều khiển, thì mỗi ứng dụng này sẽ là một ký tự trên bàn điều khiển và vị trí sẽ tương ứng với một dòng hoặc một hàng của đầu ra giao diện điều khiển. Vì vậy, bạn bắt đầu với điều này:
// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();
Tại thời điểm này, danh sách của bạn trống, vì vậy con rắn của bạn không có cơ thể. Giả sử bạn muốn một con rắn có chiều dài 5 và đầu nên bắt đầu ở vị trí (5,2) và phát triển về phía dưới. Chỉ cần thêm các vị trí đó vào danh sách khi trò chơi bắt đầu, ví dụ:
// 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));
}
Kết xuất con rắn
Để kết xuất, chỉ cần vẽ một ký tự ở mỗi vị trí trên danh sách cơ thể. Ví dụ trên có thể được rút ra là:
...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
|
x = 5
Bạn có thể trở nên phức tạp hơn bằng cách chọn các ký tự khác nhau cho đầu của nhân vật (yếu tố đầu tiên trong danh sách) và đuôi (yếu tố cuối cùng trong danh sách) và thậm chí định hướng chúng tùy thuộc vào vị trí của các khối liền kề. Nhưng đối với người mới bắt đầu, chỉ cần kết xuất mọi thứ như một #
hoặc một cái gì đó.
Chẳng hạn, bạn có thể bắt đầu với một mảng char 2D chứa nền như thế này:
// 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] = '.';
Và sau đó lặp đi lặp lại trên cơ thể con rắn vẽ nó vào mảng:
// Render snake
foreach(Point point in body)
render[point.X, point.Y] = '#';
Và cuối cùng lặp lại trên mảng một lần nữa và viết từng ký tự vào bảng điều khiển, với một dấu ngắt dòng ở cuối mỗi hàng.
// Render to console
for(y=0; y<height; ++y)
{
for(x=0; x<width; ++x)
{
Console.Write(render[x,y]);
}
Console.WriteLine();
}
Di chuyển con rắn
Cuối cùng là phong trào. Điều đầu tiên bạn cần là theo dõi Direction
con rắn đang di chuyển. Đây có thể là một enum đơn giản:
// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }
Và hành động di chuyển con rắn có thể được thực hiện chỉ bằng cách loại bỏ khối cuối cùng khỏi danh sách và thêm nó vào mặt trước, theo đúng hướng . Nói cách khác, một cái gì đó như:
// 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);