今天算是正式开始了项目之旅,这次选的项目是五子棋。
对于五子棋而言,最开始那必然是棋盘的建立。
对于棋盘的建立
void draw()
{
putimage(0, 0, &bk); //输出图片
setlinecolor(BLACK); //线条颜色
setlinestyle(PS_SOLID, 2);
for (int i = 0;i < 15;i++)
{
line(75, i * b_wide + 75, 14 * b_wide + 75, i * b_wide + 75); //定义好棋盘都加75主要是更利于观看
line(i * b_wide + 75, 75, i * b_wide + 75, 14 * b_wide + 75);
}
}
这里也用到了很多easyx的东西,什么是easyx呢?
这里的line(0, 0,600,500);
0 0 600 500 表示从(0,0)点到(600,500)两点的一条线
这里的75的话主要是加起来为了美观,使棋盘居中看起来更加美观。
initgraph(600, 500, EW_SHOWCONSOLE);
#define b_wide 25 //线条之间的间隔25个像素
#define row 15
#define space 75
#define col 15
对于一开始的整体大小是以及用initgraph定义了,并且定义了五子棋盘的行列数是一个15X15的这么一个正方形,对于每条线段的空隙宽度也就是用的b_wide来定义的,线条之间间隔有25个像素。
最后能得到这么一个样式,对于接下来的话就是要实现下棋这么一个操作
while (1)
{
BeginBatchDraw();
draw();
EndBatchDraw();
ExMessage msg;//处理消息
if (peekmessage(&msg, EM_MOUSE))
{
switch (msg.message)//消息类型
{
case WM_MOUSEMOVE:
mousemovemsg(&msg);//鼠标移动消息
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
mousepressmeg(&msg);//左键按下
break;
default:
break;
}
}
}
因为要实现一直下棋的这么一个操作,所以必须将draw函数放在循环里,而他上下的分别为双缓冲,如若不使用双缓冲的话这个棋盘会一直闪图。对于接下来的操作便是处理鼠标消息,让程序对鼠标的接触有反应,这里要注意EM_MOUSE这个函数有的下载的图形库里没有,所以如果要用这个函数,必须找到图形库文件里包含这个的,当时就是因为这个点被折磨了很久。接下来就是对鼠标信息和鼠标按下函数进行建立以及下黑白子一系列操作。
今天就做到了如图所示。还有判断输赢以及悔棋人机大战没做。