반응형
틱택토(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 |
---|