三,棋盘游戏
简单计算机模拟期棋盘对弈。其中棋盘左上角坐标为(1,1),右下角坐标为(3,3)。游戏规则如下:
(1)计算机移动时,使用相应函数扫描棋盘矩阵,寻找未占单元:发现空单元之后,置为“O”,未发现时,报告平局后推出。
(2)轮到对弈者时,使用想要函数要求对弈者回答想把“X"放在哪
(3)谁先三点连成一线了,则报告谁胜出
(4)计算机与对弈者每下一步棋都会使相应位置变为“O”和“X”,便于在屏上显示矩阵。
#include <stdio.h>
#include <stdlib.h>
void init_qipan();
void player_move();
void computer_move();
void disp();
char check();
char qipan[3][3];
int main(void)
{
system("cls");
system("color 3f");
system("cls");
printf("******************欢迎来到人机对战棋盘游戏*********************\n");
char done;
done = ' ';
init_qipan();
do {
disp();
player_move();
done = check();
if (done != ' ')break;
computer_move();
done = check();
} while (done == ' ');
if (done == 'X')
printf("你赢了!\n");
else
printf("你输了! \n");
disp();
getchar();
return 0;
}
void disp()
{
int t;
for (t = 0; t < 3; t++)
{
printf("%c|%c|%c ", qipan[t][0], qipan[t][1], qipan[t][2]);
if (t != 2)
printf("\n-|-|-\n");
}
printf("\n");
}
void init_qipan()
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
qipan[i][j] = ' ';
}
}
void player_move()
{
int x, y;
printf("It's your turn:");
scanf("%d%*c%d", &x, &y);
x--; y--;
if (qipan[x][y] != ' ')
{
printf("Error, try again.\n");
player_move();
}
else qipan[x][y] = 'X';
}
void computer_move(void)
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
if (qipan[i][j] == ' ')
break;
if (qipan[i][j] == ' ')
break;
}
if (i*j == 9)
{
printf("pingju\n");
exit(0);
}
else
qipan[i][j] = '0';
}
char check()
{
int i;
for (i = 0; i < 3; i++)
if (qipan[i][0] == qipan[i][1] && qipan[i][0] == qipan[i][2])
return qipan[i][0];
for (i = 0; i < 3; i++)
if (qipan[0][i] == qipan[1][i] && qipan[0][i] == qipan[2][i])
return qipan[0][i];
for (i = 0; i < 3; i++)
if (qipan[0][0] == qipan[1][1] && qipan[0][0] == qipan[2][2])
return qipan[0][0];
for (i = 0; i < 3; i++)
if (qipan[0][2] == qipan[1][1] && qipan[1][1] == qipan[2][0])
return qipan[0][2];
return ' ';
}
不足之处,请多指教!