#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

*/