- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程设计--五子棋
齐鹏程 设计背景 五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为“连珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”等多种称谓。 五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。它是中西文化的交流点,是古今哲理的结晶。 设计方案简述 基本原理 棋盘:棋盘模块相对简单,只是横竖交错的直线。因此可以利用画笔工具画出很规范的棋盘格局。 下棋:下棋动作也比较简单,本设计使用鼠标右键和左键单击来区别下“黑棋”还是“白棋”,用该方式来表示两个不同的人在下棋。 判断输赢:这个算法比较复杂,要求程序自动在同行、同列和同斜线上五个连续同色的棋子时,判断哪方获胜并结束游戏。 本程序的开发流程如下: 3 详细设计3.1棋盘规划3.1.1 单击File菜单,选中New命 令,创建新的VC项目。3.1.2创建MFC项目并命名为 fivechess。3.1.3选择“单文档”类型的MFC应用程序,其它选项默认,选中后单击Finish按钮结束应用程序向导。 3.1.4 添加画棋盘的函数 首先,在fivechessView。h 头文件中定义一个用于显示棋盘的自定义共有函数: void Checkerboard(CDC *pDC); 然后,在fivechessView.cpp 源文件中实现该函数: void CFivechessView::Checkerboard(CDC *pDC) { for(int i=0;i20;i++) //连续画20 条竖线 { pDC-MoveTo(i*50,0); //画笔移动到(i*50,0)点 pDC-LineTo(i*50,1000); //画笔从(i*50,0)点画到(i*50,1000)点 } for(i=0;i20;i++) //连续画20 条横线 { pDC-MoveTo(0,i*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类中添加单击鼠标右键,调用添加消息处理函数的对话框,如下图所示:(注:本设计中,假设鼠标右键和左键分别是两个不同的玩家) 然后,在消息处理函数添加对话框中,添加WM_LBUTTONDOWN和WM_RBUTTONDOWN消息处理函数,添加后单击Edit Existing离开,如下: 3.2.2为鼠标消息添加制约条件。 我们发现,到目前为止,这个五子棋下棋规则还有两个缺陷: 1.没有遵守轮流下棋规则:如鼠标左键或右键可以持续下棋。 2.没有遵守一个格子只能下一次棋的规则:如已经有黑色棋子的格子,还能持续放入白色或黑色的棋子。 现在,就添加鼠标消息的制约条件,来使下棋规范化。 首先是要完成轮流下棋的规则,该规则是要让鼠标左右键轮流下棋,如果连续下棋,则程序不予理睬。算法思路是:使用一个变量,初始化为0,判断该变量,当变量值为0时,可以允许接受鼠标左键单击的消息函数中的绘图处理,绘制完毕,该变量变为1;当变量值为1时,可以允许接受鼠标右键单击的消息函数中的绘制处理,绘制完毕,该变量又变为0。 3.3 判断输赢 该功能是棋牌游戏中较难的功能,投入也多。 游戏规则是这样的:若某一方(黑棋或白棋)在同一行、同一列或同一斜线上具有五个同色棋子则该颜色的那方就获胜。因此,可以使用一个整型二维数组来记录当前器具的情况,二维数组的值定义为: i 0:表示该位置没有棋子 ii 1:表示该位置已经放置了黑色棋子 iii 2:表示该位置已经放置了白色棋子 因此,现在考虑的问题: i、问题1:要在下每个棋后,将数组变量对应位置的数组元素之做相应改变,变为1或2,这个很容易实现,只需在鼠标消息处理函数中调用Location()函
您可能关注的文档
最近下载
- TerraMaster铁威马直连存储(TDAS)F4-300说明书用户手册.pdf
- 23S519 小型排水构筑物.pdf VIP
- 云计算导论考试题及答案.doc VIP
- 个人简历表格下载word(最新).pdf VIP
- 公务员考试《判断推理题》题库带答案(典型题).docx VIP
- ASME焊接工艺评定及规程编制要点-PPT演示文稿.pptx VIP
- 经济师试题《中级经济基础》模拟及答案.docx VIP
- 畜牧物联网管理系统.pptx VIP
- (高清版)DB33∕T 1291-2023 重大决策社会风险评估第三方服务规范.pdf VIP
- 新22J04-2 内装修二(细部构造).docx VIP
原创力文档


文档评论(0)