C++三字连珠报告.docx
- 文档编号:18856687
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:19
- 大小:197.43KB
C++三字连珠报告.docx
《C++三字连珠报告.docx》由会员分享,可在线阅读,更多相关《C++三字连珠报告.docx(19页珍藏版)》请在冰豆网上搜索。
C++三字连珠报告
C++课程设计报告
(2010--2011年度第二学期)
三子连珠游戏的设计与实现
专业
计算机
学生姓名
班级
BM计算机092
学号
指导教师
王榕
完成日期
2011年7月7日
三子连珠游戏的设计与实现
1概述
课程设计目的
1、巩固并加深学生对C++语言程序设计知识的理解;
2、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;
3、进一步掌握和应用VC++集成开发环境;
4、提高运用C++语言解决实际问题的能力;
5、初步掌握开发小型实用软件的基本方法,能独立设计、实现具有实际功能的小系统;
6、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。
课程设计内容
课题名称:
三子连珠游戏
说明:
模仿五子棋的形式,有一方三子连成一线即获胜。
要求:
1)玩家可以设置棋盘的大小。
2)加入悔棋的功能,要求任一方可以在对方下棋后悔改一步,即将对方当前步和本方上一步删除,本方重新下棋。
2系统需求分析
系统目标
该程序模仿五子棋的形式,有一方三子连成一线即获胜。
主体功能
两方下棋,系统设置为3*3格式,具有判断越界,判断合理性和判断平局能力,在输赢确定后输出总结信息。
开发环境
MicrosoftVisualC++
3系统概要设计
系统的功能模块划分
(1)初始化棋盘模块(InitialBoard):
此模块功能是按照代码所规定的变量n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。
(2)下棋模块(PlayTurn):
这部分是对越界和合理性规则进行判断。
越界是下棋超越规定的边界,合理性是下棋是否下到已存在棋子的位子。
(3)判断输赢模块(JudgePlay):
此模块是对棋子是否连成一线规则进行判断。
连成一线则赢棋。
(4)判断平局模块(GetFull):
这部分是对棋盘是否布满棋子进行检查
(5)判断退出模块:
这是一个不可缺少的重要模块,这个部分根据用户自己的意愿进行重新开始和不再开始的选择。
三子连珠游戏系统
初始化棋盘模块
下棋模块
判断输赢模块
判断平局模块
退出模块
判断越界
判断合理
图3-1系统主要功能模块
系统流程图
输出总结信息
结束
图3-2系统流程图
4系统详细设计
初始化棋盘模块设计
此模块功能是按照我所编写的代码中规定的变量nSize的值n,使棋盘成为n*n的大小,并把棋盘的主界面输出给操作者看。
我首先定义了静态全局变量achBoard[3][3],以及静态函数PrintBoard(void),
其次我定义了两个全局整型nSize=3和nDraw=0,
再次用嵌套FOR循环完成在achBoard[3][3]所有位子填入“”。
④在输出棋盘上就非常容易了,在函数PrintBoard(void)用输出流cout逐条逐句输出。
图4-1初始化棋盘
下棋模块设计
①首先定义静态函数PlayTurn(void)
②其次定义两个整型nRow和nCol
③用输出流cout输出提示:
“请输入棋盘坐标(X,Y):
”
④用输入流cin输入:
nRownCol
⑤
(1)当输入的nRow>nSize或者nCol>nSize时,判断为超出边界,直接重新输入(调用while
(1),它作用为重新开始下棋)。
(2)若不满足以上条件,则判断achBoard[nRow-1][nCol-1]是不是“”,若不是“”,则重新输入(调用while
(1)),否则在坐标处放上棋子。
开始
nSize=3
输入nRow,nCol
nRow>nSize或者nCol>nSize
achBoard[nRow-1][nCol-1]!
=''
在座标处放上棋子
结束
Y
N
Y
N
图4-2下棋流程图
判断输赢模块
根据以下情况判断
表4-1
achBoard[0][0]==chSort&&achBoard[1][1]==chSort&&achBoard[2][2]==chSort
赢棋
①赢的一方nWin+1
②输的一方
nLose+1
achBoard[2][0]==chSort&&achBoard[1][1]==chSort&&achBoard[0][2]==chSort
achBoard[0][0]==chSort&&achBoard[1][0]==chSort&&achBoard[2][0]==chSort
achBoard[0][1]==chSort&&achBoard[1][1]==chSort&&achBoard[2][1]==chSort
achBoard[0][2]==chSort&&achBoard[1][2]==chSort&&achBoard[2][2]==chSort
achBoard[0][0]==chSort&&achBoard[0][1]==chSort&&achBoard[0][2]==chSort
achBoard[1][0]==chSort&&achBoard[1][1]==chSort&&achBoard[1][2]==chSort
achBoard[2][0]==chSort&&achBoard[2][1]==chSort&&achBoard[2][2]==chSort
不满足以上情况
进入判断平局模块
表4-3判断输赢情况
判断平局模块
首先定义静态函数GetFull(void),
再次根据整型nSize为限用嵌套FOR循环来判断是否有“”。
i=0
i<3
J=0,j<3,1=j+1
achBoard[0][0]不是“”
成立则往下,否则需要再次放棋子
J=1,j<3,2=j+1
achBoard[0][1]不是“”
J=2,j<3,3=j+1
achBoard[0][2]不是“”
J=3,j=3
1=i+1
I=1
I<3
J=0,j<3,1=j+1
achBoard[1][0]不是“”
成立则往下,否则需要再次放棋子
J=1,j<3,2=j+1
achBoard[1][1不是“”
J=2,j<3,2=j+1
achBoard[1][2]不是“”
J=3,j=3
2=i+1
I=2
I<3
J=0,j<3,2=j+1
achBoard[2][0]不是“”
成立则往下,否则需要再次放棋子
J=1,j<3,2=j+1
achBoard[2][1]不是“”
J=2,j<3,2=j+1
achBoard[2][2]不是“”
成立则棋盘放满,平局,nDraw+1。
.
不成立则需要再次放入棋子
J=3,j=3
3=i+1
I=3
I=3
进入判断退出模块
表4-3判断平局步骤
I N Y J achBoard[i][j]! ="" J++ Y N Y N 平局 另一方下棋模块和判断输赢模块 图4-4判断平局流程图 退出模块 首先定义字符串strChoice,其次用输出流cout输出: “是否继续” 最后当用输入流输入的strChoice是“Y”或者“y”的时候,重新开始一局棋,否则输出总结信息。 是否继续 strChoice=“Y”或者“y” 重新开始棋局 不符合以上 输出X赢nWin输nLose平nDraw 输出O赢nWin输nLose平nDraw 表4-5判断退出情况 图4-5判断退出N情况 5测试 测试方案 输入各种正确或错误在数据,观察各种数据时程序反映在结果。 测试结果 1.初始化棋盘: x方下棋,请输入 图5-2初始化棋盘 2.输入棋子位子(正确的): 23 图5-3输入23棋盘 3.输入xy位子(错误――越界): 34 图5-4输入34棋盘 4.输入xy位子(错误――重复,不合理,此处已有棋子): 23 (当棋盘满了后,情景与这里一样) 图5-5输入23棋盘 方输入位子(正确): 32 图5-6输入32棋盘 6.X方输入位子(正确): 22 图5-7输入22棋盘 7.O方输入位子(正确): 33 图5-8输入33棋盘 8.X方输入位子(正确): 21 此时,系统判断出x方有三子连成一线,x方胜利! 并询问是否继续(Y/N) 图5-9输入21棋盘 9.输入Y则重新开始 图5-10输入Y棋盘 6小结 首先感谢王蓉老师对我们的教导,她对我完成这个实验提供了很多意见和建议,让我受益匪浅。 本次试验名为三子棋,其实验代码在类的定义和函数模块化方面非常值得学习,程序的功能分成几个模块,用各种定义参数传递,简显易懂。 程序的模块和注释都很明确,方便以后修改,利于其他人的阅读理解。 参考文献 [1]谭浩强.C程序设计(第三版)[M].北京: 清华大学出版社,2005. [2]谭浩强.C程序设计题解与上机指导(第三版)[M].北京: 清华大学出版社,2005. 附录 附录1源程序清单 #include #include usingnamespacestd; classCGobang1步输入要下棋的格子的x,y坐标,按Enter键\n"; cout<<"\t2.有1方首先3个棋子连成一线即判获胜\n"; cout<<"\t3.当棋子布满棋盘但仍无获胜方即为平局\n"; cout<<"\方先行\n"; cout<<"\n\n\t\t请按任意键开始下棋! \n\n"; } intJudgePlay(CGobang&SideX,CGobang&SideO)//每下1步要进行输赢的判断,有结果则返回1 { if())//X方获胜 { (); (); return1; } elseif())//O方获胜 { (); (); return1; } else return0; } voidPlay(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; } } } intmain(void) { CGobangSideX('X'),SideO('O');//定义两个棋子类对象,分别代表X方与O方 PrintRule(); (); stringstrChoice; do { CGobang: : InitialBoard();//初始化棋盘 Play(SideX,SideO);//开始下一局 cout<<"是否继续(Y/N)"; cin>>strChoice; }while(strChoice=="Y"||strChoice=="y"); (); (); cout<<"\n\n\t欢迎再次使用三子连珠游戏! "< return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 连珠 报告