#include <stdio.h>
#include <math.h>
int main(void)
{
int board[3][3] = { 0, }; // = { 11, 12, 13, 14, 15, 16, 17, 18, 19 }; // 게임 보드, 각 칸의 번호
int player = 0; // player ID 0,1 두명의 플레이어
int x, y; // 착수 위치
int choice = 0; // 진행한 횟수
int com = 0;
int Bingo(int ary[3][3], int n); // 승패 결정 함수 선언
int check(int ary[3][3], int i, int j, int com);
void draw(int ary[3][3]);
printf("수행할 player를 고르시오 (0 또는 1): ");
scanf_s("%d", &com);
com = (com + 1) % 2;
while (1) // 별다른 조건없이 무한반복
{
if(player == com) {
int com_x = -1;
int com_y = -1;
int max_score = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == 0) {
int score = check(board, i, j, com + 1);
if (max_score < score) {
max_score = score;
com_x = i;
com_y = j;
}
}
}
}
x = com_x;
y = com_y;
}
else {
// 착수 위치 입력
do
{
printf("player [%d]의 착수 위치(x,y)를 입력하시오 : ", player);
scanf_s("%d %d", &x, &y); // 착수 위치 입력받기
if (board[x][y] != 0 || x>2 || x < 0 || y>2 || y < 0) {
printf("\n잘못된 입력입니다. 다시 입력하세요.\n\n");
} // 잘못된 입력값을 받기위한 조건문
} while (board[x][y] != 0 || 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; // 플레이어 전환
}
draw(board);
// 빙고 여부
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");
}
}
}
void draw(int ary[3][3]) {
printf("\n");
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (ary[i][j] == 1) {
printf("%c", 'O'); // 보드판 숫자가 1이면 O
}
else if (ary[i][j] == 2) {
printf("%c", 'X'); // 보드판 숫자가 2이면 X
}
else {
printf("*"); // 나머지 숫자면 *
}
}
printf("\n");
} // 보드판 출력
}
int check(int ary[3][3], int i, int j, int com) {
int score = 0;
if (ary[i][(j + 1) % 3] == ary[i][(j + 2) % 3]) {
if (ary[i][(j + 1) % 3] == com)
return 10;
else if(ary[i][(j + 1) % 3] != 0)
score = 9;
}
if (ary[(i + 1) % 3][j] == ary[(i + 2) % 3][j]) {
if (ary[(i + 1) % 3][j] == com)
return 10;
else if (ary[(i + 1) % 3][j] != 0)
score = 9;
}
if ((i == j) && (ary[(i + 1) % 3][(j + 1) % 3] == ary[(i + 2) % 3][(j + 2) % 3])) {
if (ary[(i + 1) % 3][(j + 1) % 3] == com)
return 10;
else if (ary[(i + 1) % 3][(j + 1) % 3] != 0)
score = 9;
}
if ((i == (j + 2) % 4) && (ary[(i + 1) % 3][(j + 2) % 3] == ary[(i + 2) % 3][(j + 1) % 3])) {
if (ary[(i + 1) % 3][(j + 2) % 3] == com)
return 10;
else if (ary[(i + 1) % 3][(j + 2) % 3] != 0)
score = 9;
}
ary[i][j] = com;
int count = 8;
if (ary[1][1] != com) {
if (ary[0][0] != com && ary[2][2] != com)
count--;
if (ary[0][2] != com && ary[2][0] != com)
count--;
}
for (int x = 0; x < 3; x++)
{
if (ary[x][0] != com && ary[x][1] != com && ary[x][2] != com) {
count--;
}
if (ary[0][x] != com && ary[1][x] != com && ary[2][x] != com) {
count--;
}
}
ary[i][j] = 0;
if (count < score)
return score;
else
return count;
}// 승패 결정 함수 정의
int Bingo(int ary[3][3], int n) {
if (ary[1][1] != 0) {
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] != 0 && ary[line][0] == ary[line][1] && ary[line][0] == ary[line][2]) || (ary[0][line] != 0 && ary[0][line] == ary[1][line] && ary[0][line] == ary[2][line])) {
return 0;
} //가로, 세로줄로 빙고가 생기는지 확인, line은 각 가로, 세로줄의 줄 번호
}
if (n == 9) {
return 1;
} //시행횟수가 9번이면 무승부로 결정
}// 승패 결정 함수 정의
AWS EC2 서버 만들기(#ubuntu #apache #tomcat) (0) | 2022.02.11 |
---|---|
영화 추천 프로그램 만들기(feat. 빵형) (0) | 2022.02.01 |
지능형 로봇 조작 프로젝트 (0) | 2021.10.02 |
미니 스튜디오 어플 (프로젝트) (0) | 2021.09.28 |
Gazebo 공장 환경 개발 프로젝트 (0) | 2021.09.25 |
댓글 영역