五子棋设计说明-何家俊_第1页
五子棋设计说明-何家俊_第2页
五子棋设计说明-何家俊_第3页
五子棋设计说明-何家俊_第4页
五子棋设计说明-何家俊_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 西安财经学院实践教学活动周登记表姓 名: 何佳俊 学 号: _1005170408 专 业: _计算机科学与技术 院 系: _信息学院 本校指导教师: 王瑞 _实践单位指导教师: _西安财经学院教务处 制实践教学开展时间2012年 7 月 9日 2012年 7月 20日 实践形式(在选项后打)集中分散实践单位实践地点本校指导教师 王瑞职称讲师二级学院、系信息学院实习单位指导教师职称职务所在单位实践内容及收获(由学生本人填写,主要包括:具体实践内容、成果形式、主要收获等) 通过合作完成五子棋对弈系统的后,我们发现自己在进行软件开发方面提高不少,同时积极利用所学到的新技术用于自己的设计开发过程。

2、另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。如:没有讨论五子棋禁手的问题。另一个就是电脑按即定的算法去与玩家下子。这种算法有点“固定”。不太会变,玩家若是仔细观察,可以掌握其规律。还有就是界面不是很华丽。有待改进。实践单位意见单位盖章:年 月 日成绩评定(综合评语) 成绩: 指导教师签字: 、 年 月 日系意见签字(盖章): 年 月 日二级学院意见签字(盖章): 年 月 日注:1.此表在下一学期开学一周内交给指导教师。2.实践成果附后。3.实习内容收获填写不下,可附页。4.以个人社会调查、参加校内实践活动等没有到单位实践,不需填写实践单位意见。5.成绩分为优

