c++五子棋毕业课程设计报告.docx
- 文档编号:3754391
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:25
- 大小:220.74KB
c++五子棋毕业课程设计报告.docx
《c++五子棋毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《c++五子棋毕业课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
c++五子棋毕业课程设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
福建农林大学计算机与信息学院
课程设计报告
课程名称:
面向对象程序设计课程设计
课程设计题目:
五子棋
姓名:
系:
计算机
专业:
软件工程
年级:
学号:
指导教师:
职称:
年月日
福建农林大学计算机与信息学院计算机类
课程设计报告结果评定
评语:
评分项目
分值
得分
课程设计报告符合规范
10分
类图、用例图、系统框图合理
30分
主要技术线路正确
30分
设计报告条理清晰、重点突出
20分
有一定创新性、难易程度
10分
成绩:
指导教师签字:
任务下达日期:
12月6日
评定日期:
目录
1.设计目的.................................................................4
2.设计要求................................................................4
3.设计方案................................................................4
4.设计内容................................................................7
4.1系统的主要结构和类结构..................................................7
4.2
(2)五子棋类的结构.......................................................7
4.3⑶系统工作流程介绍....................................................7
4.4⑷类的介绍.............................................................8
4.5(5)各个模块的介绍......................................................8
4.6(6)程序运行图示........................................................14
5.总结.....................................................................16
参考文献...................................................................17
(a)1.设计目的
(1)加深我对面向对象程序基本的理解和掌握。
(2)熟练掌握基本流程图的绘制。
(3)熟练visio的一些操作方法。
(4)能够在调试程序中快速发现并排除程序中的错误。
(5)提高面向对象程序语言解决实际中的问题的能力。
(b)2.设计要求
五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。
通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。
编写代码可以在VC6.0下编译通过。
游戏要能实现五子棋游戏的简单操作。
程序中要体现面向对象思想。
(c)3.设计方案
(必须包含系统功能说明、用例图和类图)
一、用例图
落子
基于用户的用例图
步数用例图
系统用例图
1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面
二、类图
(d)4.设计内容
⑴本系统的主要结构和类结构
1)五子棋功能实现的主要结构函数
voidgetpointxy();白棋出子函数
voidgetpointmn();黑棋出子函数
voidshowqipan();实现20行20列正方形界面输出
voidprint();输出下一棋盘界面及计数
boolIsxyWin();白棋获胜
boolIsmnWin();黑棋获胜
voidmenu();显示开始菜单界面
(2)五子棋类的结构
classfive
{
intx,y,m,n,num_xy,num_mn;
charqipan[20][20];定义20行20列的数组
public:
five(intX=0,intY=0,intM=0,intN=0,intNum_xy=0,intNum_mn=0)构造函数初始化
{
x=X;
y=Y;
m=M;
n=N;
num_xy=Num_xy;
num_mn=Num_mn;
for(inti=0;i<20;i++)输出20行20列的棋盘界面
{
for(intj=0;j<20;j++)
qipan[i][j]='.';
}
}
⑶系统工作流程介绍。
⑷类的介绍:
该类完成了对输入棋子坐标的初始化,通过for循环实现了一个20行20列的坐标,在公有成员中定义了相应的功能函数
voidgetpointxy();白棋出子及计数
voidgetpointmn();黑棋出子及计数
voidshowqipan();实现20行20列正方形界面输出
voidprint();输出下一棋盘界面
boolIsxyWin();白棋获胜
boolIsmnWin();黑棋获胜
voidmenu();显示开始菜单界面
(5)各个模块的介绍:
1)类的实现:
包括对数据成员的赋值和成员函数的初始化还有通过for循环实现对20行20列坐标的定义:
源代码如下
classfive
{
intx,y,m,n,num_xy,num_mn;
charqipan[20][20];定义20行20列的数组
public:
five(intX=0,intY=0,intM=0,intN=0,intNum_xy=0,intNum_mn=0)构造函数初始化
{x=X;
y=Y;
m=M;
n=N;
num_xy=Num_xy;
num_mn=Num_mn;
for(inti=0;i<20;i++)输出20行20列的棋盘界面
{for(intj=0;j<20;j++)qipan[i][j]='.';}
}
voidgetpointxy();白棋出子及计数
voidgetpointmn();黑棋出子及计数
voidshowqipan();实现20行20列正方形界面输出
voidprint();输出下一棋盘界面
boolIsxyWin();白棋获胜
boolIsmnWin();黑棋获胜
voidmenu();显示开始菜单界面
};
2)白棋和黑棋落子情况的判断的实现,源代码如下:
voidfive:
:
getpointxy()判断白棋出子情况及对其计数
{std:
:
cout<<"请分别输入第"< "; std: : cin>>y>>x; if(! (1<=x&&x<=20&&1<=y&&y<=20)) {std: : cout<<"输入错误,请重新输入: "< getpointxy(); } elseif(qipan[y-1][x-1]! ='.') {std: : cout<<"请所下的位置已经有棋子,请重新输入: "< getpointxy(); } elseif(num_xy+num_mn>=400) {std: : cout<<"棋盘已满,平局! "< exit(0); } else {qipan[y-1][x-1]='O'; num_xy++; } } voidfive: : getpointmn()判断黑棋出子情况及对其计数 {std: : cout<<"请分别输入第"< "; std: : cin>>n>>m; if(! (1<=m&&m<=20&&1<=n&&n<=20)) {std: : cout<<"输入错误,请重新输入: "< getpointmn(); } elseif(qipan[n-1][m-1]! ='.') {std: : cout<<"请所下的位置已经有棋子,请重新输入: "< getpointmn(); } elseif(num_xy+num_mn>=400) {std: : cout<<"棋盘已满,平局! "< exit(0); } else {qipan[n-1][m-1]='*'; num_mn++; } } 3)菜单界面模块 voidfive: : menu()进入菜单界面 {char*q=newchar[9]; cin>>q; if(strcmp(q,"c")) five: : showqipan(); } 4)输出模块 voidfive: : showqipan()输出20行20列的坐标数值 {intp=0,q=0; for(inti=0;i<=20;i++) {if(p<10) {std: : cout< else std: : cout< p++; } cout< for(i=0;i<20;i++) {if(i>=0) {q++; if(q<10)std: : cout< elsestd: : cout< } for(intj=0;j<20;j++)std: : cout< std: : cout< } } voidfive: : print() {intp=0,q=0; for(inti=0;i<=20;i++) {if(p<10) {std: : cout< elsestd: : cout< p++; } std: : cout< for(i=0;i<20;i++) {if(i>=0) {q++; if(q<10)std: : cout< elsestd: : cout< } for(intj=0;j<20;j++) {std: : cout< std: : cout< } } 5)黑白棋输赢的判断,其源代码如下: boolfive: : IsxyWin()白棋获胜实现函数 {intnum1=1,num2=1,num3=1,num4=1; for(inti=x;i {if(qipan[y-1][i]! ='O')break; if(qipan[y-1][i]=='O')num1++; } for(i=x-2;i>=0;i--) {if(qipan[y-1][i]! ='O')break; if(qipan[y-1][i]=='O')num1++; } for(i=y;i {if(qipan[i][x-1]! ='O')break; if(qipan[i][x-1]=='O')num2++; } for(i=y-2;i>=0;i--) {if(qipan[i][x-1]! ='O')break; if(qipan[i][x-1]=='O')num2++; } for(i=0;i<5&&x+i<20&&y+i<20;i++) {if(qipan[y+i][x+i]! ='O')break; if(qipan[y+i][x+i]=='O')num3++; } for(i=0;x-i-2>=0&&y-i-2>=0&&i<5;i++) {if(qipan[y-i-2][x-i-2]! ='O')break; if(qipan[y-i-2][x-i-2]=='O')num3++; } for(i=0;x+i<20&&y-i-2>=0&&i<5;i++) {if(qipan[y-i-2][x+i]! ='O')break; if(qipan[y-i-2][x+i]=='O')num4++; } for(i=0;y+i<20&&x-i-2>=0&&i<5;i++) {if(qipan[y+i][x-i-2]! ='O')break; if(qipan[y+i][x-i-2]=='O')num4++; } if(num1>=5||num2>=5||num3>=5||num4>=5)return1; elsereturn0; } 黑棋获胜情况与白棋类似 6)主函数模块 voidmain() {std: : cout<<"*************欢迎使用*^_^*`~******************"< std: : cout<<"______________________________________________"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋●╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋○╋╋╋╋╋○╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋●╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋●╋╋╋╋╋●○╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋○○╋○╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋●╋╋╋╋●╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"< std: : cout<<"|"< std: : cout<<"进入按任意键"; fivea;定义一个类的对象 inttemp; a.menu(); std: : cout<<"这是本游戏的棋盘,请按坐标输入棋子: "< a.showqipan();通过对象调用功能函数 std: : cout<<"确认请按1,退出请按其他键: "; std: : cin>>temp; if(temp! =1)游戏开始及退出控制 exit (1); if(temp==1) {std: : cout<<"游戏开始: "< for(inti=0;;i++) { a.getpointxy(); a.print(); if(a.IsxyWin()) { std: : cout<<"白棋胜! "< break; } a.getpointmn(); a.print(); if(a.IsmnWin()) { std: : cout<<"黑棋胜! "< break; } } } std: : cout<<"游戏结束\n"; } (6)程序运行图示: 进入游戏界面 棋盘界面 通过输入横纵坐标完成落子 下在同一个地方的情况 获胜情况 5.总结 1)通过此次课程设计,让我产生对益智游戏编程的兴趣,尤其是当我真正把那程序运行出来时,那种兴奋劲,无法比拟。 2)在这次课设的过程中当然也让我学到了很多东西,让我学到了很多课外的相关C++高层次的东西,当然其中也复习到了C++知识,尤其是通过类的运用,更让我体会面向对象在编程的过程中的作用。 3)由于能力所限,所以该五子棋个相关功能还比较少,代码还过于冗长,我相信接下去只要我继续努力,一定可以克服次问题。 参考文献 [1]廉师友编著,C++面向对象程序设计简明教程,西安电子科技大学出版社,1998 [2]李师贤等编著,面向对象程序设计基础,高等教育出版社,1998 [3]谭浩强编著,C++程序设计,清华大学出版社,2004 附加源代码 #include usingnamespacestd; classfive { intx,y,m,n,num_xy,num_mn; charqipan[20][20];定义20行20列的数组 public: five(intX=0,intY=0,intM=0,intN=0,intNum_xy=0,intNum_mn=0)构造函数初始化 {x=X; y=Y; m=M; n=N; num_xy=Num_xy; num_mn=Num_mn; for(inti=0;i<20;i++)输出20行20列的棋盘界面 {for(intj=0;j<20;j++)qipan[i][j]='.';} } voidgetpointxy();白棋出子及计数 voidgetpointmn();黑棋出子及计数 voidshowqipan();实现20行20列正方形界面输出 voidprint();输出下一棋盘界面 boolIsxyWin();白棋获胜 boolIsmnWin();黑棋获胜 voidmenu();显示开始菜单界面 }; voidfive: : getpointxy()判断白棋出子情况及对其计数 {std: : cout<<"请分别输入第"< "; std: : cin>>y>>x; if(! (1<=x&&x<=20&&1<=y&&y<=20)) {std: : cout<<"输入错误,请重新输入: "< getpointxy(); } elseif(qipan[y-1][x-1]! ='.') {std: : cout<<"请所下的位置已经有棋子,请重新输入: "< getpointxy(); } elseif(num_xy+num_mn>=400) {std: : cout<<"棋盘已满,平局! "< exit(0); } else {qipan[y-1][x-1]='O'; num_xy++; } } voidfive: : getpointmn()判断黑棋出子情况及对其计数 {std: : cout<<"请分别输入第"< "; std: : cin>>n>>m; if(! (1<=m&&m<=20&&1<=n&&n<=20)) {std: : cout<<"输入错误,请重新输入: "< getpointmn(); } elseif(qipan[n-1][m-1]! ='.') {std: : cout<<"请所下的位置已经有棋子,请重新输入: "< getpointmn(); } elseif(num_xy+num_mn>=400) {std: : cout<<"棋盘已满,平局! "< exit(0); } else {qipan[n-1][m-1]='*'; num_mn++; } } voidfive: : menu()进入菜单界面 {char*q=newchar[9]; cin>>q; if(strcmp(q,"c")) five: : showqipan(); } voidfive: : showqipan()输出20行20列的坐标数值 {intp=0,q=0; for(inti=0;i<=20;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 五子棋 毕业 课程设计 报告