เป็นตัวแทนของงู
การสร้างเกมงูนั้นค่อนข้างเรียบง่าย สิ่งแรกที่คุณต้องการคือวิธีที่จะเป็นตัวแทนของร่างกายงูของคุณ หากคุณคิดว่างูของคุณนั้นประกอบไปด้วยบล็อกหรือกระเบื้องร่างกายของคุณก็สามารถเป็นรายการของพิกัดบล็อกเหล่านี้ได้
ในกรณีของคุณถ้าคุณต้องการใช้แอปพลิเคชันคอนโซลแต่ละรายการจะเป็นอักขระบนคอนโซลและตำแหน่งจะสอดคล้องกับหนึ่งบรรทัดหรือแถวของเอาต์พุตคอนโซล ดังนั้นคุณเริ่มต้นด้วยสิ่งนี้:
// 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
คุณสามารถเพิ่มความซับซ้อนได้โดยเลือกอักขระที่แตกต่างกันสำหรับส่วนหัวของตัวละคร (องค์ประกอบแรกในรายการ) และส่วนท้าย (องค์ประกอบสุดท้ายในรายการ) และปรับทิศทางขึ้นอยู่กับตำแหน่งของบล็อกที่อยู่ติดกัน แต่สำหรับการเริ่มเพียงทำให้ทุกอย่างเป็น#
หรือบางสิ่งบางอย่าง
เช่นคุณสามารถเริ่มต้นด้วยอาร์เรย์ถ่าน 2 มิติที่มีพื้นหลังดังนี้:
// 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 ง่าย ๆ :
// 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);