c++五子棋毕业课程设计报告.docx

上传人:b****3 文档编号:3754391 上传时间:2022-11-25 格式:DOCX 页数:25 大小:220.74KB
下载 相关 举报
c++五子棋毕业课程设计报告.docx_第1页
第1页 / 共25页
c++五子棋毕业课程设计报告.docx_第2页
第2页 / 共25页
c++五子棋毕业课程设计报告.docx_第3页
第3页 / 共25页
c++五子棋毕业课程设计报告.docx_第4页
第4页 / 共25页
c++五子棋毕业课程设计报告.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

c++五子棋毕业课程设计报告.docx

《c++五子棋毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《c++五子棋毕业课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。

c++五子棋毕业课程设计报告.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1