玩家通过键盘输入要落子的地点,电脑随机产生一个没有棋子的棋盘坐标并落子,如果有一方可以做到三个子连着或对角线连着,则此方赢;如果双方直到棋盘下满都没有任一方均做到,则为平局。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define LINE 3
#define LIST 3
void print(char arr[LINE][LIST]);
void player(char arr[LINE][LIST]);
int computer(char arr[LINE][LIST]);
char check(char arr[LINE][LIST]);
void init(char arr[LINE][LIST]);
int main()
{
char arr[LINE][LIST];
char ch;
init(arr);
print(arr);
do{
player(arr);
ch = check(arr);
if (ch != ' ')
{
break;
}
int inter = computer(arr);
if (inter == 0)
{
printf("平局!\n");
system("pause");
return 0;
}
print(arr);
ch = check(arr);
} while (ch==' ');
print(arr);
if (ch == '*')
{
printf("玩家赢!\n");
system("pause");
return 0;
}
else if (ch == 'o')
{
printf("电脑赢!\n");
system("pause");
return 0;
}
else
{
printf("平局!\n");
}
system("pause");
return 0;
}
void player(char arr[LINE][LIST]) /*玩家输入*/
{
int x = 0, y = 0;
printf("请输入您要落子的地点(x,y):> ");
scanf_s("%d%d", &x, &y);
if ((x <= 0 || x > 3) || (y <= 0 || y > 3)||arr[x-1][y-1] != ' ')
{
printf("请输入正确的地点!\n");
player(arr);
}
arr[x - 1][y - 1] = '*';
}
int computer(char arr[LINE][LIST]) /*电脑输入*/
{
int x = 0, y = 0, i = 0, j = 0;
for (i = 0; i < LINE; i++)
{
for (j = 0; j < LIST; j++)
{
if (arr[i][j] == ' ')
{
goto flag;
}
}
}
return 0;
flag:
srand((unsigned int)time(NULL));
x = rand() % 3;
y = rand() % 3; /*产生0~2之间的随机数*/
if (arr[x][y] != ' ')
{
goto flag;
}
arr[x][y] = 'o';
return 1;
}
char check(char arr[LINE][LIST]) /*检查函数*/
{
for (int i = 0; i < LINE; i++) /*行赢*/
{
if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2])
return arr[i][1];
}
for (int j = 0; j < LIST; j++) /*列赢*/
{
if (arr[0][j] == arr[1][j] && arr[0][j] == arr[2][j])
return arr[0][j];
}
if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2]) /*斜赢*/
return arr[0][0];
if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0])
return arr[0][2];
return ' ';
}
void print(char arr[LINE][LIST]) /*输出棋盘*/
{
for (int i = 0; i < LINE; i++)
{
printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
printf("---|---|---\n");
}
}
void init(char arr[LINE][LIST]) /*初始化*/
{
for (int i = 0; i < LINE; i++)
{
for (int j = 0; j < LIST; j++)
{
arr[i][j] = ' ';
}
}
}
转载于:https://blog.51cto.com/10740026/1704721