简易版五子棋~~
简单说明~鼠标控制单击左键执行黑子~单击右键执行白子~由于初学绘图~这代码是参考网上课程的~还有很多不完善的地方~仅供参考~
注意~文件后缀是.cpp格式~~~~
程序代码:#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define N 28
void PlayGame();
int GameOver1(int chess[N][N],int flag);
void BackGround()
{
IMAGE GameBackground;
/* loadimage(&GameBackground,"GameBackground.jpg");
int width=GameBackground.getwidth();
int height=GameBackground.getheight();
initgraph(width,height);
putimage(0,0,&GameBackground);*/
setlinecolor(BLACK);
for (int i=20;i<=540;i+=20)
{
line(20,i,540,i);
line(i,20,i,540);
}
setfillcolor(BLACK);
fillcircle(100,280,2);
fillcircle(280,100,2);
fillcircle(460,100,2);
fillcircle(100,460,2);
fillcircle(460,460,2);
fillcircle(100,100,2);
fillcircle(460,280,2);
fillcircle(280,460,2);
fillcircle(280,280,2);
}
void messagebox()
{
setlinecolor(BLACK);
setfillcolor(RGB(255,201,14));
fillrectangle(540,20,720,190);//左上角和右下角参数,确定一个矩形
settextstyle(50,28,"黑体"); //画提示框里面的内容
setbkmode(TRANSPARENT);//字体不背景透明处理
setlinecolor(BLACK);
settextcolor(BLACK);
outtextxy(550,50,"黑棋");
setfillcolor(BLACK);
fillcircle(680,75,15);
setlinecolor(WHITE);
settextcolor(WHITE);
outtextxy(550,110,"白棋");
setfillcolor(WHITE);
fillcircle(680,135,15);
PlayGame();
getchar();
getchar();
}
void PlayGame()
{
//鼠标
int x,y,i,j;
int chess[N][N]={0};
MOUSEMSG m;
while (1)
{
m=GetMouseMsg();
switch(m.uMsg)
{
case WM_LBUTTONDOWN:
if (m.x>=20&&m.x<=540&&m.y>=20&&m.y<=540)
{
x=m.x%20;
if (x<=10)
m.x=m.x-x;
else
m.x=m.x-x+20;
y=m.y%20;
if (y<=10)
m.y=m.y-y;
else
m.y=m.y-y+20;
i=m.x/20;
j=m.y/20;
if (chess[i][j]!=0)
continue;
setlinecolor(BLACK);
setfillcolor(BLACK);
fillcircle(m.x,m.y,8);
chess[i][j]=1;
if (GameOver1(chess,1)==1)
{
settextcolor(RED);
settextstyle(50,50,"黑体");
outtextxy(100,200,"这局黑棋胜利");
}
}
break;
case WM_RBUTTONDOWN:
if (m.x>=20&&m.x<=550&&m.y>=20&&m.y<=550)
{
x=m.x%20;
if (x<=10)
m.x=m.x-x;
else
m.x=m.x-x+20;
y=m.y%20;
if (y<=10)
m.y=m.y-y;
else
m.y=m.y-y+20;
i=m.x/20;
j=m.y/20;
if (chess[i][j]!=0)
continue;
setlinecolor(WHITE);
setfillcolor(WHITE);
fillcircle(m.x,m.y,8);
chess[i][j]=2;
if (GameOver1(chess,2)==1)
{
settextcolor(WHITE);
settextstyle(50,50,"黑体");
outtextxy(100,200,"这局白棋胜利");
}
}
break;
}
}
}
int GameOver1(int chess[N][N],int flag)
{
int i,j,k,low,row,tilt1,tilt2;
for (i=0;i<N;i++)
{
for (k=0;k<N-4;k++)
{
low=row=tilt1=tilt2=0;
for (j=k;j<k+5;j++)
{
if (chess[i][j]==flag)
low++;
if (chess[j][i]==flag)
row++;
if (chess[i+(j-k)][j]==flag)
tilt1++;
if (chess[i+4-(j-k)][j]==flag)
tilt2++;
}
if (low==5||row==5||tilt1==5||tilt2==5)
return 1;
}
}
return 0;
}
int main()
{
initgraph(750,560);
setbkcolor(RGB(255,100,0));
cleardevice();
BackGround();
messagebox();
getch();
closegraph();
return 0;
}










