간단한 뱀 게임을 만드는 C #


12

C #으로 뱀 게임을 만들려고 생각했기 때문에 아이디어를 내 머리에 달았고 몇 가지 문제가 발생했습니다.

뱀의 머리를 따라 달린 블록을 올바른 위치에서 추적하고 출력하려면 어떻게해야합니까?

뱀이 5 개의 블록으로 구성되어 있고 사용자가 원을 그리기 시작하면 어떻게 뱀 몸을 올바른 위치에 인쇄 할 수 있습니까?

또한 사용자가 무엇을하든 뱀이 앞으로 움직일 수 있도록 백그라운드에서 실행될 동작을 어떻게 만들 수 있습니까?

내 코드에는 어떤 구조가 있어야합니까? (코드 디자인 구조)

이것은 내가 알고있는 유일한 프레임 워크이기 때문에 콘솔 응용 프로그램이어야합니다.

작동 방식을 실제로 이해하고 싶기 때문에 완성 된 코드를 찾고 있지 않습니다.

답변:


23

뱀을 대표

뱀 게임을 만드는 것은 매우 간단합니다. 가장 먼저 필요한 것은 뱀의 몸 을 나타내는 방법 입니다. 뱀이 블록이나 타일로 구성되어 있다고 생각하면 몸은 단순히 이러한 블록 좌표의 목록이 될 수 있습니다.

귀하의 경우, 콘솔 응용 프로그램을 작성하려는 경우, 이들 각각은 콘솔의 문자이며 위치는 콘솔 출력의 한 줄 또는 행에 해당합니다. 따라서 다음과 같이 시작하십시오.

// 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);

5
마지막 블록을 앞쪽으로 움직여서 움직여보세요.
SpartanDonut

좋은 대답입니다. 나는 뱀이 어떻게 움직이는 지 좋아합니다. 매우 우아합니다.
Cypher

-3
  1. 타이머가 작동 할 때마다 뱀의 위치를 ​​업데이트하고 새로운 위치에 도형을 그립니다.

  2. 백그라운드 동작에 System.Windows.Forms.Timer를 사용하여 게임을 실행하여 뱀을 움직입니다.

  3. 구조에 클래스와 상속 사용


이것은 매우 모호한 답변입니다. 3 단계는 특히 그렇습니다.
MichaelHouse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.