五子棋游戏课程设计报告

上传人:1777****777 文档编号:38827529 上传时间:2021-11-09 格式:DOC 页数:14 大小:502.50KB
返回 下载 相关 举报
五子棋游戏课程设计报告_第1页
第1页 / 共14页
五子棋游戏课程设计报告_第2页
第2页 / 共14页
五子棋游戏课程设计报告_第3页
第3页 / 共14页
点击查看更多>>
资源描述
I 目录第一章第一章 需求分析需求分析.1 11.1 总体分析 .11.2 初始化 .11.3 主循环控制模块 .11.4 玩家下子 .11.5 盘面分析填写棋型表 .21.6 对方下子 .21.7 胜负判断 .2第二章第二章 功能描述功能描述.3 32.1 功能模块图 .32.2 功能说明 .3第三章第三章 系统设计系统设计.4 43.1 流程图 .43.2 流程图说明 .5第四章第四章 运行结果运行结果.6 6第五章第五章 总结总结.8 8第六章第六章 致谢致谢.9 9附录一附录一 参考文献参考文献.1010附录二附录二 源代码源代码.1111课程设计综合课程设计1五子棋游戏第一章 需求分析1.1 总体分析软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个 15*15 的二维数组 Table1515(15*15 是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用0表示空位、 1代表己方的子、 2代表对方的子;这张表也是今后分析的基础。在此之后还要为两个玩家双方各建立一张棋型表 Computer15154和 Player15154,用来存放棋型数据。1.2 初始化首先,建立盘面数组 Table1515、对战双方的棋型表 Computer15154和 Player15154并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘(棋盘可以不显示) 。 1.3 主循环控制模块控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。1.4 玩家下子当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在 Table1515数组的相应地方记录2 ,以表明该子是玩家下的。课程设计综合课程设计21.5 盘面分析填写棋型表您在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三” 、 “冲四”等;然后再在其中选择落子点。先来分析己方的棋型,我们从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到 Computerxyn中就行了(x、y 代表坐标,n=0、1、2、3 分别代表横、竖、左斜、右斜四个方向) 。而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同样的方法填写对方棋型表。注意:所有棋型的编号都要事先 定义好,越重要的号数越大! 1.6 对方下子有了上面填写的两张棋型表,就是遍历棋型表 Computer15154和Player15154找出其中数值最大的一点,在该点下子即可。但这种算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”的毛病。 如果在这儿下子将会形成对手不得不防守的棋型(例如:冲四 、 活三 ) ;那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测。这时再调用模块 4 对预测后的棋进行盘面分析,如果出现了四三 、双三或双四等制胜点,那么己方就可以获胜了(当然对黑棋而言双三 、双四是禁手,另当别论) ;否则照同样的方法向下分析,就可预测出第二步、第三步等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢?进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能待机发动反击,何乐而不为呢!1.7 胜负判断务须多言,某方形成五子连即获胜;若黑棋走出双三 、 双四或长连即以禁手判负。课程设计综合课程设计3第二章 功能描述2.1 功能模块图五五子子棋棋游游戏戏判判断断棋棋盘盘是是否否已已满满判判断断是是否否出出错错并并提提示示判判断断那那方方获获胜胜交交替替循循环环双双方方下下棋棋图 2.1 功能模块图2.2 功能说明该五子棋程序基本上实现了五子棋的游戏功能,有双方下棋的界面及最终判定结果的界面。同时该游戏采用二维坐标实现,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。在细节方面,该系统提供实时存储功能,随时记录为完成的游戏,使用户可以很好的处理意外中断的情况。该游戏基本实现了游戏的一些要求和特征。在游戏的源程序及文档方面,我们也严格遵守软件工程思想,立足实验要求,确定任务,需求分析,设计和编码,每个步骤力求清晰易懂。原代码注释详尽,各功能模块功能分明,可移植性强。当然该系统也有很多不足的地方,第一次进行独立的课程设计,也有很多细节方面是考虑到的,这款游戏也是在不断的调试和修改中产生和完善的。希望老师能够指出不足,帮助我不断提高。课程设计综合课程设计4第三章 系统设计3.1 流程图开开始始棋棋盘盘已已满满否否“0”方方选选位位置置判判断断该该位位置置是是否否有有棋棋“0”方方落落子子判判断断“0”方方是是否否获获胜胜棋棋盘盘已已满满“x”方方选选位位置置判判断断该该位位置置是是否否有有棋棋“x”方方落落子子判判断断“x”方方是是否否获获胜胜输输出出平平局局另另找找位位置置输输出出“0”方方获获胜胜输输出出平平局局另另找找位位置置结结束束无无否否否否无无否否是是有有是是是是有有是是输输出出“x”方方获获胜胜课程设计综合课程设计5图 3.1 流程图3.2 流程图说明本程序定义了各种操作函数、各种状态判定宏,思想明确,思路清晰。各个判断选择了不同路径,因此继续进行或输出结果。程序中, “循环”的利用非常直接和清晰,双方交替下棋,因此循环往复。最终决出胜负或最终平局。分析时,也考虑了许多种情况,针对各个情况均作出了相对措施和解决方案。程序采用循环进行双方交替下棋,并进行了很多判断。首先判断棋盘是否已满,若棋盘已满,则输出平局,结束游戏;若棋盘未满,则继续进行。然后判断“0”方是否胜出,若“0”方获胜,则输出“0”方获胜,结束游戏;若“0”方没有获胜,则继续进行。再判断“x”方是否获胜,若“x”方获胜,则输出“x”方获胜,结束游戏;若“x”方没有获胜,则继续进行。回到“首先”的判断。如此循环课程设计综合课程设计6第四章 运行结果图 4.1 运行结果初始图图 4.2 游戏过程图课程设计综合课程设计7图 4.3 游戏进行图图 4.4 “0”方获胜图课程设计综合课程设计8第五章 总结第六章 致谢附录一 参考文献1严蔚敏,吴伟民.数据结构.北京:清华大学出版社,2010 年2苏仕华,魏韦巍,王敬生,刘燕君.数据结构课程设计(第二版).北京:机械工业出版社,2010 年课程设计综合课程设计93谭浩强.C 程序设计(第二版).北京:清华大学出版社,1999 年4谭浩强.C+程序设计.北京:清华大学出版社,2009 年附录二 源代码#include using namespace std; int Hsheng(char a15);/判断 o 子是否获胜的函数 int Bsheng(char a15);课程设计综合课程设计10/判断 x 子是否获胜的函数 int he(char a15);/判断是否平局(也就是棋盘下满了)的函数 void qipan(char a1515)/执行输出棋盘命令 cout本游戏采用二维数组实现,棋盘为 15X15 的二维直角坐标系,均从 1 到 15,祝二位游戏愉快.; for(int i=0;i15;i+)/打印棋盘 for(int j=0;j15;j+) coutaij; coutendl; int main() char a1515; int x,y; for(int i=0;i15;i+) for(int j=0;j15;j+) aij= ; qipan(a); while(1)/用循环语句执行 o,x 交替下子,这些 while 语句看起来似乎是个死循环实际上都会经过 break 结束 int a1=1; while(1) for(;a1;) coutxy; if(axy=o|axy=x)/判断是否已有子 cout已有子请重下=15|y=15)cout输入错误请重输,;continue; else axy=o; a1=0; break; 课程设计综合课程设计11qipan(a);/下好 o 子后将棋盘显示 if(Hsheng(a)/判断 o 子是否已经获胜 couto 子获胜endl; break; while(1)/下 x 子 coutxy; if(axy=o|axy=x|x=15|y=15) for( ; axy=o|axy=x; ) cout已有子请重下; coutxy;continue; for ( ; x=15|y=15|x; ) cout输入错误请重输,; /判断输入棋子位置是否正确 coutxy;continue ; axy=x;break; else axy=x; break; qipan(a);/再一次输出棋盘 if(Bsheng(a)/判断 x 子是否已经获胜 coutx 子获胜endl; break; if(he(a)/判断是否平局 cout平局endl; break; return 0; int Hsheng(char a15) int i,j;课程设计综合课程设计12/判断横着的 5 个是否都相等 for(i=0;i15;i+) for(j=0;j15;j+) if(aij=o&aij+1=o&aij+2=o&aij+3=o&aij+4=o) return 1; for(j=0;j15;j+)/判断竖着的 5 个是否都相等 for(i=0;i15;i+) if(aij=o&ai+1j=o&ai+2j=o&ai+3j=o&ai+4j=o) return 1; for(i=0;i15;i+)/判断左斜 5 个 for(j=0;j15;j+) if(aij=o&ai+1j+1=o&ai+2j+2=o&ai+3j+3=o&ai+4j+4=o) return 1; for(i=0;i3;j-) if(aij=H&ai+1j-1=o&ai+2j-2=o&ai+3j-3=o&ai+4j-4=o) return 1; return 0; int Bsheng(char a15)/同 o,只是改字符 int i,j; for(i=0;i15;i+) for(j=0;j15;j+) if(aij=x&aij+1=x&aij+2=x&aij+3=x&aij+4=x) return 1; for(j=0;j15;j+) for(i=0;i15;i+) if(aij=x&ai+1j=x&ai+2j=x&ai+3j=x&ai+4j=x) return 1; for(i=0;i15;i+) for(j=0;j15;j+) if(aij=x&ai+1j+1=x&ai+2j+2=x&ai+3j+3=x&ai+4j+4=x) return 1; for(i=0;i3;j-) if(aij=x&ai+1j-1=x&ai+2j-2=x&ai+3j-3=x&ai+4j-4=x) return 1; return 0; 课程设计综合课程设计13int he(char a15) for(int i=0;i15;i+) for(int j=0;j15;j+) if(aij= )/当棋盘全部子都不是 时才能 return 1,即棋盘已下满 return 0; return 1;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 任务书类


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!