井字游戏是一种在3*3格子上进行的连珠游戏,和五子棋比较类似。由于棋盘一般不画边框,格线排成并字故得名。两个游戏者轮流在格子里留下 X 和 O 标记(一般来说先手者为 X ),最先在任意一条直线上成功连接三个同一标记的一方获胜。如果双方经过9次轮换标记(棋盘上一共有9个空格),依然无法分出胜负,则需要重新开始游戏。
一、步骤分析
游戏步骤大体分为:
(1)设定棋盘与棋手标记
(2)展示棋盘
(3)棋手下棋
(4)检查当前棋盘状态,若有获胜者则结束游戏,没有则继续
(5)交换下棋棋手
(6)输出结果
二、编程实现
(1)主程序
int main()
{
char cell[3][3]={{'1','2','3'},{'4','5','6'},{'7','8','9'}};
int player=0,i=0,winner=0;
for(i=0;i<9;i++)
{
int row,column;
Show_chessboard(cell);
player=i%2+1;
printf(" 玩家%d选择落棋坐标:",player);
scanf("%d%d",&row,&column);
Play_chess(cell,&player,&row,&column);
winner=Judgment(cell,player);
if(winner>0)
{
break;
}
}
if (winner==0)
{
printf("游戏结束.平局.\n");
}
else
{
printf("游戏结束.玩家%d获胜\n",player);
}
return 0;
}
二、子函数
(1)Show_chessboard 展示棋盘
void Show_chessboard(char cell[3][3])
{
printf(" 0 1 2 \n");
printf("---+---+---\n");
printf(" %c | %c | %c | 0\n",cell[0][0],cell[0][1],cell[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c | 1\n",cell[1][0],cell[1][1],cell[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c | 2\n",cell[2][0],cell[2][1],cell[2][2]);
printf("---+---+---\n");
}
(2) Play_chess 棋手下棋
void Play_chess(char cell[3][3],int*player,int*row,int*column)
{
if(*player==1)
{
cell[*row][*column]='X';
}
if(*player==2)
{
cell[*row][*column]='O';
}
}
(3)Judgment 检查棋盘状态,判断是否获胜者
int Judgment(char cell[3][3],int player)
{
int j=0;
if((cell[0][0]==cell[1][1]&&cell[1][1]==cell[2][2])||(cell[0][2]==cell[1][1]&&cell[1][1]==cell[2][0]))
{
return player;
}
else
{
for(j=0;j<3;j++)
{
if((cell[j][0]==cell[j][1]&&cell[j][1]==cell[j][2])||(cell[0][j]==cell[1][j]&&cell[1][j]==cell[2][j]))
{
return player;
}
}
return 0;
}
}
(待改进)