#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;
}
750| 779| 497| 785| 561| 965| 514| 206| 66| 573|