#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;
}
}
}
}
}