본문 바로가기
프로그래밍 문제/c# 문제

c# 문제 52. 보물 찾기 게임

by 지나팩 2023. 12. 12.

콘솔앱 기반의 간단한 보물 찾기 게임 제작.

  • 목표: 플레이어는 그리드 형태의 맵에서 보물을 찾아야 합니다.
  • 게임 플레이: 플레이어는 '상', '하', '좌', '우' 방향으로 이동할 수 있으며, 맵의 특정 위치에 숨겨진 보물을 찾으면 승리합니다.
  • 게임 종료 조건: 보물을 찾거나, 제한된 이동 횟수를 초과하면 게임이 종료됩니다.

 

  • 2차원 배열을 사용하여 그리드 맵을 생성 (기본 5x5)
  • 플레이어의 시작 위치와 보물의 위치를 무작위로 설정. 플레이어 시작 위치와 보물 위치는 달라야 함
  • 이동 횟수 제한을 설정(기본 10회)
  • 상하좌우 입력은 W,A,S,D
  • 보물을 찾으면 찾았다는 메시지, 횟수 초과시 게임 오버 메시지 출력

출력 예)

코드는 아래에~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
 
 class Program
    {
        static void Main()
        {
            char[,] map = new char[55];
            Random random = new Random();
            int treasureX, treasureY;
            int playerX, playerY;
            int movesLeft = 10;
 
            // 보물과 플레이어의 위치를 설정하는 루프
            do
            {
                treasureX = random.Next(05);
                treasureY = random.Next(05);
                playerX = random.Next(05);
                playerY = random.Next(05);
            } while (treasureX == playerX && treasureY == playerY); // 위치가 다를 때까지 반복
 
            while (true)
            {
                Console.Clear();
                for (int y = 0; y < 5; y++)
                {
                    for (int x = 0; x < 5; x++)
                    {
                        if (x == playerX && y == playerY)
                            Console.Write("P ");
                        else
                            Console.Write(". ");
                    }
                    Console.WriteLine();
                }
 
                if (playerX == treasureX && playerY == treasureY)
                {
                    Console.WriteLine("보물 발견!!");
                    break;
                }
 
                if (movesLeft == 0)
                {
                    Console.WriteLine("게임 오버...");
                    break;
                }
 
                Console.WriteLine($"남은 이동 횟수: {movesLeft}");
                Console.WriteLine("이동 (W/A/S/D): ");
                char move = Console.ReadKey().KeyChar;
 
                switch (move)
                {
                    case 'w':
                        playerY = Math.Max(0, playerY - 1);
                        break;
                    case 's':
                        playerY = Math.Min(4, playerY + 1);
                        break;
                    case 'a':
                        playerX = Math.Max(0, playerX - 1);
                        break;
                    case 'd':
                        playerX = Math.Min(4, playerX + 1);
                        break;
                }
 
                movesLeft--;
            }
 
            Console.WriteLine($"보물 위치 ({treasureX}, {treasureY})");
        }
    }
cs

댓글