#include <graphics.h>
#include <conio.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
void ShowPlate();
void PlayGame();
bool flag=true;
int arr[16][16];
void main()
{
    mciSendString("play 高山流水.mp3",0,0,0);
	initgraph(680,680);     //划定屏幕大小为680  680
	ShowPlate();
	PlayGame();
	getch();
}
void ShowPlate()
{
	setfillstyle(BROWN);             
	bar(40,40,640,640);              //定义棋盘范围,并且棋盘颜色为棕色
    setfillstyle(LIGHTGRAY);         //定义棋盘边缘,颜色为浅灰色
	bar(0,0,40,640);
	bar(0,0,640,40);
	bar(640,0,680,680);
	bar(0,640,680,680);
	for(int x=40;x<=640;x+=40)       //画纵向棋盘线,间距为40
	{
		line(x,40,x,640);
	}
	for(int y=40;y<=640;y+=40)      //画横向棋盘线,间距为40
	{
		line(40,y,640,y);
	}
}
void PlayGame()
{ 
	int q=1;
	while(q)
	{		
        MOUSEMSG msg=GetMouseMsg();        //获取鼠标点的信息
     	int m,n,x,y;            //定义m,n,x,y确定棋子落得准确位置
    	m=msg.x%40;
    	n=msg.y%40;
    	if(m==20||n==20)
		continue;
     	x=msg.x/40+m/20-1;
    	y=msg.y/40+n/20-1;
     	if(x>=0&&x<=15&&y>=0&&y<=15)
		{
		
		if(msg.mkLButton&&arr[y][x]==0)		   //判断要下棋子的位置是否原来有棋子
		{
			
			if(flag==true)
			{   mciSendString("play xq.mp3",0,0,0);
				arr[y][x]=1;                        //若棋子为黑色,则该处数组的值变为1
				if(m<20&&n<20)	
				{
					setfillstyle(BLACK);
					fillellipse(msg.x/40*40,msg.y/40*40,10,10);										
				}
				else if(m>20&&n>20)
				{
					setfillstyle(BLACK);
					fillellipse((msg.x/40+1)*40,(msg.y/40+1)*40,10,10);
					
				}
				else if(m<20&&n>20)
				{
					setfillstyle(BLACK);
					fillellipse(msg.x/40*40,(msg.y/40+1)*40,10,10);
					
				}
				else if(m>20&&n<20)
				{
					setfillstyle(BLACK);
					fillellipse((msg.x/40+1)*40,msg.y/40*40,10,10);
					
				}
				flag=false;
			}
			
			else
			{  mciSendString("play xq.mp3",0,0,0);
				arr[y][x]=-1;                             //若棋子为白色,则该处数组的值变为-1
				if(m<20&&n<20)	
				{
					setfillstyle(WHITE);
					fillellipse(msg.x/40*40,msg.y/40*40,10,10);
					
				}
				else if(m>20&&n>20)
				{
					setfillstyle(WHITE);
					fillellipse((msg.x/40+1)*40,(msg.y/40+1)*40,10,10);
					
				}
				else if(m<20&&n>20)
				{
					setfillstyle(WHITE);
					fillellipse(msg.x/40*40,(msg.y/40+1)*40,10,10);
					
				}
				else if(m>20&&n<20)
				{
					setfillstyle(WHITE);
					fillellipse((msg.x/40+1)*40,msg.y/40*40,10,10);
					
				}
				flag=true;
			}						
		}		
		}
    	for (int i=0;i<15;i++)      //横向判断输赢
		{
		int num=0;
		for(int j=i;j<i+5;j++)
		{
           num=num+arr[y][j];
		   if (num==5)
		   {
			   outtextxy(100,100,"黑色赢了!");
			   mciSendString("play ls.mp3",0,0,0);
			   q=0;
			   break;
		   }
		   if (num==-5)
		   {
               outtextxy(100,100,"白色赢了!");
			   mciSendString("play ls.mp3",0,0,0);
			   q=0;
			   break;
		   }
		}
		}
       for(int M=0;M<i+5;M++)      //纵向判断输赢
	   {
			int num=0;
			for(int j=M;j<15;j++)
			{
				num=num+arr[j][x];
				if(num==5)
				{
					outtextxy(100,100,"黑色赢了!");
					mciSendString("play ls.mp3",0,0,0);
					q=0;
					break;
				}
				if(num==-5)
				{
					outtextxy(100,100,"白色赢了!");
					mciSendString("play ls.mp3",0,0,0);
					q=0;
					break;
				}
			}
		}	
		for(int p=y-5,q=x-5;p<15;p++,q++)         //左上右下判断输赢
		{
			int num=0;
			for(int i=0;i<5;i++)
			{
				num=num+arr[p+i][q+i];
				if(num==5)
				{
					outtextxy(100,100,"黑色赢了!");
					mciSendString("play ls.mp3",0,0,0);
					q=0;
					break;
				}
				if(num==-5)
				{
					outtextxy(100,100,"白色赢了!");
					mciSendString("play ls.mp3",0,0,0);
					q=0;
					break;
				}
			}
		}
        for(int P=y+5,Q=x-5;Q<15;P--,Q++)       //左下右上判断输赢
		{
			int num=0;
			for(int i=0;i<5;i++)
			{
				num=num+arr[P-i][Q+i];
				if(num==5)
				{
					outtextxy(100,100,"黑色赢了!");
					mciSendString("play ls.mp3",0,0,0);
					q=0;
					break;
				}
				if(num==-5)
				{
					outtextxy(100,100,"白色赢了!");
					mciSendString("play ls.mp3",0,0,0);
					q=0;
					break;
				}
			}
		}		
	}
}