点击下载代码压缩包
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#define color_bk RGB(179,109,65) //背景颜色(土色)
#define color_bo RGB(137,106,69)//棋盘线条颜色
#define COUNT 15 //棋盘的大小
#define MARGIN 40 //边距的宽度
#define SIZE 24 //棋子的大小
#define CELL 30 //格子的大小
#define gap (CELL-SIZE)/2
IMAGE image;
int board[COUNT][COUNT]={0};//当数值为1是白字,2为黑子
int sign=0; //标记轮流下棋方0为白方1为黑子
bool check(int left ,int top,int value)
{
int account=0;
for(int i=0;i<COUNT;i++)
{
if(board[i][top]==value)
{
account++;
if(account==5)
return true;
}
else account=0;
}
account=0;
for(i=0;i<COUNT;i++)
{
if(board[left][i]==value)
{
account++;
if(account==5)
return true;
}
else account=0;
}
account=0;
for(i=0;i<left+top;i++)
{
if(board[i][left+top-i]==value)
{
account++;
if(account==5)
return true;
}
else account=0;
}
account=0;
int number=(left>top)?COUNT-(left-top):COUNT-(top-left);
for(i=0;i<number;i++)
{
if(left>top)
{
if(board[left-top+i][i]==value)
{
account++;
if(account==5)
return true;
}
else account=0;
}
else
{
if(board[i][top-left+i]==value)
{
account++;
if(account==5)
return true;
}
else account=0;
}
}
return false;
}
bool takeit(int x,int y)
{
int i=(x-MARGIN)/CELL;
int j=(y-MARGIN)/CELL;
if(board[i][j]!=0) return false;
if(sign==0)//白子
{
loadimage(&image,"ui\\white.jpg");
putimage(i*CELL+MARGIN+gap,j*CELL+MARGIN+gap,&image);
board[i][j]=1;
sign=1;
if(check(i,j,1))
return true;
return false;
}
else if(sign==1)
{
loadimage(&image,"ui\\black.jpg");
putimage(i*CELL+MARGIN+gap,j*CELL+MARGIN+gap,&image);
board[i][j]=2;
sign=0;
if(check(i,j,2))
return true;
return false;
}
return false;
}
void main()
{
initgraph(530,530);
loadimage(NULL,"ui\\bk.jpg");
MOUSEMSG m;
int x,y;
while(true)
{
if(MouseHit())
{
m= GetMouseMsg();
if(m.uMsg==WM_LBUTTONDOWN)
{
x=m.x;
y=m.y;
if(!(x>MARGIN&&y>MARGIN&&x<(MARGIN+COUNT*CELL)&&y<(MARGIN+COUNT*CELL)))
{
continue;
}
else
{
if(takeit(x,y))
{
if(sign==0)
outtextxy(40,20,_T("此局黑子获胜!"));
else
outtextxy(40,20,_T("此局白子获胜!"));
break;
}
}
}
}
}
closegraph();
}