CS/C++

C++로 TIC TAC TOE 게임 구현하기

munsik22 2025. 4. 15. 11:01

💻 코드 구현

#include <iostream>
#include <ctime>

using namespace std;

void drawBoard(char *spaces);
void playerMove(char *spaces, char player);
void computerMove(char *spaces, char computer);
bool checkWinner(char *spaces, char player, char computer);
bool checkTie(char *spaces);

int main() {
    char spaces[9] = {' ',' ',' ',' ',' ',' ',' ',' ',' '};
    char player = 'X';
    char computer = 'O';
    bool running = true;
    drawBoard(spaces);
    while(running) {
        cout << "Now it's your turn.\n";
        playerMove(spaces, player);
        drawBoard(spaces);
        if(checkWinner(spaces, player, computer)) {
            running = false;
            break;
        }
        else if (checkTie(spaces)){
            running = false;
            break;
        }
        cout << "Now it's computer's turn.\n";
        computerMove(spaces, computer);
        drawBoard(spaces);
        if(checkWinner(spaces, player, computer)) {
            running = false;
            break;
        }
        else if (checkTie(spaces)){
            running = false;
            break;
        }
    }
    cout << "Thanks for playing!\n";
    return 0;
}

void drawBoard(char *spaces){
    cout << endl;
    cout << "     |     |     " << endl;
    cout << "  " << spaces[0] << "  |  " << spaces[1] << "  |  " << spaces[2] << "  " << endl;
    cout << "_____|_____|_____" << endl;
    cout << "     |     |     " << endl;
    cout << "  " << spaces[3] << "  |  " << spaces[4] << "  |  " << spaces[5] << "  " << endl;
    cout << "_____|_____|_____" << endl;
    cout << "     |     |     " << endl;
    cout << "  " << spaces[6] << "  |  " << spaces[7] << "  |  " << spaces[8] << "  " << endl;
    cout << "     |     |     " << endl;
    cout << endl;
}

void playerMove(char *spaces, char player){
    int number;
    do{
        cout << "Enter a spot to space to place a marker (1-9): ";
        cin >> number;
        number--;
        if (spaces[number] == ' ') {
            spaces[number] = player;
            break; 
        }
    }while(! number > 0 || !number < 8);
    return;
}

void computerMove(char *spaces, char computer){
    int number;
    srand(time(0));
    while(true){
        number = rand() % 9;
        if(spaces[number] == ' ') {
            spaces[number] = computer;
            break;
        }
    }
    return;
}

bool checkWinner(char *spaces, char player, char computer){
    if((spaces[0] != ' ') && (spaces[0] == spaces[1] && spaces[1] == spaces[2])){
        spaces[0] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[3] != ' ') && (spaces[3] == spaces[4] && spaces[4] == spaces[5])){
        spaces[3] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[6] != ' ') && (spaces[6] == spaces[7] && spaces[7] == spaces[8])){
        spaces[6] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[0] != ' ') && (spaces[0] == spaces[3] && spaces[3] == spaces[6])){
        spaces[0] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[1] != ' ') && (spaces[1] == spaces[4] && spaces[4] == spaces[7])){
        spaces[1] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[2] != ' ') && (spaces[2] == spaces[5] && spaces[5] == spaces[8])){
        spaces[2] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[0] != ' ') && (spaces[0] == spaces[4] && spaces[4] == spaces[8])){
        spaces[0] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else if((spaces[2] != ' ') && (spaces[2] == spaces[4] && spaces[4] == spaces[6])){
        spaces[2] == player ? cout << "You Win!\n" : cout << "You Lose...\n";
    }
    else return false;
    return true;
}

bool checkTie(char *spaces){
    for(int i = 0; i < 9; i++){
        if(spaces[i] == ' ') return false;
    }
    cout << "It's a Tie!\n";
    return true;
}

🤔 개선할 점

  • 컴퓨터의 AI 향상시키기
    • 플레이어가 첫 턴에 중간 칸(5)에 놓지 않았다면 중간 칸 선점하기
    • BFS를 사용해 플레이어의 수를 방해하고, 컴퓨터가 이기는 최적의 수를 찾기

'CS > C++' 카테고리의 다른 글

C++로 이진 탐색 트리 구현하기  (0) 2025.04.15
C++로 스택/큐 구현하기  (0) 2025.04.12
C++로 연결 리스트 구현하기  (0) 2025.04.08
C++ 기초 정리  (0) 2025.03.30