본문 바로가기
-----ETC-----/C++ 마스터 시리즈

[C++ 마스터] Day 23: 프로젝트 - 간단한 콘솔 게임 만들기 (1)

by cogito21_cpp 2024. 8. 1.
반응형

이번 프로젝트에서는 간단한 콘솔 게임을 만들어보겠습니다. 게임의 목적은 플레이어가 미로를 탈출하는 것입니다. 플레이어는 미로를 탐험하며, 'W', 'A', 'S', 'D' 키를 사용하여 상하좌우로 이동할 수 있습니다. 목표는 미로의 출구에 도달하는 것입니다.

 

프로젝트 계획

  1. 미로 생성: 2차원 배열을 사용하여 미로를 표현합니다.
  2. 플레이어 이동: 플레이어의 위치를 추적하고, 키 입력에 따라 이동합니다.
  3. 게임 루프: 게임이 진행되는 동안 반복적으로 상태를 업데이트하고 화면을 출력합니다.
  4. 게임 종료: 플레이어가 출구에 도달하면 게임이 종료됩니다.

 

1. 미로 생성

먼저, 미로를 나타내는 2차원 배열을 정의하고 초기화합니다. 'P'는 플레이어, 'E'는 출구, ' '는 길, '#'는 벽을 나타냅니다.

#include <iostream>
#include <vector>

using namespace std;

const int WIDTH = 10;
const int HEIGHT = 10;

vector<vector<char>> maze = {
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
    {'#', 'P', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},
    {'#', ' ', '#', ' ', '#', ' ', '#', '#', ' ', '#'},
    {'#', ' ', '#', ' ', ' ', ' ', ' ', '#', ' ', '#'},
    {'#', '#', '#', '#', '#', '#', ' ', '#', ' ', '#'},
    {'#', ' ', ' ', ' ', ' ', '#', ' ', '#', ' ', '#'},
    {'#', ' ', '#', '#', ' ', '#', ' ', '#', ' ', '#'},
    {'#', ' ', '#', 'E', ' ', ' ', ' ', '#', ' ', '#'},
    {'#', ' ', '#', '#', '#', '#', ' ', '#', ' ', '#'},
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};

int playerX = 1;
int playerY = 1;

void printMaze() {
    for (int i = 0; i < HEIGHT; ++i) {
        for (int j = 0; j < WIDTH; ++j) {
            cout << maze[i][j] << ' ';
        }
        cout << endl;
    }
}

int main() {
    printMaze();
    return 0;
}

 

2. 플레이어 이동

플레이어의 위치를 추적하고, 'W', 'A', 'S', 'D' 키 입력에 따라 이동할 수 있도록 합니다.

#include <iostream>
#include <vector>

using namespace std;

const int WIDTH = 10;
const int HEIGHT = 10;

vector<vector<char>> maze = {
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
    {'#', 'P', ' ', ' ', '#', ' ', ' ', ' ', ' ', '#'},
    {'#', ' ', '#', ' ', '#', ' ', '#', '#', ' ', '#'},
    {'#', ' ', '#', ' ', ' ', ' ', ' ', '#', ' ', '#'},
    {'#', '#', '#', '#', '#', '#', ' ', '#', ' ', '#'},
    {'#', ' ', ' ', ' ', ' ', '#', ' ', '#', ' ', '#'},
    {'#', ' ', '#', '#', ' ', '#', ' ', '#', ' ', '#'},
    {'#', ' ', '#', 'E', ' ', ' ', ' ', '#', ' ', '#'},
    {'#', ' ', '#', '#', '#', '#', ' ', '#', ' ', '#'},
    {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};

int playerX = 1;
int playerY = 1;

void printMaze() {
    for (int i = 0; i < HEIGHT; ++i) {
        for (int j = 0; j < WIDTH; ++j) {
            cout << maze[i][j] << ' ';
        }
        cout << endl;
    }
}

void movePlayer(char direction) {
    int newX = playerX;
    int newY = playerY;

    switch (direction) {
        case 'W': newY--; break;
        case 'A': newX--; break;
        case 'S': newY++; break;
        case 'D': newX++; break;
        default: return;
    }

    if (maze[newY][newX] == ' ' || maze[newY][newX] == 'E') {
        maze[playerY][playerX] = ' ';
        playerX = newX;
        playerY = newY;
        maze[playerY][playerX] = 'P';
    }
}

int main() {
    char input;
    while (true) {
        printMaze();
        cout << "Move (WASD): ";
        cin >> input;
        movePlayer(input);

        if (maze[playerY][playerX] == 'E') {
            cout << "Congratulations! You found the exit!" << endl;
            break;
        }
    }
    return 0;
}

 

3. 게임 루프

게임 루프를 추가하여 게임이 종료될 때까지 반복적으로 상태를 업데이트하고 화면을 출력합니다. 'W', 'A', 'S', 'D' 키 입력을 받아 플레이어를 이동시키고, 플레이어가 출구에 도달하면 게임이 종료됩니다.

 

프로젝트 진행

  • Day 23: 미로 생성 및 플레이어 이동 구현
  • Day 24: 게임 루프, 승리 조건 및 추가 기능 구현

이번 단계에서는 미로 생성과 플레이어 이동을 구현했습니다. 다음 단계에서는 게임 루프와 승리 조건을 추가하고, 게임을 완성하겠습니다.

 

다음 단계

23일차의 목표는 간단한 콘솔 게임의 미로 생성과 플레이어 이동을 구현하는 것이었습니다. 다음 날에는 게임 루프를 추가하고, 승리 조건을 구현하여 게임을 완성할 것입니다.

 

내일은 "프로젝트: 간단한 콘솔 게임 만들기 (2)"를 진행할 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!

반응형