#include<iostream>
#include<easyx.h>
using namespace std;
#define q 30 //像素间隔30
#define spx 490 //棋盘左上角点x坐标
#define spy 90 //左上角y坐标
#define W 15 //宽
#define L 15 //长
//map[i][j]表示坐标(i,j)的值 0表示空地 1表示黑子 2表示白子
//flash表示回合,初始为2,黑色先手
int map[W][L] = { {0},{0} };
int flash = 2;
struct point
{
int x;
int y;
bool isture;
}p;
void background()//背景
{
IMAGE bk;//背景
loadimage(&bk, "tu/kunkun.jpg", 1000, 600); //加载图片棋盘
putimage(0, 0, &bk);
}
void draw() //绘制
{
IMAGE bk; //背景
loadimage(&bk, "tu/kunkun.jpg", 1000, 600); //获取棋盘背景
putimage(0, 0, &bk); //加载棋盘背景
//绘制棋盘
outtextxy(665, 45, "坤坤五子棋");
setlinecolor(BLACK);
for (int k = 0; k < 15; k++) //棋盘线格
{
line(spx, spy + k * q, spx+q*14, spy + k * q);//横线
line(spx + k * q, spy, spx + k * q, spy+14*q);//竖线
}
setfillcolor(BLACK); //黑点
//棋盘标志点
solidcircle(580, 180, 8);
solidcircle(820, 180, 8);
solidcircle(580, 420, 8);
solidcircle(820, 420, 8);
solidcircle(700, 300, 8);
//绘制棋子,1表示绘制黑色棋子,2表示绘制白色棋子
for (int i = 0; i < W; i++)
{
for (int j = 0; j < L; j++)
{
if (map[i][j] == 1)
{
setfillcolor(BLACK);
solidcircle(spx + q * i, spy + q * j, 12);
}
else if (map[i][j] == 2)
{
setfillcolor(WHITE);
solidcircle(spx + q * i, spy + q * j, 12);
}
}
}
//绘制虚拟棋子的位置
if (p.y>=0&&p.x>=0&&p.y<=14&&p.x<=14)
{
circle(p.x*30+490, p.y*30+90, 12);
}
}
void mouseMove(ExMessage* msg)//鼠标移动操作,获取棋盘坐标
{
p.x =(msg->x-475)/30;
p.y = (msg->y-75)/30;
p.isture = 1;
}
void init()//鼠标左按下操作
{
if (map[p.x][p.y] != 1 && map[p.x][p.y] != 2)
{
if (p.y >= 0 && p.x >= 0 && p.y <= 14 && p.x <= 14)//保证鼠标下表在棋盘内给map[][]赋值
{
if (flash == 2)
{
map[p.x][p.y] = 1;//黑色
flash = 1; //下次棋子改为白色,表示黑子获胜
}
else
{
map[p.x][p.y] = 2;//白色
flash = 2;//下次棋子改为黑色,表示白子获胜
}
}
}
}
int main()
{
initgraph(1000, 600); //创建窗口
background(); //加载开始背景板
while (true)
{
//处理消息
ExMessage msg;
if (peekmessage(&msg, WH_MOUSE))
{
switch (msg.message)//消息类型
{
case WM_MOUSEMOVE://鼠标移动消息
mouseMove(&msg);
break;
case WM_LBUTTONDOWN://鼠标左按下消息
//如果map[x][y]是空地则修改map[x][y]的值
init();
break;
default:
break;
}
}
//解决闪频,使用双缓冲绘图
BeginBatchDraw();
draw();
EndBatchDraw();
}
getchar();
return 0;
}