




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C+课程设计报告( 2010 - 2011 年度第 二 学期)三子连珠游戏的设计与实现专业计算机学生姓名班级BM计算机092学号指导教师王 榕完成日期2011年 7月 7 日目 录1 概 述11.1 课程设计目的11.2 课程设计内容12 系统需求分析12.1 系统目标12.2 主体功能12.3 开发环境13 系统概要设计13.1 系统的功能模块划分13.2 系统流程图24系统详细设计44.1初始化棋盘模块设计44.2下棋模块设计44.3判断输赢模块54.4判断平局模块64.5退出模块85 测试85.1 测试方案85.2 测试结果86 小结13参考文献14附 录15附录1 源程序清单15三子连珠游戏的设计与实现1 概 述 1.1 课程设计目的 1、巩固并加深学生对C+语言程序设计知识的理解; 2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别; 3、进一步掌握和应用VC+ 6.0集成开发环境; 4、提高运用C+语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的小系统; 6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。1.2 课程设计内容课题名称:三子连珠游戏说明:模仿五子棋的形式,有一方三子连成一线即获胜。要求: 1)玩家可以设置棋盘的大小。 2)加入悔棋的功能,要求任一方可以在对方下棋后悔改一步,即将对方当前步和本方上一步删除,本方重新下棋。 2 系统需求分析2.1 系统目标 该程序模仿五子棋的形式,有一方三子连成一线即获胜。2.2 主体功能 两方下棋,系统设置为3*3格式,具有判断越界,判断合理性和判断平局能力,在输赢确定后输出总结信息。 2.3 开发环境 Microsoft Visual C+ 6.03 系统概要设计3.1 系统的功能模块划分 (1)初始化棋盘模块(InitialBoard):此模块功能是按照代码所规定的变量n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。 (2)下棋模块(PlayTurn):这部分是对越界和合理性规则进行判断。越界是下棋超越规定的边界,合理性是下棋是否下到已存在棋子的位子。 (3)判断输赢模块(JudgePlay):此模块是对棋子是否连成一线规则进行判断。连成一线则赢棋。 (4)判断平局模块(GetFull):这部分是对棋盘是否布满棋子进行检查 (5)判断退出模块:这是一个不可缺少的重要模块,这个部分根据用户自己的意愿进行重新开始和不再开始的选择。三子连珠游戏系统初始化棋盘模块退出模块判断平局模块判断输赢模块下棋模块判断越界判断合理 图3-1系统主要功能模块3.2 系统流程图开始初始化棋盘X方输入棋子位子是否越界是否合理是否连成一线X方获胜是否满了YNYNNYNYO方输入棋子位子是否越界YN是否合理NY是否连成一线NY是否满了NYO方获胜是否继续NY输出总结信息结束图3-2 系统流程图4系统详细设计4.1初始化棋盘模块设计此模块功能是按照我所编写的代码中规定的变量nSize的值n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。 我首先定义了静态全局变量achBoard33,以及静态函数PrintBoard(void), 其次我定义了两个全局整型nSize=3和nDraw=0, 再次用嵌套FOR循环完成在achBoard33所有位子填入“ ”。在输出棋盘上就非常容易了,在函数PrintBoard(void)用输出流cout逐条逐句输出。 图4-1初始化棋盘4.2下棋模块设计 首先定义静态函数PlayTurn(void) 其次定义两个整型nRow和nCol 用输出流cout输出提示:“请输入棋盘坐标(X,Y):” 用输入流cin输入:nRow nCol (1)当输入的nRownSize或者nColnSize时,判断为超出边界,直接重新输入(调用while(1),它作用为重新开始下棋)。 (2)若不满足以上条件,则判断achBoardnRow-1nCol-1是不是“ ”,若不是“ ”,则重新输入(调用while(1),否则在坐标处放上棋子。开始nSize=3输入nRow,nColnRownSize或者nColnSizeNYNYachBoardnRow-1nCol-1!= 在座标处放上棋子结束图4-2下棋流程图4.3判断输赢模块根据以下情况判断表4-1achBoard00=chSort & achBoard11=chSort & achBoard22=chSort赢棋赢的一方nWin+1输的一方nLose+1achBoard20=chSort & achBoard11=chSort & achBoard02=chSortachBoard00=chSort & achBoard10=chSort & achBoard20=chSortachBoard01=chSort & achBoard11=chSort & achBoard21=chSortachBoard02=chSort & achBoard12=chSort & achBoard22=chSortachBoard00=chSort & achBoard01=chSort & achBoard02=chSortachBoard10=chSort & achBoard11=chSort & achBoard12=chSortachBoard20=chSort & achBoard21=chSort & achBoard22=chSort不满足以上情况进入判断平局模块表4-3判断输赢情况4.4判断平局模块 首先定义静态函数GetFull(void), 再次根据整型nSize为限用嵌套FOR循环来判断是否有“ ”。i=0i3J=0,j3,1=j+1achBoard00不是“ ”成立则往下,否则需要再次放棋子J=1,j3,2=j+1achBoard01不是“ ”J=2,j3,3=j+1achBoard02不是“ ”J=3,j=31=i+1I=1I3J=0,j3,1=j+1achBoard10不是“ ”成立则往下,否则需要再次放棋子J=1,j3,2=j+1achBoard11不是“ ”J=2,j3,2=j+1achBoard12不是“ ”J=3,j=32=i+1I=2I3J=0,j3,2=j+1achBoard20不是“ ”成立则往下,否则需要再次放棋子J=1,j3,2=j+1achBoard21不是“ ”J=2,j3,2=j+1achBoard22不是“ ”成立则棋盘放满,平局,nDraw+1。.不成立则需要再次放入棋子J=3,j=33=i+1I=3I=3进入判断退出模块表4-3判断平局步骤开始nSize=3I=0J=0NInSizeYNJnSizeYachBoardij!= NY另一方下棋模块和判断输赢模块J+平局结束图4-4判断平局流程图4.5退出模块 首先定义字符串 strChoice,其次用输出流cout输出:“是否继续?” 最后当用输入流输入的strChoice是“Y”或者“y”的时候,重新开始一局棋,否则输出总结信息。是否继续?strChoice=“Y”或者“y”重新开始棋局不符合以上输出X 赢 nWin 输 nLose 平 nDraw输出O 赢 nWin 输 nLose 平 nDraw表4-5判断退出情况图4-5判断退出N情况5 测试5.1 测试方案输入各种正确或错误在数据,观察各种数据时程序反映在结果。5.2 测试结果1初始化棋盘:x方下棋,请输入图5-2初始化棋盘2输入棋子位子(正确的):2 3图5-3输入2 3棋盘3输入x y位子(错误越界):3 4图5-4输入3 4棋盘4输入x y位子(错误重复,不合理,此处已有棋子):2 3(当棋盘满了后,情景与这里一样)图5-5输入2 3棋盘5.O方输入位子(正确):3 2图5-6输入3 2棋盘6X方输入位子(正确):2 2图5-7输入2 2棋盘7O方输入位子(正确):3 3图5-8输入3 3棋盘8X方输入位子(正确):2 1此时,系统判断出x方有三子连成一线,x方胜利!并询问是否继续?(Y/N)? 图5-9输入2 1棋盘9.输入Y则重新开始图5-10输入Y棋盘6 小结首先感谢王蓉老师对我们的教导,她对我完成这个实验提供了很多意见和建议,让我受益匪浅。本次试验名为三子棋,其实验代码在类的定义和函数模块化方面非常值得学习,程序的功能分成几个模块,用各种定义参数传递,简显易懂。程序的模块和注释都很明确,方便以后修改,利于其他人的阅读理解。 参考文献1谭浩强.C程序设计(第三版)M.北京:清华大学出版社,2005. 2谭浩强.C程序设计题解与上机指导(第三版)M.北京:清华大学出版社,2005.附 录附录1 源程序清单#include #include using namespace std;class CGobang /棋子类private: char chSort; /棋子的类别 int nWin; /赢棋的次数 int nLose; /输棋的次数 static int nDraw; /平局次数 static char achBoard33; /棋盘 static int nSize; /棋盘的尺寸 nSize X nSizepublic: CGobang(char chsort) /构造函数,决定一方棋子的类别 chSort=chsort; nWin=nLose=nDraw=0; void PlayTurn(void); /走1步棋 int Judge(); /判断是否连成一线,是则返回1,否则返回0 void Win(void); /赢棋 void Lose(void); /输棋 static void Draw(void); /平局 void PrintInfo(void); /输出总体情况 static void PrintBoard(void); /输出棋盘 static int GetFull(void); /判断棋盘是否已布满棋子 static void InitialBoard(void); /初始化棋盘;char CGobang:achBoard33;int CGobang:nSize = 3;int CGobang:nDraw = 0;void CGobang:Draw() cout nntt平局!nn; nDraw+;void CGobang:InitialBoard() /初始化棋盘 for(int i=0;inSize;i+) for(int j=0;jnSize;j+) achBoardij= ;void CGobang:PrintBoard() /输出棋盘 cout endl; cout 1 2 3 endl; cout 1 achBoard00 | achBoard01 | achBoard02 endl; cout -|-|- endl; cout 2 achBoard10 | achBoard11 | achBoard12 endl; cout -|-|- endl; cout 3 achBoard20 | achBoard21 | achBoard22 endl; cout endl; cout endl;int CGobang:GetFull() /判断棋盘是否布满棋子,若是返回1 for(int i=0;inSize;i+) for(int j=0;jnSize;j+) if(achBoardij!= ) return 0; return 1;void CGobang:Win() /赢棋 cout nnttchSort方获胜!nn; nWin+;void CGobang:Lose() /输棋 nLose+;void CGobang:PlayTurn(void) /走1步棋 int nRow,nCol; cout 现在该 chSort nRow nCol; /输入坐标 if(nRownSize | nColnSize) /判断坐标越界 cout 输入的坐标越界,x与y的范围应小于等于nSize,请重新输入n; else if(achBoardnRow-1nCol-1!= ) /判断坐标合理 cout 棋盘(nRow ,nCol )处已有棋子,请重新输入n; else achBoardnRow-1nCol-1=chSort; /在坐标处放上棋子 break; /退出循环 while(1);int CGobang:Judge() /判断是否棋子连成一线,若是返回1/以下是各种可能连成一线的情况 if(achBoard00=chSort & achBoard11=chSort & achBoard22=chSort) return 1; else if(achBoard20=chSort & achBoard11=chSort & achBoard02=chSort) return 1; else if(achBoard00=chSort & achBoard10=chSort & achBoard20=chSort) return 1; else if(achBoard01=chSort & achBoard11=chSort & achBoard21=chSort) return 1; else if(achBoard02=chSort & achBoard12=chSort & achBoard22=chSort) return 1; else if(achBoard00=chSort & achBoard01=chSort & achBoard02=chSort) return 1; else if(achBoard10=chSort & achBoard11=chSort & achBoard12=chSort) return 1; else if(achBoard20=chSort & achBoard21=chSort & achBoard22=chSort) return 1; else return 0; /没有连成一线则返回0void CGobang:PrintInfo(void) /打印总体情况 cout Side chSort方共计赢 nWin 局,输 nLose 局,平 nDraw 局。endl;void PrintRule(void) /打印规则 cout tt欢迎使用三子连珠游戏! endl endl; cout t游戏规则: endl; cout t1.每1步输入要下棋的格子的x,y坐标,按Enter键n; cout t2.有1方首先3个棋子连成一线即判获胜n; cout t3.当棋子布满棋盘但仍无获胜方即为平局n; cout t4.X方先行n; cout nntt请按任意键开始下棋!nn;int JudgePlay(CGobang & SideX,CGobang & SideO) /每下1步要进行输赢的判断,有结果则返回1 if(SideX.Judge() /X方获胜 SideX.Win(); SideO.Lose(); return 1; else if(SideO.Judge()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州省黔东南苗族侗族自治州2026届九上化学期中教学质量检测试题含解析
- 急诊科护士年度个人工作总结
- 2026届河北省唐山市路北区九年级英语第一学期期末达标检测试题含解析
- 辽宁省灯塔市2026届化学九年级第一学期期中教学质量检测模拟试题含解析
- 变电站值班员试题库含答案(50题)
- 百年风华-《在灿烂的阳光下》+课件+2025-2026学年人音版(简谱)(2024)初中音乐八年级上册
- 广东省阳江市2026届九年级化学第一学期期中检测试题含解析
- 2026届陕西省定边县联考化学九上期中达标检测模拟试题含解析
- 主题公园租赁合同租客娱乐体验服务协议
- 离婚协议书无子女抚养权明确及财产分配标准范本
- 应聘家教兼职简历
- 慢阻肺的健康教育讲座
- 光伏电站安全风险辨识及风险库管理制度
- 铁路机车防火安全教育
- 企业内训师培养与培训课程设计
- 网架防腐刷漆施工方案
- 《采矿方法的选择案例综述》1700字
- 新冀教版二年级数学上册教学计划与课程标准对接
- (完整版)《珠心算口诀表》
- 微粒贷逾期立案通知函
- 【课件】校园心理危机干预理论与技巧
评论
0/150
提交评论