1、C+三字连珠报告C+课程设计报告( 2010 - 2011 年度第 二 学期)三子连珠游戏的设计与实现专业计算机学生姓名班级BM计算机092学号指导教师王 榕完成日期2011年 7月 7 日三子连珠游戏的设计与实现1 概 述 课程设计目的 1、巩固并加深学生对C+语言程序设计知识的理解; 2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别; 3、进一步掌握和应用VC+ 集成开发环境; 4、提高运用C+语言解决实际问题的能力; 5、初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的小系统; 6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)
2、。 课程设计内容课题名称:三子连珠游戏说明:模仿五子棋的形式,有一方三子连成一线即获胜。要求: 1)玩家可以设置棋盘的大小。 2)加入悔棋的功能,要求任一方可以在对方下棋后悔改一步,即将对方当前步和本方上一步删除,本方重新下棋。 2 系统需求分析 系统目标 该程序模仿五子棋的形式,有一方三子连成一线即获胜。 主体功能 两方下棋,系统设置为3*3格式,具有判断越界,判断合理性和判断平局能力,在输赢确定后输出总结信息。 开发环境 Microsoft Visual C+ 3 系统概要设计 系统的功能模块划分 (1)初始化棋盘模块(InitialBoard):此模块功能是按照代码所规定的变量n,使棋盘
3、成为n*n的大小,并把棋盘的主界面输出给操作者看。 (2)下棋模块(PlayTurn):这部分是对越界和合理性规则进行判断。越界是下棋超越规定的边界,合理性是下棋是否下到已存在棋子的位子。 (3)判断输赢模块(JudgePlay):此模块是对棋子是否连成一线规则进行判断。连成一线则赢棋。 (4)判断平局模块(GetFull):这部分是对棋盘是否布满棋子进行检查 (5)判断退出模块:这是一个不可缺少的重要模块,这个部分根据用户自己的意愿进行重新开始和不再开始的选择。三子连珠游戏系统初始化棋盘模块下棋模块判断输赢模块判断平局模块退出模块判断越界判断合理 图3-1系统主要功能模块 系统流程图输出总结
4、信息结束图3-2 系统流程图4系统详细设计初始化棋盘模块设计此模块功能是按照我所编写的代码中规定的变量nSize的值n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。 我首先定义了静态全局变量achBoard33,以及静态函数PrintBoard(void), 其次我定义了两个全局整型nSize=3和nDraw=0, 再次用嵌套FOR循环完成在achBoard33所有位子填入“ ”。在输出棋盘上就非常容易了,在函数PrintBoard(void)用输出流cout逐条逐句输出。 图4-1初始化棋盘下棋模块设计 首先定义静态函数PlayTurn(void) 其次定义两个整型nRow和nC
5、ol 用输出流cout输出提示:“请输入棋盘坐标(X,Y):” 用输入流cin输入:nRow nCol (1)当输入的nRownSize或者nColnSize时,判断为超出边界,直接重新输入(调用while(1),它作用为重新开始下棋)。 (2)若不满足以上条件,则判断achBoardnRow-1nCol-1是不是“ ”,若不是“ ”,则重新输入(调用while(1),否则在坐标处放上棋子。开始nSize=3输入nRow,nColnRownSize或者nColnSizeachBoardnRow-1nCol-1!= 在座标处放上棋子结束YNYN图4-2下棋流程图判断输赢模块根据以下情况判断表4-
6、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 & achBoard
7、22=chSortachBoard00=chSort & achBoard01=chSort & achBoard02=chSortachBoard10=chSort & achBoard11=chSort & achBoard12=chSortachBoard20=chSort & achBoard21=chSort & achBoard22=chSort不满足以上情况进入判断平局模块表4-3判断输赢情况判断平局模块 首先定义静态函数GetFull(void), 再次根据整型nSize为限用嵌套FOR循环来判断是否有“ ”。i=0i3J=0,j3,1=j+1achBoard00不是“ ”成立
8、则往下,否则需要再次放棋子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不是“ ”成立则棋盘放满
9、,平局,nDraw+1。.不成立则需要再次放入棋子J=3,j=33=i+1I=3I=3进入判断退出模块表4-3判断平局步骤InSizeNYJnSizeachBoardij!= J+YNYN平局另一方下棋模块和判断输赢模块图4-4判断平局流程图退出模块 首先定义字符串 strChoice,其次用输出流cout输出:“是否继续” 最后当用输入流输入的strChoice是“Y”或者“y”的时候,重新开始一局棋,否则输出总结信息。是否继续strChoice=“Y”或者“y”重新开始棋局不符合以上输出X 赢 nWin 输 nLose 平 nDraw输出O 赢 nWin 输 nLose 平 nDraw表4
10、-5判断退出情况图4-5判断退出N情况5 测试 测试方案输入各种正确或错误在数据,观察各种数据时程序反映在结果。 测试结果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棋盘方输入位子(正确):3 2图5-6输入3 2棋盘6X方输入位子(正确):2 2图5-7输入2 2棋盘7O方输入位子(正确):3 3图5-8输入3 3棋盘8X方输入位子(正确):2 1此时,系统判断出x方有三
11、子连成一线,x方胜利!并询问是否继续(Y/N) 图5-9输入2 1棋盘9.输入Y则重新开始图5-10输入Y棋盘6 小结首先感谢王蓉老师对我们的教导,她对我完成这个实验提供了很多意见和建议,让我受益匪浅。本次试验名为三子棋,其实验代码在类的定义和函数模块化方面非常值得学习,程序的功能分成几个模块,用各种定义参数传递,简显易懂。程序的模块和注释都很明确,方便以后修改,利于其他人的阅读理解。 参考文献1谭浩强.C程序设计(第三版)M.北京:清华大学出版社,2005. 2谭浩强.C程序设计题解与上机指导(第三版)M.北京:清华大学出版社,2005.附 录附录1 源程序清单#include #inclu
12、de using namespace std;class CGobang 1步输入要下棋的格子的x,y坐标,按Enter键n; cout t2.有1方首先3个棋子连成一线即判获胜n; cout t3.当棋子布满棋盘但仍无获胜方即为平局n; cout 方先行n; cout nntt请按任意键开始下棋!nn;int JudgePlay(CGobang & SideX,CGobang & SideO) /每下1步要进行输赢的判断,有结果则返回1 if() /X方获胜 (); (); return 1; else if() /O方获胜 (); (); return 1; else return 0;v
13、oid Play(CGobang & SideX,CGobang & SideO) /开始一局游戏 while(1) CGobang:PrintBoard(); /输出棋盘 (); /X方下棋 if(JudgePlay(SideX,SideO) /判断输赢 break; if(CGobang:GetFull() /判断是否平局 CGobang:Draw(); break; CGobang:PrintBoard(); /输出棋盘 (); /O方下棋 if(JudgePlay(SideX,SideO) /判断输赢 break; if(CGobang:GetFull() /判断是否平局 CGobang:Draw(); break; int main(void) CGobang SideX(X),SideO(O); /定义两个棋子类对象,分别代表X方与O方 PrintRule(); (); string strChoice; do CGobang:InitialBoard(); /初始化棋盘 Play(SideX,SideO); /开始下一局 cout strChoice; while(strChoice = Y | strChoice = y); (); (); cout nnt欢迎再次使用三子连珠游戏! endl endl; return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1