뱀을 대표
뱀 게임을 만드는 것은 매우 간단합니다. 가장 먼저 필요한 것은 뱀의 몸 을 나타내는 방법 입니다. 뱀이 블록이나 타일로 구성되어 있다고 생각하면 몸은 단순히 이러한 블록 좌표의 목록이 될 수 있습니다.
귀하의 경우, 콘솔 응용 프로그램을 작성하려는 경우, 이들 각각은 콘솔의 문자이며 위치는 콘솔 출력의 한 줄 또는 행에 해당합니다. 따라서 다음과 같이 시작하십시오.
// 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
캐릭터의 머리 (목록의 첫 번째 요소)와 꼬리 (목록의 마지막 요소)에 대해 다른 문자를 선택하고 인접한 블록의 위치에 따라 방향을 지정하면 더 복잡해질 수 있습니다. 그러나 초보자에게는 모든 것을 하나 #
또는 다른 것으로 렌더링하십시오 .
예를 들어 다음과 같은 배경을 포함하는 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);