본문 바로가기
프로기(게임, 프로그래밍)/c언어

c언어 tic-tac-toe

by Letssa 렛사 2019. 6. 23.

 

 

▼아래는 소스코드

더보기

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#define SIZE 3

int main(void)
{
START_0:
int i, j, a, b, c;
int turn;
int player;
int AI;
int board[SIZE][SIZE] = { { 0,0,0 } ,{0,0,0}, {0,0,0} };
int RE;
long time_taken;
int win = 100;

printf("!!!TIC TAC TOE 게임을 시작합니다!!!\n\n");
printf("□□□\n□□□\n□□□");
printf("\n\n");
printf("<숫자에 따른 위치>\n\n1 2 3\n4 5 6\n7 8 9\n\n");
mistake:
printf("플레이어 먼저 하시겠습니까?(예:1, 아니요:2) : ");
scanf_s("%d", &turn);

if (turn == 1) {
printf("\n플레이어 먼저 시작합니다.\n");

time_taken = clock();

for (i = 0; i < 4; i++) {
START_1:
printf("놓을 위치를 숫자로 선택해주세요 : ");
scanf_s("%d", &player);


if (player == 1 && board[0][0] == 0)
board[0][0] = player;
else if (player == 2 && board[0][1] == 0)
board[0][1] = player;
else if (player == 3 && board[0][2] == 0)
board[0][2] = player;
else if (player == 4 && board[1][0] == 0)
board[1][0] = player;
else if (player == 5 && board[1][1] == 0)
board[1][1] = player;
else if (player == 6 && board[1][2] == 0)
board[1][2] = player;
else if (player == 7 && board[2][0] == 0)
board[2][0] = player;
else if (player == 8 && board[2][1] == 0)
board[2][1] = player;
else if (player == 9 && board[2][2] == 0)
board[2][2] = player;
else {
printf("중복입니다.\n");
goto START_1;
}
printf("\n");

for (a = 0; a < 3; a++) {
if (board[0][a] == 0)
printf("□");
else if (board[0][a] > 10)
printf("○");
else if (board[0][a] < 10)
printf("●");
}
printf("\n");
for (b = 0; b < 3; b++) {
if (board[1][b] == 0)
printf("□");
else if (board[1][b] > 10)
printf("○");
else if (board[1][b] < 10)
printf("●");
}
printf("\n");
for (c = 0; c < 3; c++) {
if (board[2][c] == 0)
printf("□");
else if (board[2][c] > 10)
printf("○");
else if (board[2][c] < 10)
printf("●");
}
printf("\n");

if (board[0][0] != 0 && board[0][1] != 0 && board[0][2] != 0 && board[0][0] < 10 && board[0][1] < 10 && board[0][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[1][0] != 0 && board[1][1] != 0 && board[1][2] != 0 && board[1][0] < 10 && board[1][1] < 10 && board[1][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[2][0] != 0 && board[2][1] != 0 && board[2][2] != 0 && board[2][0] < 10 && board[2][1] < 10 && board[2][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][0] != 0 && board[1][0] != 0 && board[2][0] != 0 && board[0][0] < 10 && board[1][0] < 10 && board[2][0] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][1] != 0 && board[1][1] != 0 && board[2][1] != 0 && board[0][1] < 10 && board[1][1] < 10 && board[2][1] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][2] != 0 && board[1][2] != 0 && board[2][2] != 0 && board[0][2] < 10 && board[1][2] < 10 && board[2][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][0] != 0 && board[1][1] != 0 && board[2][2] != 0 && board[0][0] < 10 && board[1][1] < 10 && board[2][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][2] != 0 && board[1][1] != 0 && board[2][0] != 0 && board[0][2] < 10 && board[1][1] < 10 && board[2][0] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][0] > 0 && board[0][1] > 0 && board[0][2] > 0 && board[1][0] > 0 && board[1][1] > 0 && board[1][2] > 0 && board[2][0] > 0 && board[2][1] > 0 && board[2][2] > 0) {
printf("무승부입니다");
player = win;
break;
}

printf("\n");

Sleep(1000);

A: for (j = 0; j < 9; j++) {
srand(time(NULL));
AI = 10 + rand() % 9 + 1;
if (AI - 10 != player)
break;
}
   if (AI == 11 && board[0][0] == 0)
   board[0][0] = AI;
   else if (AI == 12 && board[0][1] == 0)
   board[0][1] = AI;
   else if (AI == 13 && board[0][2] == 0)
   board[0][2] = AI;
   else if (AI == 14 && board[1][0] == 0)
   board[1][0] = AI;
   else if (AI == 15 && board[1][1] == 0)
   board[1][1] = AI;
   else if (AI == 16 && board[1][2] == 0)
   board[1][2] = AI;
   else if (AI == 17 && board[2][0] == 0)
   board[2][0] = AI;
   else if (AI == 18 && board[2][1] == 0)
   board[2][1] = AI;
   else if (AI == 19 && board[2][2] == 0)
   board[2][2] = AI;
   else
   goto A;

   printf("\n");

   for (a = 0; a < 3; a++)
   if (board[0][a] == 0)
   printf("□");
   else if (board[0][a] > 10)
   printf("○");
   else if (board[0][a] < 10)
   printf("●");
   printf("\n");
   for (b = 0; b < 3; b++)
   if (board[1][b] == 0)
   printf("□");
   else if (board[1][b] > 10)
   printf("○");
   else if (board[1][b] < 10)
   printf("●");
   printf("\n");
   for (c = 0; c < 3; c++)
   if (board[2][c] == 0)
   printf("□");
   else if (board[2][c] > 10)
   printf("○");
   else if (board[2][c] < 10)
   printf("●");
   printf("\n");


   if (board[0][0] > 10 && board[0][1] > 10 && board[0][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[1][0] > 10 && board[1][1] > 10 && board[1][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[2][0] > 10 && board[2][1] > 10 && board[2][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][0] > 10 && board[1][0] > 10 && board[2][0] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][1] > 10 && board[1][1] > 10 && board[2][1] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][2] > 10 && board[1][2] > 10 && board[2][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][0] > 10 && board[1][1] > 10 && board[2][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][2] > 10 && board[1][1] > 10 && board[2][0] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
}
}
else if (turn == 2) {
printf("\nAI가 먼저 시작합니다.");
time_taken = clock();
B:
srand(time(NULL));
AI = 10 + rand() % 9 + 1;

if (AI == 11 && board[0][0] == 0)
board[0][0] = AI;
else if (AI == 12 && board[0][1] == 0)
board[0][1] = AI;
else if (AI == 13 && board[0][2] == 0)
board[0][2] = AI;
else if (AI == 14 && board[1][0] == 0)
board[1][0] = AI;
else if (AI == 15 && board[1][1] == 0)
board[1][1] = AI;
else if (AI == 16 && board[1][2] == 0)
board[1][2] = AI;
else if (AI == 17 && board[2][0] == 0)
board[2][0] = AI;
else if (AI == 18 && board[2][1] == 0)
board[2][1] = AI;
else if (AI == 19 && board[2][2] == 0)
board[2][2] = AI;
else
goto B;

printf("\n");
Sleep(1000);

for (a = 0; a < 3; a++)
if (board[0][a] == 0)
printf("□");
else if (board[0][a] > 10)
printf("○");
else if (board[0][a] < 10)
printf("●");
printf("\n");
for (b = 0; b < 3; b++)
if (board[1][b] == 0)
printf("□");
else if (board[1][b] > 10)
printf("○");
else if (board[1][b] < 10)
printf("●");
printf("\n");
for (c = 0; c < 3; c++)
if (board[2][c] == 0)
printf("□");
else if (board[2][c] > 10)
printf("○");
else if (board[2][c] < 10)
printf("●");
printf("\n");

printf("\n");
for (i = 0; i < 4; i++) {
START_2:
printf("놓을 위치를 숫자로 선택해주세요 : ");
scanf_s("%d", &player);

if (player == 1 && board[0][0] == 0)
board[0][0] = player;
else if (player == 2 && board[0][1] == 0)
board[0][1] = player;
else if (player == 3 && board[0][2] == 0)
board[0][2] = player;
else if (player == 4 && board[1][0] == 0)
board[1][0] = player;
else if (player == 5 && board[1][1] == 0)
board[1][1] = player;
else if (player == 6 && board[1][2] == 0)
board[1][2] = player;
else if (player == 7 && board[2][0] == 0)
board[2][0] = player;
else if (player == 8 && board[2][1] == 0)
board[2][1] = player;
else if (player == 9 && board[2][2] == 0)
board[2][2] = player;
else {
printf("중복입니다.\n");
goto START_2;
}

for (a = 0; a < 3; a++) {
if (board[0][a] == 0)
printf("□");
else if (board[0][a] > 10)
printf("○");
else if (board[0][a] < 10)
printf("●");
}
printf("\n");
for (b = 0; b < 3; b++) {
if (board[1][b] == 0)
printf("□");
else if (board[1][b] > 10)
printf("○");
else if (board[1][b] < 10)
printf("●");
}
printf("\n");
for (c = 0; c < 3; c++) {
if (board[2][c] == 0)
printf("□");
else if (board[2][c] > 10)
printf("○");
else if (board[2][c] < 10)
printf("●");
}
printf("\n");

if (board[0][0] != 0 && board[0][1] != 0 && board[0][2] != 0 && board[0][0] < 10 && board[0][1] < 10 && board[0][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[1][0] != 0 && board[1][1] != 0 && board[1][2] != 0 && board[1][0] < 10 && board[1][1] < 10 && board[1][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[2][0] != 0 && board[2][1] != 0 && board[2][2] != 0 && board[2][0] < 10 && board[2][1] < 10 && board[2][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][0] != 0 && board[1][0] != 0 && board[2][0] != 0 && board[0][0] < 10 && board[1][0] < 10 && board[2][0] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][1] != 0 && board[1][1] != 0 && board[2][1] != 0 && board[0][1] < 10 && board[1][1] < 10 && board[2][1] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][2] != 0 && board[1][2] != 0 && board[2][2] != 0 && board[0][2] < 10 && board[1][2] < 10 && board[2][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][0] != 0 && board[1][1] != 0 && board[2][2] != 0 && board[0][0] < 10 && board[1][1] < 10 && board[2][2] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][2] != 0 && board[1][1] != 0 && board[2][0] != 0 && board[0][2] < 10 && board[1][1] < 10 && board[2][0] < 10) {
printf("플레이어가 승리했습니다");
player = win;
break;
}
else if (board[0][0] > 0 && board[0][1] > 0 && board[0][2] > 0 && board[1][0] > 0 && board[1][1] > 0 && board[1][2] > 0 && board[2][0] > 0 && board[2][1] > 0 && board[2][2] > 0) {
printf("무승부입니다");
break;
}
C: for (j = 0; j < 9; j++) {
srand(time(NULL));
AI = 10 + rand() % 9 + 1;
if (AI - 10 != player)
break;
}
   if (AI == 11 && board[0][0] == 0)
   board[0][0] = AI;
   else if (AI == 12 && board[0][1] == 0)
   board[0][1] = AI;
   else if (AI == 13 && board[0][2] == 0)
   board[0][2] = AI;
   else if (AI == 14 && board[1][0] == 0)
   board[1][0] = AI;
   else if (AI == 15 && board[1][1] == 0)
   board[1][1] = AI;
   else if (AI == 16 && board[1][2] == 0)
   board[1][2] = AI;
   else if (AI == 17 && board[2][0] == 0)
   board[2][0] = AI;
   else if (AI == 18 && board[2][1] == 0)
   board[2][1] = AI;
   else if (AI == 19 && board[2][2] == 0)
   board[2][2] = AI;
   else
   goto C;

   printf("\n");
   Sleep(1000);

   for (a = 0; a < 3; a++)
   if (board[0][a] == 0)
   printf("□");
   else if (board[0][a] > 10)
   printf("○");
   else if (board[0][a] < 10)
   printf("●");
   printf("\n");
   for (b = 0; b < 3; b++)
   if (board[1][b] == 0)
   printf("□");
   else if (board[1][b] > 10)
   printf("○");
   else if (board[1][b] < 10)
   printf("●");
   printf("\n");
   for (c = 0; c < 3; c++)
   if (board[2][c] == 0)
   printf("□");
   else if (board[2][c] > 10)
   printf("○");
   else if (board[2][c] < 10)
   printf("●");
   printf("\n");


   if (board[0][0] > 10 && board[0][1] > 10 && board[0][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[1][0] > 10 && board[1][1] > 10 && board[1][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[2][0] > 10 && board[2][1] > 10 && board[2][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][0] > 10 && board[1][0] > 10 && board[2][0] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][1] > 10 && board[1][1] > 10 && board[2][1] > 10) {
   printf("AI가 승리했습니다");
   break;
   }
   else if (board[0][2] > 10 && board[1][2] > 10 && board[2][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][0] > 10 && board[1][1] > 10 && board[2][2] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][2] > 10 && board[1][1] > 10 && board[2][0] > 10) {
   printf("AI가 승리했습니다");
   AI = win;
   break;
   }
   else if (board[0][0] > 0 && board[0][1] > 0 && board[0][2] > 0 && board[1][0] > 0 && board[1][1] > 0 && board[1][2] > 0 && board[2][0] > 0 && board[2][1] > 0 && board[2][2] > 0) {
   printf("무승부입니다");
   break;
   }

   printf("\n");
}
printf("\n");
}
else {
printf("숫자를 다시 입력해주세요\n\n");
goto mistake;
}
printf("\n\n놓은 갯수 = %d개\n", i + 1);
time_taken = (clock() - time_taken) / CLOCKS_PER_SEC;
printf("걸린 시간 = %d초\n", time_taken);

if (player == 100)
printf("플레이어의 점수 = %d\n", 100 / time_taken + 100 / i + 1);
else if (AI == 100)
printf("AI의 점수 = %d\n", 100 / time_taken + 100 / i + 1);

printf("\n\n게임을 다시 시작하겠습니까? (예:1, 아니오:2) : ");
scanf_s("%d", &RE);

printf("\n\n\n");
if (RE == 1)
goto START_0;

return 0;
}

 

 

728x90