一:需求与大致步骤
1.0 选择是否进入游戏
2.0 形成一个3*3 的棋盘
3.0 玩家下棋并且判断游戏是否结束
4.0 电脑随机下棋并且判断游戏是否结束
二:代码
1.0 选择是否进入游戏
int main()
{
srand((unsigned int)time(NULL));
int put = 0;
do
{
nume();
scanf("%d", &put);
switch (put)
{
case 1: //这部分自己好好看看 do while
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("重新输入\n");
break;
}
} while (put);
system("pause");
return 0;
}
在这里选择是否玩这个游戏;选择 1 ,进入游戏界面,也就是进入了game() 函数;
以下是game() 函数的代码
void game()
{
char arr[POW][LOW] = { 0 }; // POW LOW 等于3
int pow = POW - 1; // 2
int low = LOW - 1; // 2
iti_board(arr, pow, low); // 初始化arr 数组
display_board(arr, pow, low); //打印一个棋盘
while (1)
{
player(arr, pow, low); //玩家下棋
char a = judge(arr, pow, low); //判断玩家是否赢了
if (a == '*')
{
printf("玩家赢\n");
break;
}
int b = is_full(arr, pow, low); //判断棋盘是否满了,是否平局
if (b == 1)
{
printf("平局\n");
break;
}
computer(arr, pow, low); //电脑下棋
a = judge(arr, pow, low); //判断电脑是否赢了
if (a == '#')
{
printf("电脑赢\n");
break;
}
b = is_full(arr, pow, low); //判断棋盘是否满了,是否平局
if (b == 1)
{
printf("平局\n");
break;
}
}
}
以下是初始化arr 数组的代码
void iti_board(char arr[POW][LOW], int pow, int low)
{
int i = 0;
for (i = 0; i <= pow; i++)
{
int j = 0;
for (j = 0; j <= low; j++)
{
arr[i][j] = ' ';
}
}
}
以下是打印棋盘的代码
void display_board(char arr[POW][LOW], int pow, int low)
{
int i = 0;
for (i = 0; i <= pow; i++)
{
int j = 0;
for (j = 0; j <= low; j++)
{
printf(" %c ", arr[i][j]);
if (j < low)
printf("|");
}
printf("\n");
if (i < pow)
{
int j = 0;
for (j = 0; j <= low; j++)
{
printf("___");
if (j < low)
printf("|");
}
printf("\n");
}
}
}
以下是玩家下棋的代码
void player(char arr[POW][LOW], int pow, int low)
{
int x = 0;
int y = 0;
while (1)
{
printf("玩家请输入\n");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= (pow + 1) && y >= 1 && y <= (low + 1) && arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
display_board(arr, pow, low);
break;
}
else
printf("输入有误\n");
}
}
以下是电脑下棋的代码
void computer(char arr[POW][LOW], int pow, int low)
{
printf("电脑请输入\n");
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (arr[x][y] == ' ')
{
arr[x][y] = '#';
display_board(arr, pow, low);
break;
}
}
}
以下是判断输赢的代码
char judge(char arr[POW][LOW], int pow, int low)
{
int i = 0;
for (i = 0; i <= pow; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')
{
return arr[i][1];
}
}
for (i = 0; i <= low; i++)
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[i][1] != ' ')
{
return arr[1][i];
}
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
{
return arr[1][1];
}
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
{
return arr[1][1];
}
return 0;
}
以下是判断是否平局的代码
int is_full(char arr[POW][LOW], int pow, int low)
{
int i = 0;
int count = 0;
for (i = 0; i <= pow; i++)
{
int j = 0;
for (j = 0; j <= low; j++)
{
if (arr[i][j] == ' ')
count++;
}
}
if (count == 0)
return 1;
else
return 0;
}