3、秀、良好、中等、合格、不合格,共五级。6.本表由二级学院存档。 本科生实践教学活动周实践教学成果成果形式: 实践报告 + 系统 成果名称:_五子棋游戏设计_ 学生姓名:何佳俊 学 号:1005170408 专 业:计算机科学与技术 班 级:计本1004 指导教师:王瑞 完成时间: 2012 年 7 月 22 日1.1 总体分析基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个10*10的二维数组Table1010(10*10是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、1代表己方的子、2代表对方的子;这张表也是今后分析的基础。在此之后还要为两个

4、玩家双方各建立一张棋型表Computer10104和Player10104,用来存放棋型数据。1.2 初始化首先,建立盘面数组Table1010、对战双方的棋型表Computer10104和Player10104并将它们清零以备使用;然后初始化显示器、鼠等输入输出设备并在屏幕上画出棋盘(棋盘可以不显示)。 1.3 主循环控制模块控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。1.4 玩家下子当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在Table1010数组的相应地方记录0,以表明该子是玩家下的。元素值2表示空,1设置为计算机1.

5、5 盘面分析填写棋型表在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,然后再在其中选择落子点。先来分析己方的棋型,从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到Computerxyn中就行了(x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向)。而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同

6、样的方法填写对方棋型表。 1.6 对方下子有了上面填写的两张棋型表,就是遍历棋型表Computer10104和Player10104找出其中数值最大的一点,在该点下子即可。 如果在这儿下子将会形成对手不得不防守的棋型;那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测。这时再调用模块4对预测后的棋进行盘面分析,就可预测出第二步、第三步进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能待机发动反击1.7 胜负判断务须多言,某方形成五子连即获胜 2.1 功能模块图图2.1 功能模块图2.2 功能说明该五子棋程

7、序基本上实现了五子棋的游戏功能,有双方下棋的界面及最终判定结果的界面。同时该游戏采用二维坐标实现,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。在细节方面,该系统提供实时存储功能,随时记录为完成的游戏,使用户可以很好的处理意外中断的情况。该游戏基本实现了游戏的一些要求和特征。在游戏的源程序及文档方面,我们也严格遵守软件工程思想,立足实验要求,确定任务,需求分析,设计和编码,每个步骤力求清晰易懂。原代码注释详尽,各功能模块功能分明,可移植性强。当然该系统也有很多不足的地方,第一次进行独立的课程设计,也有很多细节方面是考虑到的,这款游戏也是在不断的调试和修改中产生和完善的。希望老师能够

8、指出不足,帮助我不断提高。第三章 系统设计3.1 流程图图3.1 流程图3.2 流程图说明本程序定义了各种操作函数、各种状态判定宏,思想明确,思路清晰。各个判断选择了不同路径,因此继续进行或输出结果。程序中,“循环”的利用非常直接和清晰,双方交替下棋,因此循环往复。最终决出胜负或最终平局。分析时,也考虑了许多种情况,针对各个情况均作出了相对措施和解决方案。程序采用循环进行双方交替下棋,并进行了很多判断。首先判断棋盘是否已满,若棋盘已满,则输出平局,结束游戏;若棋盘未满,则继续进行。然后判断“0”方是否胜出,若“0”方获胜,则输出“0”方获胜,结束游戏;若“0”方没有获胜,则继续进行。再判断“x

9、”方是否获胜,若“x”方获胜,则输出“x”方获胜,结束游戏;若“x”方没有获胜,则继续进行。回到“首先”的判断。如此循环第四章 运行结果图4.1 运行结果初始图图4.2 游戏过程图图4.3 游戏进行图总结 我们小组通过对五子棋小游戏的编写,增加了对编写程序的兴趣,尤其是利用C+,不禁惊叹于微软编程人员为我们提供了那么多可以直接使用的类资源。期间,通过查资料,与组员之间交流,学到了许多课堂上所没有的新知识. 编写此程序还需要我们有良好的程序素养,即书写习惯,添加注释,方便日后查看理解甚至修改。期间,需要设置好多变量,分别存储棋子的标志 要十分完善的编写这个程序的确有点困难,这要求我们必须多花心思

10、与精力,多与别人交流探讨,多查处自己程序的bug,最最重要的是自己一定要有耐心,努力去完成。参考文献1 C+编程思想,Bruce Eckel著,刘宗田/邢大红/孙慧杰 等译,机械工业出版社2 21天学通C+,Jesse Liberty著,康博创作室译,人民邮电出版社3 C+标准程序库,Nicolai M.Josuttis著,侯捷/孟岩 译,华中科技大学出版社4 Windows程序设计,Charles Petzold著,北京博彦科技发展有限公司译,北京大学出版社5 Visual C+.NET网络编程,易君 编著,中国铁道出版社6 博弈树搜索6/wlkc/ren

11、gongzhineng/rengongzhineng/kejian/AI/Ai/chapter3/33.htm7 五子棋的核心算法,蝈蝈俊.net源代码/ canvasFrame.cpp : implementation file/#include "stdafx.h"#include "canvasr.h"#include "canvasFrame.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ ca

12、nvasFrame message handlersvoid canvasFrame:OnLButtonDown(UINT nFlags, CPoint point) if(!over)if(player)if(point.x<400 && point.y<400) /确定按下左键的位置在棋盘范围内m = (int)floor(point.x/40); /根据按下左键的位置(point.x,point.y)来计算该点所在格子的索引值m,n,以便在该位置填上棋子n = (int)floor(point.y/40);if(boardmn = 2) boardmn = 0

13、;/表示该格子上填入的是玩家的棋子pcount+; /累计玩家棋子总数if(ccount = 50) && (pcount = 50) /判断目前玩家与计算机的棋子总数是否都等于50,如果是则表示战成平手tie = true;over = true;for(i=0;i<192;i+) /判断玩家所下的棋子在哪些可能获胜的组合中,并累加这些可能获胜的组合中所填入棋子数if(ptablemni && win0i != 7) /判断所下的旗子是否在获胜组合(ptablemni)中,而且win0i不等于7,win0i表示玩家在第i种组合中所填入的旗子数,若在该获胜

14、组合中已不能取胜,则将其值置为7win0i+; /当所下旗子在某一可能获胜组合中时,就将该组合中填入的棋子数加1if(ctablemni) /当玩家在(m,n)位置填上棋子后,将计算机该位置上的取胜几率设为不可能ctablemni = false;win1i=7;player = false; /换计算机下 computer = true;CFrameWnd:OnLButtonDown(nFlags, point);int canvasFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) if (CFrameWnd:OnCreate(lpCreateStr

15、uct) = -1)return -1;SetTimer(1,500,NULL);return 0;void canvasFrame:OnTimer(UINT nIDEvent) CClientDC dc(this);if(!over)if(computer) /计算机下棋ComTurn(); for(i=0;i<=1;i+)for(j=0;j<192;j+)if(winij = 5) /玩家获胜if(i=0) pwin = true;over = true;break;else /计算机获胜cwin = true;over = true;break;if(over)break;d

16、c.TextOut(85,400,"该您下了.");mdc1->SelectObject(bgbmp);mdc->BitBlt(0,0,400,400,mdc1,0,0,SRCCOPY);for(i=0;i<=9;i+)for(j=0;j<=9;j+)if(boardij = 0) /贴上玩家棋子mdc1->SelectObject(green);mdc->BitBlt(i*40+2,j*40+2,36,36,mdc1,0,0,SRCCOPY);if(boardij = 1) /贴上计算机棋子mdc1->SelectObject(purple);mdc->BitBlt(i*40+2,j*40+2,36,36,mdc1,0,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论