C++ 틱택토 게임 (Tic Tac Toe)
프로그래밍

C++ 틱택토 게임 (Tic Tac Toe)

반응형

틱택토(tic-tac-toe) 두 명이 번갈아가며 O와 X를 3×3 판에 써서 같은 글자를 가로, 세로, 혹은 대각선 상에 놓이도록 하는 놀이이다.

 

이 게임을 c++로 구현해 보았다. (2인 플레이)

 

[소스코드]

#include <stdio.h>
int main(void)
{
    int board[3][3] = { 11, 12, 13, 14, 15, 16, 17, 18, 19 }; // 게임 보드, 각 칸의 번호
    int player = 0; // player ID 0,1 두명의 플레이어
    int x, y; // 착수 위치
    int choice = 0; // 진행한 횟수

    int Bingo(int ary[3][3], int n); // 승패 결정 함수 선언

    while (1) // 별다른 조건없이 무한반복
    {
        // 착수 위치 입력
        do
        {
            printf("player [%d]의 착수 위치(x,y)를 입력하시오 : ", player);
            scanf_s("%d %d", &x, &y); // 착수 위치 입력받기

            if (board[x][y] < 11 || x>2 || x<0 || y>2 || y<0) {
                printf("\n잘못된 입력입니다. 다시 입력하세요.\n\n");
            } // 잘못된 입력값을 받기위한 조건문

        } while (board[x][y] < 11 || x>2 || x<0 || y>2 || y<0); // 입력값이 정확하면 빠져나옴

        choice++; // 진행한 횟수 1증가

        if (player == 0) {
            board[x][y] = 1; // player 0은 보드판에 1을 입력
            player = 1; //플레이어 전환
        }

        else {
            board[x][y] = 2; // player 1은 보드판에 2를 입력
            player = 0; // 플레이어 전환
        }

        printf("\n");

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                if (board[i][j] == 1) {
                    printf("%c", 'O'); // 보드판 숫자가 1이면 O
                }
                else if (board[i][j] == 2) {
                    printf("%c", 'X'); // 보드판 숫자가 2이면 X
                }
                else {
                    printf("*"); // 나머지 숫자면 *
                }
            }
            printf("\n");
        } // 보드판 출력

          // 빙고 여부
        int result = Bingo(board, choice); // 승패 결정 함수 호출
        if (result == 0) //승패가 결정되는 경우
        {
            if (player == 0) {
                printf("player [1] 승리!!\n");
            }
            else {
                printf("player [0] 승리!!\n");
            }
            break;
        } // 마지막으로 둔 플레이가 승리하게 됨

        else if (result == 1) // 무승부가 되는 경우
        {
            printf("무승부 입니다.\n");
            break;
        }
        else if (result == 2) // 경기를 계속 진행하는 경우
        {
            printf("\n");
        }
    }
}

int Bingo(int ary[3][3], int n) {

    if ((ary[0][0] == ary[1][1] && ary[0][0] == ary[2][2]) || (ary[0][2] == ary[1][1] && ary[0][2] == ary[2][0])) {
        return 0;
    } //대각선으로 빙고가 생기는지 확인

    for (int line = 0; line <= 2; line++) {
        if ((ary[line][0] == ary[line][1] && ary[line][0] == ary[line][2]) || (ary[0][line] == ary[1][line] && ary[0][line] == ary[2][line])) {
            return 0;
        } //가로, 세로줄로 빙고가 생기는지 확인, line은 각 가로, 세로줄의 줄 번호 
    }

    if (n == 9) {
        return 1;
    } //시행횟수가 9번이면 무승부로 결정

}// 승패 결정 함수 정의
반응형

'프로그래밍' 카테고리의 다른 글

C++ 행렬 연산 계산기 (역행렬 구하기 포함)  (1) 2018.02.06
    # 테스트용