完整word版五子棋c++课程设计Word文档格式.docx
- 文档编号:4164926
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:28
- 大小:261.86KB
完整word版五子棋c++课程设计Word文档格式.docx
《完整word版五子棋c++课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《完整word版五子棋c++课程设计Word文档格式.docx(28页珍藏版)》请在冰点文库上搜索。
2.1五子棋对弈系统
设计一个五子棋系统程序,实现对五子棋进行运行。
基本要求:
五子棋是有两个人在一盘棋上进行对抗的竞技活动。
在对局开始时,先由用户选择哪方开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围交叉点上落子,如此轮流落子,知道某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方程就算获胜。
此时算法结束,当有任何一方退时出,都可在算法中实现。
第三章详细设计说明
3.1功能设计
(1)由两个玩家分别下棋,当某一玩家五子相连,则赢。
(2)界面要求:
初始状态——显示棋盘,并显示两个玩家的操作键及初始玩家名称;
游戏进行状态——动态显示棋盘,不同玩家的棋子用不同符号显示,屏幕上显示当前玩家号,结束时显示赢家名称。
3.2五子棋对弈系统流程图
是
否
否
图3-1程序总体图
图3-2算法流程图
3.3软件中实现各项功能的函数与程序代码
主要函数、结构体和链表
Inta;
//纪录坐标位置
Intb;
CharachBoard[i][j],//用于在【a】【b】处落子
chSort;
;
//棋子的类别
IntnWin////赢棋的次数
类的使用:
classCGobang
{private:
charchSort;
intnWin;
//赢棋的次数
intnLose;
//输棋的次数
staticintnDraw;
//平局次数
public:
staticcharachBoard[19][19];
//棋盘
staticintnSize;
//棋盘的尺寸nSize*nSize
CGobang(charchsort)//构造函数,决定一方棋子的类别
{
chSort=chsort;
nWin=nLose=nDraw=0;
}
friendvoidhuiqi();
//悔棋
staticvoidsavefile();
//将棋盘保存至文件
staticvoidreadBoard();
//从文件中读入棋盘
voidcontinute();
//接着上次的游戏玩
voidPlayTurn(void);
//走一步棋
intJudge();
//判断是否连成五子,是则返回1
voidWin(void);
//赢棋
voidLose(void);
//输棋
staticvoidDraw(void);
//平局
voidPrintInfo(void);
//打印总体情况
staticvoidPrintBoard(void);
//输出棋盘
staticintGetFull(void);
//判断棋盘是否一满
staticvoidInitialBoard(void);
//初始化棋盘
};
}
本次程序设计主要设计了五个模块
1.绘制棋盘模块
当游戏初始化时,和每当落子消息触发时,都需要对棋盘进行重绘。
这里用特殊符号“o”“@”分别来描绘白子、黑子。
这个函数主要完成了以下工作:
●装载棋盘二位数组并进行绘制。
●根据棋盘数据绘制棋子。
●绘制最后落子指示规矩。
图3-3
2.键盘操作控制模块
此模块主要用于处理与用户的交互过程。
即完成落子判断过程。
此模块主要完成以下工作:
●判断是否在棋盘内按落子键,和移动是否超出棋盘范围。
●判断落子点是否已有棋子。
3.判断胜负模块
这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。
五子棋的胜负,在于判断棋盘上是否有一个点,从这个点开始的右、下、右下、左下四个方向是否有连续的五个同色棋子出现,如图:
图3-5判断胜负方向
这个算法是本系统里的nWin成员函数。
需要它接受一个棋子颜色的参数,然后返回一个布尔值,这个值指示是否胜利。
1).横向判断流程图“——”
图3-6
2).竖向判断流程图“|”
3).从左到右斜方向“\”
图3-8
4).从右到左斜方向“/”
图3-9
4.重置棋盘模块
在每局游戏开始的时候都需要调用这个函数InitialBoard(void)将棋盘初始化,也就是棋盘的初始化工作。
在这个函数中,主要发生了这么几件事情:
●将achBoard[N][N]中每一个落子位都置为无子状态(0)。
●默认的先手顺序是黑子先手,置player=1。
5.游戏结束模块
这一模块主要用于释放内存,用输出流语句输出结束信息,并控制循环退出程序。
第四章程序运行环境说明
4.1程序运行环境说明及出现的问题
该程序可以实现对学生信息的录入和显示,可以采用Dev-c或者VisualC++
运行,可以实现简单的界面化,使程序方便使用和修改。
4.2运行结果
软件使用结果
1.进入游戏→主界面
图4-1
2.点击1→开始游戏
图4-2
3.继续点击1或2→游戏过程中
图4-3
4.判断胜负
图4-4
5.在主界面中点击0→退出游戏
图4-6
第五章课程设计心得与体会
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握程序开发技术是十分重要的,而C++语言又是最常见,功能最强大的一种高级语言,因此做好C++语言课程设计是十分必要的。
通过几周的课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做这么长的程序设计,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
我做的是五子棋设计,虽然是很简单的一个小的程序,但对我来说却是一个很大的困难。
更加是第一次做课程设计,所以做了一个下午却丝毫没有进展,最主要是不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。
可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。
开始的时候真的感觉编程是一件很无聊的事情,不过当一个程序运行成功的时候那种喜悦是无法言语的,那种成就感是无法比拟的。
又经过几天的努力,终于把程序完成了,尽管程序还是有很多功能上的欠缺和漏洞,可我还是很高兴的。
无论如何是自己的劳动成果,是自己经过努力得到的成绩,同时也是学习C++语言的一次实践作业,自己进步的证明。
在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。
因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!
附录1:
参考文献
1、谭浩强著.C++程序设计教程.清华大学出版社
2、陈维兴林小茶编著.C++面向对象程序设计.中国铁道出版社
3、田淑清,C语言程序设计,北京:
高等教育出版社,2006年1月
4、DavidJ.Kruglinski,ScotWingo,GeorgeShepherd,VisualC++6.0技术内幕(第五版),希望图书室译,北京:
北京希望电子出版社,2001年1月
#include<
iostream>
string>
fstream>
iomanip>
inta[90],b[90];
//定义全局数组
intk=0;
usingnamespacestd;
classCGobang//棋子类
{
private:
CGobang(charchsort)//构造函数,决定一方棋子的类别
charCGobang:
:
achBoard[19][19];
intCGobang:
nSize=0;
nDraw=0;
voidCGobang:
Draw()
cout<
<
"
\n\n\t\t平局!
\n\n"
;
nDraw++;
InitialBoard()//初始化棋盘
for(inti=0;
i<
nSize;
i++)
for(intj=0;
j<
j++)
achBoard[i][j]='
'
}
PrintBoard()//输出棋盘
inti,j;
cout<
endl;
setw(5)<
for(i=1;
=nSize;
setw(4)<
i;
for(i=0;
setw(3)<
i+1;
for(j=0;
achBoard[i][j]<
|"
GetFull()//判断棋盘是否一满,若是返回1
if(achBoard[i][j]=='
)
return0;
return1;
Win()//赢棋
\n\n\t\t"
chSort<
方获胜!
nWin++;
savefile()//将棋盘保存至文件
ofstreamoutfile("
C++.txt"
ios:
out);
if(!
outfile)
{cerr<
openfileerror!
exit
(1);
for(intj=0;
outfile.write((char*)&
achBoard[i][j],sizeof(achBoard[i][j]));
outfile.close();
Lose()//输棋
nLose++;
PlayTurn(void)//走一步棋
intnRow,nCol;
charchoice1,choice2;
do
\t现在该"
方下棋,请输入棋盘坐标(x,y):
cin>
>
nRow>
nCol;
if(nRow>
nSize||nCol>
nSize)
\t输入的坐标越界,x与y的范围应小于等于"
nSize<
,请重新输入\n"
else
0&
&
nCol>
achBoard[nRow-1][nCol-1]!
='
\t棋盘("
nRow<
"
nCol<
)处已有棋子,请重新输入\n"
elseif(nRow==-1)
huiqi();
elseif(nRow==0&
nCol==0)
cout<
\t确认你想结束游戏吗(y,n)?
cin.get();
choice1;
if(choice1=='
y'
||choice1=='
Y'
\t是否保存(y,n)?
cin.get();
cin>
choice2;
if(choice2=='
||choice2=='
CGobang:
savefile();
\t保存成功,欢迎下次再玩!
\n"
exit
(1);
\t游戏结束,欢迎再次使用五子棋游戏!
exit(0);
else{
achBoard[nRow-1][nCol-1]=chSort;
a[k]=nRow-1;
b[k]=nCol-1;
k++;
break;
}while
(1);
Judge()//判断是否连成五子,是则返回1
if(achBoard[i][j]==chSort)
if(j+4<
if(achBoard[i][j+1]==chSort&
achBoard[i][j+2]==chSort&
achBoard[i][j+3]==chSort&
achBoard[i][j+4]==chSort)
if(i+4<
if(achBoard[i+1][j]==chSort&
achBoard[i+2][j]==chSort&
achBoard[i+3][j]==chSort&
achBoard[i+4][j]==chSort)
nSize&
j+4<
if(achBoard[i+1][j+1]==chSort&
achBoard[i+2][j+2]==chSort&
achBoard[i+3][j+3]==chSort&
achBoard[i+4][j+4]==chSort)
if(i-4>
if(achBoard[i-1][j+1]==chSort&
achBoard[i-2][j+2]==chSort&
achBoard[i-3][j+3]==chSort&
achBoard[i-4][j+4]==chSort)
PrintInfo(void)//打印总体情况
Size"
方共计赢"
nWin<
局,输"
nLose<
局,平"
nDraw<
局。
readBoard()//以二进制形式从文件中读出棋盘
ifstreaminfile("
in);
infile)
cerr<
openfileeror!
else
{
infile.read((char*)&
infile.close();
voidhuiqi()//悔棋
k--;
achBoard[a[k]][b[k]]='
PrintBoard();
voidPrintRule(void)//打印游戏规则
\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n\n"
\t\t欢迎使用五子连珠游戏!
endl<
\t游戏规则:
\t1.每1步输入要下棋子的格子的x,y坐标,按Enter键\n"
\t2.有1方首先5个棋子连成一线即判获胜\n"
\t3.当旗子布满棋盘但仍无获胜方即为平局\n"
\t4.一局结束后,若想继续按Y键,若退出则按其他键\n"
\t5.若想中途退出游戏,请输入(0,0),再按照提示保存游戏\n"
\t6.悔棋请输入(-1,0)\n"
\t6.X方先行\n"
\n\n\t\t请按任意键开始下棋!
intJudgePlay(CGobang&
SideX,CGobang&
SideO)//每下一步要进行输赢的判断,有赢的则返回1
if(SideX.Judge())//X方获胜
SideX.Win();
SideO.Lose();
elseif(SideO.Judge())//O方获胜
SideO.Win();
SideX.Lose();
voidPlay(CGobang&
SideO)//开始一局游戏
while
(1)
system("
cls"
);
\t*************************************************\n"
\t\t※.悔棋请输入(-1,0)\n"
\t\t※.中途退出请输出(0,0),并根据提示保存\n"
SideX.PlayTurn();
//X方下棋
if(JudgePlay(SideX,SideO))//判断输赢
break;
if(CGobang:
GetFull())//判断是否平局
Draw();
system("
//清屏
CGobang:
SideO.PlayTurn();
//O方下棋
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 五子棋 c+ 课程设计