#include<iostream>
#include<iomanip>
int a[15][15]={0}; //空格显示为0,玩家A下白棋显示为1,玩家B下黑棋显示为2
using namespace std;
int judge(int m1,int n1) //判断是否达到游戏结束标准的子程序
{
int i,j,count=0;
for(i=0;i<15;i++)
{
for(j=0;j<=10;j++)
{
if(a[i][j]==1) //横行达到五个白色棋子的情况
if(a[i][j+1]==1&&a[i][j+2]==1&&a[i][j+3]==1&&a[i][j+4]==1)
{
count=1;
return count;
}
if(a[i][j]==2) //横行达到五个黑色棋子的情况
if(a[i][j+1]==2&&a[i][j+2]==2&&a[i][j+3]==2&&a[i][j+4]==2)
{
count=2;
return count;
}
}
}
for(j=0;j<15;j++)
{
for(i=0;i<=10;i++)
{
if(a[i][j]==1) //纵行达到五个白色棋子的情况
if(a[i+1][j]==1&&a[i+2][j]==1&&a[i+3][j]==1&&a[i+4][j]==1)
{
count=1;
return count;
}
if(a[i][j]==2) //纵行达到五个黑色棋子的情况
if(a[i+1][j]==2&&a[i+2][j]==2&&a[i+3][j]==2&&a[i+4][j]==2)
{
count=2;
return count;
}
}
}
for(i=0;i<=10;i++)
{
for(j=0;j<=10;j++)
{
if(a[i][j]==1) //右下斜线达到五个白色棋子的情况
if(a[i+1][j+1]==1&&a[i+2][j+2]==1&&a[i+3][j+3]==1&&a[i+4][j+4]==1)
{
count=1;
return count;
}
if(a[i][j]==2) //右下斜线达到五个黑色棋子的情况
if(a[i+1][j+1]==2&&a[i+2][j+2]==2&&a[i+3][j+3]==2&&a[i+4][j+4]==2)
{
count=2;
return count;
}
}
}
for(i=0;i<15;i++)
{
for(j=4;j<=10;j++)
{
if(a[i][j]==1) //左下斜线达到五个白色棋子的情况
if(a[i+1][j-1]==1&&a[i+2][j-2]==1&&a[i+3][j-3]==1&&a[i+4][j-4]==1)
{
count=1;
return count;
}
if(a[i][j]==2) //左下斜线达到五个黑色棋子的情况
if(a[i+1][j-1]==1&&a[i+2][j-2]==1&&a[i+3][j-3]==1&&a[i+4][j-4]==2)
{
count=2;
return count;
}
}
}
return 0;
}
int main()
{
int i,j,flag=0,m,n,blank=0;
cout<<"游戏开始"<<endl;
for(i=0;i<15;i++) //输出棋盘
{
for(j=0;j<15;j++)
cout<<setw(3)<<a[i][j];
cout<<endl;
}
while(flag==0) //flag为判断结果的函数,flag=0,游戏继续;flag=1,玩家A获胜;
{ // flag=2,玩家B获胜;flag=3,和棋(棋盘已排满而无人获胜)。
cin>>m>>n; //玩家A落子
a[m][n]=1;
flag=judge(m,n); //判断结果
for(i=0;i<15;i++) //输出棋盘
{
for(j=0;j<15;j++)
cout<<setw(3)<<a[i][j];
cout<<endl;
}
blank=0;
for(i=0;i<15;i++) //判断剩余空格数
for(j=0;j<15;j++)
if(a[i][j]==0)
blank++;
if(flag==1) //若玩家A获胜,终止游戏
{
cout<<"玩家A获胜"<<endl;
break;
}
else if(blank==0) //若棋盘已满,终止游戏 (棋盘为15*15,棋盘满情况必定会在A落子后出现)
{
flag=3;
cout<<"和棋"<<endl;
break;
}
else cout<<"游戏继续,玩家B下棋"<<endl;
cin>>m>>n; //玩家B落子
a[m][n]=2;
flag=judge(m,n); //判断结果
for(i=0;i<15;i++) //输出棋盘
{
for(j=0;j<15;j++)
cout<<setw(3)<<a[i][j];
cout<<endl;
}
if(flag==2) //若玩家B获胜,终止游戏
{
cout<<"玩家B获胜"<<endl;
break;
}
else cout<<"游戏继续,玩家A下棋"<<endl;
}
return 0;
}