#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
void init_board(char arr[ROW][COL]);
void displar_board(char arr[ROW][COL]);
void play_move(char arr[ROW][COL]);
void comper_move(char arr[ROW][COL]);
char check_win(char arr[ROW][COL]);
int is_full(char arr[ROW][COL]);
void windows();
void memu();
int main(){
int choice = 1;
while (choice){
memu();
scanf("%d",&choice);
switch (choice){
case 1:windows(); break;
case 0:break;
}
}
return 0;
}
void windows(){
char ret = 0;
char arr[3][3] = { 0 };
init_board(arr);
displar_board(arr);
do{
play_move(arr);
printf("你落子后:\n");
displar_board(arr);
ret = check_win(arr);
if (ret != ' ')
break;
comper_move(arr);
printf("电脑落子后:\n");
displar_board(arr);
ret = check_win(arr);
} while (ret == ' ');
if (ret == 'x')
printf("你赢了!\n");
else if (ret == '0')
printf("电脑赢了!\n");
else
printf("平局!\n");
system("pause");
}
void memu(){
printf("1-- - 开始,0--- 结束\n");
}
void init_board(char arr[ROW][COL]){
int i = 0;
int j = 0;
for (i = 0; i <ROW; i++){
for (j = 0; j < COL; j++){
arr[i][j] = ' ';
}
}
}
void displar_board(char arr[ROW][COL]){
int i = 0;
printf("\n 1 2 3 \n");
for (i = 0; i < ROW; i++){
printf("%d | %c | %c | %c |\n", i + 1, arr[i][0], arr[i][1], arr[i][2]);
if (i != 2)
printf(" |---|---|---|\n");
}
}
void play_move(char arr[ROW][COL]){
int x = 0;
int y = 0;
while (1){
printf("输入要下的坐标->ROW(1-3),COL(1-3) :");
scanf("%d%d", &x, &y);
x--;
y--;
if ((x >= 0 && x<3) && (y >= 0 && y < 3)){
if (arr[x][y] == ' '){
arr[x][y] = 'x';
break;
}
else
printf("该位置已落子\n");
}
else
printf("坐标非法\n");
}
}
void comper_move(char arr[ROW][COL]){
int x = 0;
int y = 0;
srand((unsigned)time(NULL));
while (1){
if (is_full(arr) == 1){
printf("full\n");
break;
}
x = rand() % 3;
y = rand() % 3;
if (arr[x][y] == ' '){
arr[x][y] = '0';
break;
}
}
}
char check_win(char arr[ROW][COL]){
int i = 0;
for (i = 0; i < ROW; i++)
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
return arr[i][0];
for (i = 0; i < ROW; i++)
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')
return arr[0][i];
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')
return arr[0][0];
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')
return arr[0][2];
if (is_full(arr) == 1)
return 'e';
return ' ';
}
int is_full(char arr[ROW][COL]){
int i = 0;
int j = 0;
for (i = 0; i < ROW; i++){
for (j = 0; j < COL; j++){
if (arr[i][j] == ' '){
return 0;
}
}
}
return 1;
}