Mewakili Ular
Membuat game Snake cukup sederhana. Hal pertama yang Anda butuhkan adalah cara untuk mewakili tubuh ular Anda. Jika Anda menganggap ular Anda terdiri dari balok atau ubin, tubuh Anda bisa menjadi daftar koordinat balok ini.
Dalam kasus Anda, jika Anda bermaksud melakukan aplikasi konsol, masing-masing akan menjadi karakter di konsol, dan posisinya akan sesuai dengan satu baris atau baris output konsol. Jadi, Anda mulai dengan ini:
// List of 2D coordinates that make up the body of the snake
List<Point>() body = new List<Point>();
Pada titik ini, daftar Anda kosong, sehingga ular Anda tidak memiliki tubuh. Katakanlah Anda menginginkan ular dengan panjang 5 dan kepala harus mulai pada posisi (5,2) dan tumbuh ke arah bawah. Tambahkan saja posisi-posisi itu ke daftar ketika permainan dimulai, misalnya:
// 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));
}
Membawa Ular
Untuk rendering cukup menggambar karakter di setiap posisi pada daftar tubuh. Contoh di atas misalnya dapat digambarkan sebagai:
...................
...................
.....O............. -- y = 2
.....#.............
.....#.............
.....#.............
.....V.............
...................
|
x = 5
Anda dapat menjadi lebih rumit dengan memilih karakter yang berbeda untuk kepala karakter (elemen pertama pada daftar) dan ekor (elemen terakhir pada daftar) dan bahkan mengarahkan mereka tergantung pada posisi blok yang berdekatan. Tetapi sebagai permulaan, hanya membuat semuanya sebagai #
atau sesuatu.
Misalnya Anda bisa mulai dengan array char 2D yang berisi latar belakang seperti ini:
// 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] = '.';
Dan kemudian beralih di atas tubuh ular yang menariknya ke array:
// Render snake
foreach(Point point in body)
render[point.X, point.Y] = '#';
Dan akhirnya beralih ke array lagi dan tulis setiap karakter ke konsol, dengan linebreak di akhir setiap baris.
// Render to console
for(y=0; y<height; ++y)
{
for(x=0; x<width; ++x)
{
Console.Write(render[x,y]);
}
Console.WriteLine();
}
Memindahkan Ular
Akhirnya, gerakan. Hal pertama yang Anda butuhkan adalah melacak Direction
ular itu bergerak. Ini bisa menjadi enum sederhana:
// Enum to store the direction the snake is moving
enum Direction { Left, Right, Up, Down }
Dan tindakan memindahkan ular dapat dilakukan hanya dengan menghapus blok terakhir dari daftar dan menambahkannya di depan, ke arah yang benar . Dengan kata lain sesuatu seperti:
// 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);