c++五子棋课程设计报告Word格式.docx
《c++五子棋课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《c++五子棋课程设计报告Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
评定日期:
目录
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
1.设计目的
(1)加深我对面向对象程序基本的理解和掌握。
(2)熟练掌握基本流程图的绘制。
(3)熟练visio的一些操作方法。
(4)能够在调试程序中快速发现并排除程序中的错误。
(5)提高面向对象程序语言解决实际中的问题的能力。
2.设计要求
五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。
通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。
编写代码可以在VC6.0下编译通过。
游戏要能实现五子棋游戏的简单操作。
程序中要体现面向对象思想。
3.设计方案
(必须包含系统功能说明、用例图和类图)
一、用例图
落子
基于用户的用例图
步数用例图
系统用例图
1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面
二、类图
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<
j++)
qipan[i][j]='
.'
;
}
}
⑶系统工作流程介绍。
⑷类的介绍:
该类完成了对输入棋子坐标的初始化,通过for循环实现了一个20行20列的坐标,在公有成员中定义了相应的功能函数
//白棋出子及计数
//黑棋出子及计数
//输出下一棋盘界面
(5)各个模块的介绍:
1)类的实现:
包括对数据成员的赋值和成员函数的初始化还有通过for循环实现对20行20列坐标的定义:
源代码如下
{x=X;
y=Y;
{for(intj=0;
j++)qipan[i][j]='
};
2)白棋和黑棋落子情况的判断的实现,源代码如下:
voidfive:
:
getpointxy()//判断白棋出子情况及对其计数
{std:
cout<
<
"
请分别输入第"
num_xy+1<
步白棋○的横坐标和纵坐标:
std:
cin>
>
y>
x;
if(!
(1<
=x&
&
x<
=20&
1<
=y&
y<
=20))
{std:
cout<
"
输入错误,请重新输入:
endl;
getpointxy();
elseif(qipan[y-1][x-1]!
='
)
请所下的位置已经有棋子,请重新输入:
<
endl;
getpointxy();
elseif(num_xy+num_mn>
=400)
棋盘已满,平局!
endl;
exit(0);
else
{qipan[y-1][x-1]='
O'
num_xy++;
}
getpointmn()//判断黑棋出子情况及对其计数
num_mn+1<
步黑棋●的横坐标和纵坐标:
n>
m;
=m&
m<
=n&
n<
getpointmn();
elseif(qipan[n-1][m-1]!
='
)
{qipan[n-1][m-1]='
*'
num_mn++;
}
3)菜单界面模块
menu()//进入菜单界面
{char*q=newchar[9];
cin>
q;
if(strcmp(q,"
c"
))
five:
showqipan();
4)输出模块
showqipan()//输出20行20列的坐标数值
{intp=0,q=0;
=20;
i++)
{if(p<
10)
{std:
p<
'
'
else
std:
p;
p++;
cout<
for(i=0;
{if(i>
=0)
{q++;
if(q<
10)std:
q<
elsestd:
q;
}
j<
j++)std:
qipan[i][j]<
;
std:
print()
{std:
elsestd:
5)黑白棋输赢的判断,其源代码如下:
boolfive:
IsxyWin()//白棋获胜实现函数
{intnum1=1,num2=1,num3=1,num4=1;
for(inti=x;
x+5&
x+5<
20;
i++)
{if(qipan[y-1][i]!
)break;
if(qipan[y-1][i]=='
)num1++;
for(i=x-2;
i>
=0;
i--)
if(qipan[y-1][i]=='
for(i=y;
y+5;
{if(qipan[i][x-1]!
if(qipan[i][x-1]=='
)num2++;
for(i=y-2;
{if(qipan[i][x-1]!
5&
x+i<
20&
y+i<
20;
i++)
{if(qipan[y+i][x+i]!
if(qipan[y+i][x+i]=='
)num3++;
x-i-2>
=0&
y-i-2>
5;
i++)
{if(qipan[y-i-2][x-i-2]!
if(qipan[y-i-2][x-i-2]=='
x+i<
20&
y-i-2>
=0&
i++)
{if(qipan[y-i-2][x+i]!
if(qipan[y-i-2][x+i]=='
)num4++;
y+i<
x-i-2>
{if(qipan[y+i][x-i-2]!
if(qipan[y+i][x-i-2]=='
if(num1>
=5||num2>
=5||num3>
=5||num4>
=5)return1;
elsereturn0;
黑棋获胜情况与白棋类似
6)主函数模块
voidmain()
{std:
*************欢迎使用*^_^*`~******************"
______________________________________________"
|╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"
|╋╋╋╋●╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋╋|"
|╋╋╋╋╋╋○╋╋╋╋╋○╋╋╋╋╋╋╋╋╋|"
|╋╋╋╋╋╋╋╋●╋╋╋╋╋╋╋╋╋╋╋╋╋|"
|╋╋╋╋●╋╋╋╋╋●○╋╋╋╋╋╋╋╋╋╋|"
|╋╋╋╋╋╋╋╋○○╋○╋╋╋╋╋╋╋╋╋╋|"
|╋╋╋╋╋╋●╋╋╋╋●╋╋╋╋╋╋╋╋╋╋|"
|---------------------------------------------"
进入按任意键"
fivea;
//定义一个类的对象
inttemp;
a.menu();
这是本游戏的棋盘,请按坐标输入棋子:
a.showqipan();
//通过对象调用功能函数
确认请按1,退出请按其他键:
temp;
if(temp!
=1)//游戏开始及退出控制
exit
(1);
if(temp==1)
{std:
游戏开始:
for(inti=0;
{
a.getpointxy();
a.print();
if(a.IsxyWin())
{
std:
白棋胜!
break;
}
a.getpointmn();
if(a.IsmnWin())
黑棋胜!
}
}
游戏结束\n"
(6)程序运行图示:
进入游戏界面
棋盘界面
通过输入横纵坐标完成落子
下在同一个地方的情况
获胜情况
5.总结
1)通过此次课程设计,让我产生对益智游戏编程的兴趣,尤其是当我真正把那程序运行出来时,那种兴奋劲,无法比拟。
2)在这次课设的过程中当然也让我学到了很多东西,让我学到了很多课外的相关C++高层次的东西,当然其中也复习到了C++知识,尤其是通过类的运用,更让我体会面向对象在编程的过程中的作用。
3)由于能力所限,所以该五子棋个相关功能还比较少,代码还过于冗长,我相信接下去只要我继续努力,一定可以克服次问题。
参考文献
[1]廉师友编著,C++面向对象程序设计简明教程,西安电子科技大学出版社,1998
[2]李师贤等编著,面向对象程序设计基础,高等教育出版社,1998
[3]谭浩强编著,C++程序设计,清华大学出版社,2004
附加源代码
#include<
iostream>
usingnamespacestd;
five