Представляючи Змія
Створити гру Змія досить просто. Перше, що вам потрібно, це спосіб зобразити тіло вашої змії. Якщо ви вважаєте, що ваша змія складається з блоків або плиток, ваше тіло може просто скласти список цих блоків.
У вашому випадку, якщо ви збираєтесь зробити консольну програму, кожен з них буде символом на консолі, а позиція відповідатиме одному рядку або рядку консольного виводу. Отже, ви почнете з цього:
// 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
Можна ускладнитись, вибравши різні символи для голови персонажа (перший елемент у списку) та хвоста (останній елемент у списку) та навіть орієнтувати їх залежно від позицій сусідніх блоків. Але для початку просто візьміть усе як #
щось або щось.
Ви можете, наприклад, почати з двовимірного масиву символів, що містить такий фон:
// 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);