#include <stdio.h>
#define CHESSROW 3
/*
63. (tic__tac__toe 游戏) tic__tac__toe 游戏的规则是:从一个空的 (N*N) 的
棋盘(例如N=3)开始,甲乙二人轮流将棋子放置在棋盘上未被占据的方格中,
例如甲第一个放,他把棋子放在**的方格里, 然后轮到乙放,他把棋子放在第
一行中间的方格里。于是又轮到甲放,......如此进行下去。判定胜负的方法是:
若某一游戏者有N枚棋子占据了一横行,或一竖列,或一对角线,则此人获胜;若
直至整个棋盘被占满还没有一方获胜,则为平局。
*/
char ChessboardState[CHESSROW*CHESSROW];
void InitializeChessboard(void)
{
for(unsigned int i=0;i<CHESSROW*CHESSROW;i++)
ChessboardState[i]=' ';
}
void PrintChessboard(void)
{
for(unsigned int i=0;i<CHESSROW;i++)
{
for(unsigned int t=0;t<CHESSROW;t++)
{
putchar('-');putchar('-');putchar('-');putchar('-');
}
putchar('\n');
putchar('|');
for(unsigned int j=0;j<CHESSROW;j++)
{
putchar(' ');
putchar(ChessboardState[i*CHESSROW+j]);
putchar(' ');
putchar('|');
}
putchar('\n');
}
for(unsigned int t=0;t<CHESSROW;t++)
{
putchar('-');putchar('-');putchar('-');putchar('-');
}
putchar('\n');
}
void PlayChess(void)
{
static unsigned int player=0;
if(player%2==0)
{
puts("请玩家1走棋:");
}
else
{
puts("请玩家2走棋:");
}
puts("比如第二行第三列走棋格式为:2,3");
unsigned int x=0,y=0;
while(1)
{
scanf("%d,%d",&x,&y);
if(x>CHESSROW||x<1||y>CHESSROW||y<1||ChessboardState[(x-1)*CHESSROW+(y-1)]!=' ')
{
puts("您输入的不正确,请重新输入!");
while(1)
{
if(getchar()=='\n')
break;
}
}
else
break;
}
unsigned int offset=0;
offset=(x-1)*CHESSROW+(y-1);
if(player%2==0)
{
ChessboardState[offset]='X';
}
else
{
ChessboardState[offset]='O';
}
player++;
}
unsigned int CheckWin(void)
{
unsigned int a=0,b=0,c=0,d=0;
for(int i=0;i<CHESSROW;i++)
{
a=0,b=0,c=0,d=0;
for(int j=0;j<CHESSROW;j++)
{
if(ChessboardState[i*CHESSROW+j]=='X')
a++;
if(ChessboardState[i*CHESSROW+j]=='O')
b++;
if(ChessboardState[j*CHESSROW+i]=='X')
c++;
if(ChessboardState[j*CHESSROW+i]=='O')
d++;
if(a==CHESSROW||c==CHESSROW)
return 1;
if(b==CHESSROW||d==CHESSROW)
return 2;
// printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
}
}
a=0,b=0,c=0,d=0;
for(int i=0;i<CHESSROW;i++)
{
if(ChessboardState[i*CHESSROW+i]=='X')
a++;
if(ChessboardState[i*CHESSROW+i]=='O')
b++;
if(ChessboardState[(CHESSROW-i-1)*CHESSROW+CHESSROW-i-1]=='X')
c++;
if(ChessboardState[(CHESSROW-i-1)*CHESSROW+CHESSROW-i-1]=='X')
d++;
if(a==CHESSROW||c==CHESSROW)
return 1;
if(b==CHESSROW||d==CHESSROW)
return 2;
}
return 0;
}
int main(int argc,char *argv[])
{
InitializeChessboard();
while(1)
{
PrintChessboard();
if(CheckWin()==1)
{
puts("玩家1胜!游戏结束!");
break;
}
if(CheckWin()==2)
{
puts("玩家2胜!游戏结束!");
break;
}
PlayChess();
}
return 0;
}
/*
------------
| | |
------------
| | |
------------
| | |
------------
请玩家1走棋:
比如第二行第三列走棋格式为:2,3
1,1
------------
| X | |
------------
| | |
------------
| | |
------------
请玩家2走棋:
比如第二行第三列走棋格式为:2,3
*/