该项目主要实现了关于五子棋这么一个小游戏的操作游玩,具体的项目及其细节如下:
- 先利用easyx库的initgraph函数建立一个大小确定的窗口以便我们进行后续的棋盘以及相关框内操作的建立。也方便我们进行相应操作大小的计算。
- 棋盘建立的方面,也是用easyx库里的line函数来进行遍历计算创立一个由线条创立的一个棋盘,边界空格设立为75个像素单位而对于棋盘各个线之间的间隔则设立的为25个像素单位。这样的整体观感更好,最后也用了easyx库里的loadimage和putimage函数插入了一个背景图片以便于整体的观感体验。
- 对于棋子的建立方面,首先的话是用枚举函数建立了一个名为chess的结构,主要包括None,Black,White这三个内容,来用于定义棋子的状态,然后再利用easyx库里的setfillcolor和solidcircle函数绘制黑棋和白棋,对于solidcircle而言的话x和y的坐标主要就是i和j分别乘以25为棋盘的间距,半径的话就设置10足以。
- 对于棋盘上鼠标所移处的绿色边框,同样也是先定义的一个pos的结构体,用r代表行,c代表列,bool isshow来代表是否展示绿色的框,player来代表此时棋手是谁。对于绿色的框来说先用setlinecolor设置框框的颜色,并且用rectangle函数来建立一个框,框的大小的话,就用当前的行列乘以棋盘间的空隙并且加上期盼与边界的空格,最后减去自己觉得合适的长度然后建立一个框。
- 对于下棋的话,就是让鼠标点击的位置先转化为棋盘的坐标位置,然后将棋盘坐标位置赋值为什么颜色,最后画出即可。
- 对于悔棋,人机大战,人人大战,重新开始等功能的字样展示,同样计算大概位置的先用rectangle建立一个框,然后再用outtextxy来输出相应功能的文字。
- 对于鼠标操作主要是用了exmessage,peekmessage等鼠标操作来完成相应鼠标按下的操作。
- 对于悔棋操作,其本质也就是一个栈的运用,只需要将每次不管是人人大战还是人机大战,只要每次玩家下棋或者ai下棋后将每次的横纵坐标放入栈中,再在悔棋函数中将坐标出栈并且将其赋值为0然后重新遍历一遍二维数组重新画一遍棋盘以及棋子,进行操作。
- 对于人机操作的话,主要就是要考虑ai算法以及在下棋哪里判断黑棋和白棋,对于ai算法的话就是在一个棋子遍历他的八个方向,根据不同的情况,对于该点加上不同的分数,最后再建立一个寻找的函数,找到分最高的点,返回此时的坐标,这里有一个点就是当分数相同的时候,其实下在任一一个位置都可以,但是我的话就是让他下在分数相同但是遍历的对后一个位置处,最后下棋时,就让ai自动在该位置下白棋,最后放入函数时也是在一个循环函数中放入,以便ai可以一直下棋。
- 对于人人大战的话,其实就是在玩家下完棋后转化一个pos.player再进行下棋操作即可。
对于判断输赢的话,本质就是在四个方向进行遍历判断有没有五个棋子连在一起,如果有的话就用messagebox整个函数来建立一个小窗口并且输出是那个棋子胜利。