#include<stdio.h>
#define row 3
#define col 3
void print_borad(char borad[row][col],int a,int b)//打印棋盘函数
{
int i=0,j=0,n=0;
for(n=0;n<row;n++)
{
printf("_____");
}
printf("\n");
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf(" %c |",borad[i][j]);
}
printf("\n");
for(n=0;n<row;n++)
{
printf("_____");
}
printf("\n");
}
}
int win(char borad[row][col],int a,int b)//判断输赢函数
{
int i,j,sum=0;
//右对角线相连
for(i=0;i<row-1;i++)
{
if(borad[i][i]==borad[i+1][i+1]&&borad[i][i]!=' ')
{
sum++;
}
}
if(sum==row-1)
{
if(borad[i][i]=='x')
{
printf("x方胜利\n");
}
else
{
printf("o方胜利\n");
}
return 0;
}
//左对角线相连
sum=0;
for(i=0;i<row-1;i++)
{
if(borad[i][row-i-1]==borad[i+1][row-i-2]&&borad[i][row-i-1]!=' ')
{
sum++;
}
}
if(sum==row-1)
{
if(borad[i][row-i-1]=='x')
{
printf("x方胜利\n");
}
else
{
printf("o方胜利\n");
}
return 0;
}
//整行相连
sum=0;
for(i=0;i<row;i++)
{
for(j=0;j<col-1;j++)
{
if(borad[i][j]==borad[i][j+1]&&borad[i][j]!=' ')
{
sum++;
}
}
if(sum!=row-1)
{
sum=0;
}
else if(sum=row-1)
{
break;
}
}
if(sum==row-1)
{
if(borad[i][j]=='x')
{
printf("x方胜利\n");
}
else
{
printf("o方胜利\n");
}
return 0;
}
//整列相连
sum=0;
for(i=0;i<col;i++)
{
for(j=0;j<row-1;j++)
{
if(borad[j][i]==borad[j+1][i]&&borad[j][i]!=' ')
{
sum++;
}
}
if(sum!=row-1)
{
sum=0;
}
else if(sum=row-1)
{
break;
}
}
if(sum==row-1)
{
if(borad[j][i]=='x')
{
printf("x方胜利\n");
}
else
{
printf("o方胜利\n");
}
return 0;
}
int n=0;//判断平局
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(borad[i][j]!=' ')
{
n++;
}
}
}
if(n==row*col)
{
printf("平局\n");
return 0;
}
if(sum!=row-1)
return 1;
}
void play_game()//游戏运行主函数
{
int i=0,j=0;
int n;
char borad[row][col];
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
borad[i][j]=' ';
}
}
print_borad(borad,row,col);
do
{
int r=0,c=0;
printf("请第一位玩家输入棋格的坐标\n");
scanf("%d %d",&r,&c);
borad[r-1][c-1]='x';
print_borad(borad,row,col);
int t=win(borad,row,col);
if(t==0)
break;
printf("请第二位玩家输入棋格的坐标\n");
scanf("%d %d",&r,&c);
borad[r-1][c-1]='o';
print_borad(borad,row,col);
win(borad,row,col);
if(t==0)
break;
}while(1);
}
int main()
{
int x=0;
printf("开始游戏请输入1,结束游戏请输入0\n");
scanf("%d",&x);
do
{
switch(x)
{
case 1:
{
printf("游戏开始\n");
play_game();
break;
}
case 0:
{
return 0;
}
default:
{
printf("操作错误,请重新输入\n");
scanf("%d",&x);
break;
}
}
printf("继续游戏请输入1,退出游戏请输入0\n");
scanf("%d",&x);
}while(x!=0);
return 0;
}
只需将宏定义行列改为5,即可实现五子棋