2023. 8. 18. 20:44ㆍC# 문법 종합반
이번 과제는 흔히 볼 수 있는 지렁이가 먹이를 먹으면 1칸 씩 길이가 늘어나는 게임이다.
다만 나는 도저히 이를 구현할 수 없어서 비슷하게라도 만들어보려 한다.
10x10의 맵을 구성하고, 랜덤한 위치에 1칸짜리 먹이와 플레이어가 생성된다.
플레이어는 키보드 화살표를 이용해 먹이를 먹을 수 있다.
+ 장애물을 설정해 장애물을 만나면 게임 실패
+ 먹은 횟수 설정
+ 게임 시간 설정
+ 게임 종료 시, 먹은 횟수를 통해 스코어 설정
(+로 넣은 부분은 아직 구현하지 못했다.)
1. 맵 설정
: 먼저 int[,] map = new int [10, 10] 을 통해, 콘솔을 열면 10x10의 네모 칸이 나타나도록 구현했다.
: 플레이어, 음식, 장애물은 x, y 좌표에 따라 나타나고, 플레이어가 먹이를 먹었는지는 bool 을 통해 판단한다.
int[,] map = new int[10, 10] // 초기 맵 설정
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1},
};
Random rand = new Random(); // 랜덤한 위치에 플레이어, 음식 나타나도록 설정
int PlayerX = 1; // 플레이어 X좌표
int PlayerY = 1; // player Y location
int foodX = rand.Next(0, 9); // food X loca
int foodY = rand.Next(0, 9); // food Y loca
int blockX = rand.Next(0, 9); // 장애물 X loca
int blockY = rand.Next(0, 9); // 장애물 Y loca
bool foodEat = false; // 플레이어가 음식을 먹었는지 여부 판단
2. 맵 내 오브젝트 설정
: 게임이 진행될 때 (사용자가 키보드 움직임을 입력하면) 입력값에 따라 이동 혹은 먹이와 플레이어, 장애물이 재생성되고 이에 따라 Console.Clear를 통해 새로운 값을 받아 출력한다.
: 테두리는 꽉찬 네모, 안의 이동 가능한 맵은 빈 네모로 구성했다. 플레이어는 동그라미, 음식은 별, 장애물은 온천 표시로 나타냈다.
: 플레이어와 food의 좌표가 만나면 bool foodEat 이 활성화되며, 새로운 곳에 food가 생성되도록 했다.
: 해당 부분은 while문을 통해, 계속 반복된다. (음식이 계속 생성된다.)
while (true)
{
Console.Clear(); // 맵 재로딩
if (foodEat)
{
foodX = rand.Next(0, 9);
foodY = rand.Next(0, 9);
foodEat = false;
}
if (PlayerX == foodX && PlayerY == foodY) // 플레이어와 푸드의 좌표가 만나면
{
foodEat = true;
}
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (map[i, j] == 1)
{
Console.Write("■ "); // 맵
}
else if (i == PlayerX && j == PlayerY)
{
Console.Write("○ "); // 플레이어 아이콘
}
else if (i == foodX && j == foodY)
{
Console.Write("☆ "); // 음식 아이콘
}
else if (i == blockX && j == blockY)
{
Console.Write("♨ "); // 장애물 아이콘
}
else
{
Console.Write("□ "); //
}
}
Console.WriteLine();
}
3. 키보드 설정
: ConsoleKeyInfo 를 통해 player의 움직임을 구현했다.
ConsoleKeyInfo keyInfo = Console.ReadKey();
switch (keyInfo.Key)
{
case ConsoleKey.UpArrow:
if (PlayerX > 1)
PlayerX--; // 위쪽 이동
break;
case ConsoleKey.DownArrow:
if (PlayerX < 8)
PlayerX++; // 아래쪽 이동
break;
case ConsoleKey.LeftArrow:
if (PlayerY > 1)
PlayerY--; // 왼쪽 이동
break;
case ConsoleKey.RightArrow:
if (PlayerY < 8)
PlayerY++; // 오른쪽 이동
break;
4. 기타 사항
: 랜덤하게 먹이 혹은 장애물이 생겨나지 않는 버그가 있다. (아마 10x10의 테두리 부분에 생성된 것이 아닐까 싶다.)
: 장애물을 더 많이 출력하고 싶다.
: 장애물을 만났을 시 게임 종료되도록 설정 예정.
: 먹은 먹이의 수를 카운트하도록 설정 예정.
일반적인 스네이크 게임과는 결이 다른 팩맨 느낌의 게임이지만, 먹을 때 마다 플레이어 뒤로 한칸씩 늘어나도록 설정하면 그래도 비슷하게 구현할 수 있지 않을까 싶다.
'C# 문법 종합반' 카테고리의 다른 글
C# 문법 종합반 개인 과제 / 던전 게임 만들기 / ([장착중] 오류 해결, 콘솔 색 ConsoleColor 설정, 전 화면으로 돌아가기) (0) | 2023.08.23 |
---|---|
C# 문법 종합반 개인 과제 / 던전 게임 만들기 / 아이템 세팅 및 착용 / 오류발생 (0) | 2023.08.21 |
C# 문법 종합반 개인 과제 - 던전 게임 만들기 / 기본 화면 세팅 / (0) | 2023.08.18 |
C# 문법 종합반 / 2주차 / 배열 (0) | 2023.08.17 |
C# 문법 종합반 2주차 반복문, 반복문 심화 예제 (0) | 2023.08.17 |