收藏 分享(赏)

课程设计--五子棋.ppt

上传人:kpmy5893 文档编号:7757668 上传时间:2019-05-25 格式:PPT 页数:14 大小:258.50KB
下载 相关 举报
课程设计--五子棋.ppt_第1页
第1页 / 共14页
课程设计--五子棋.ppt_第2页
第2页 / 共14页
课程设计--五子棋.ppt_第3页
第3页 / 共14页
课程设计--五子棋.ppt_第4页
第4页 / 共14页
课程设计--五子棋.ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、VC +MFC五子棋,齐鹏程,设计背景,五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”等多种称谓。 五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点

2、,是古今哲理的结晶。,设计方案简述,基本原理 棋盘:棋盘模块相对简单,只是横竖交错的直线。因此可以利用画笔工具画出很规范的棋盘格局。 下棋:下棋动作也比较简单,本设计使用鼠标右键和左键单击来区别下“黑棋”还是“白棋”,用该方式来表示两个不同的人在下棋。 判断输赢:这个算法比较复杂,要求程序自动在同行、同列和同斜线上五个连续同色的棋子时,判断哪方获胜并结束游戏。,本程序的开发流程如下:,3 详细设计 3.1棋盘规划 3.1.1 单击File菜单,选中New命 令,创建新的VC项目。 3.1.2创建MFC项目并命名为 fivechess。 3.1.3选择“单文档”类型的MFC应用程序,其它选项默认

3、,选中后单击Finish按钮结束应用程序向导。,3.1.4 添加画棋盘的函数,首先,在fivechessView。h 头文件中定义一个用于显示棋盘的自定义共有函数:void Checkerboard(CDC *pDC); 然后,在fivechessView.cpp 源文件中实现该函数: void CFivechessView:Checkerboard(CDC *pDC) for(int i=0;iMoveTo(i*50,0); /画笔移动到(i*50,0)点pDC-LineTo(i*50,1000); /画笔从(i*50,0)点画到(i*50,1000)点for(i=0;iMoveTo(0,i

4、*50);pDC-LineTo(1000,i*50); 最后,在应用程序框架的OnDraw()函数调用该画棋盘函数,将pDC对象作为实参传递给Checkerboard()函数: void CFivechessView:OnDraw(CDC* pDC) CFivechessDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);Checkerboard(pDC); / 调用自定义的画棋盘函数 按F5键编译并运行,运行效果如下:,3.2 鼠标设置 3.2.1添加鼠标消息处理函数。 首先,在CfivechessView类中添加单击鼠标右键,调用添加消息处理函数的对话

5、框,如下图所示: (注:本设计中,假设鼠标右键和左键分别是两个不同的玩家),然后,在消息处理函数添加对话框中,添加WM_LBUTTONDOWN和WM_RBUTTONDOWN消息处理函数,添加后单击Edit Existing离开,如下:,3.2.2为鼠标消息添加制约条件。,我们发现,到目前为止,这个五子棋下棋规则还有两个缺陷: 1.没有遵守轮流下棋规则:如鼠标左键或右键可以持续下棋。 2.没有遵守一个格子只能下一次棋的规则:如已经有黑色棋子的格子,还能持续放入白色或黑色的棋子。 现在,就添加鼠标消息的制约条件,来使下棋规范化。 首先是要完成轮流下棋的规则,该规则是要让鼠标左右键轮流下棋,如果连续

6、下棋,则程序不予理睬。算法思路是:使用一个变量,初始化为0,判断该变量,当变量值为0时,可以允许接受鼠标左键单击的消息函数中的绘图处理,绘制完毕,该变量变为1;当变量值为1时,可以允许接受鼠标右键单击的消息函数中的绘制处理,绘制完毕,该变量又变为0。,3.3 判断输赢,该功能是棋牌游戏中较难的功能,投入也多。 游戏规则是这样的:若某一方(黑棋或白棋)在同一行、同一列或同一斜线上具有五个同色棋子则该颜色的那方就获胜。因此,可以使用一个整型二维数组来记录当前器具的情况,二维数组的值定义为: i 0:表示该位置没有棋子 ii 1:表示该位置已经放置了黑色棋子 iii 2:表示该位置已经放置了白色棋子

7、 因此,现在考虑的问题: i、问题1:要在下每个棋后,将数组变量对应位置的数组元素之做相应改变,变为1或2,这个很容易实现,只需在鼠标消息处理函数中调用Location()函数后改变数组元素之即可。 ii、问题2:下每个棋后,判断在这个棋子同一行、同一列或同一斜线上是否具有连续5个同色的棋子,如果有,则宣布该方胜利,并推出游戏,如果没有则继续游戏,轮到对方下棋。,参考文献,1 伍俊良 Visual C+6.0程序设计与系统开发案例 M 北京:清华大学出版社,2002,124-146,142-163 2吴金平 Visual C+6.0编程与实践M 北京:中国水利水电出版社,2004,52-97 3 魏亮,李春葆 Visual C+6.0程序设计例学与实践M 北京:清华大学出版社,2007,82-101 4 郑阿奇 Visual C+6.0实用教程 M北京 :电子工业出版社,2007.05,140-164,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报