五子棋游戏程序设计报告.doc

上传人:聆听****声音 文档编号:749267 上传时间:2023-04-30 格式:DOC 页数:30 大小:243.50KB
下载 相关 举报
五子棋游戏程序设计报告.doc_第1页
第1页 / 共30页
五子棋游戏程序设计报告.doc_第2页
第2页 / 共30页
五子棋游戏程序设计报告.doc_第3页
第3页 / 共30页
五子棋游戏程序设计报告.doc_第4页
第4页 / 共30页
五子棋游戏程序设计报告.doc_第5页
第5页 / 共30页
五子棋游戏程序设计报告.doc_第6页
第6页 / 共30页
五子棋游戏程序设计报告.doc_第7页
第7页 / 共30页
五子棋游戏程序设计报告.doc_第8页
第8页 / 共30页
五子棋游戏程序设计报告.doc_第9页
第9页 / 共30页
五子棋游戏程序设计报告.doc_第10页
第10页 / 共30页
五子棋游戏程序设计报告.doc_第11页
第11页 / 共30页
五子棋游戏程序设计报告.doc_第12页
第12页 / 共30页
五子棋游戏程序设计报告.doc_第13页
第13页 / 共30页
五子棋游戏程序设计报告.doc_第14页
第14页 / 共30页
五子棋游戏程序设计报告.doc_第15页
第15页 / 共30页
五子棋游戏程序设计报告.doc_第16页
第16页 / 共30页
五子棋游戏程序设计报告.doc_第17页
第17页 / 共30页
五子棋游戏程序设计报告.doc_第18页
第18页 / 共30页
五子棋游戏程序设计报告.doc_第19页
第19页 / 共30页
五子棋游戏程序设计报告.doc_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

五子棋游戏程序设计报告.doc

《五子棋游戏程序设计报告.doc》由会员分享,可在线阅读,更多相关《五子棋游戏程序设计报告.doc(30页珍藏版)》请在冰点文库上搜索。

五子棋游戏程序设计报告.doc

计算机学院网络工程专业

《程序设计综合课程设计》报告

(2011/2012学年第一学期)

学生姓名:

学生班级:

网络工程

学生学号:

指导教师:

2011年12月30日

目录

第一章课程设计目的和要求……………………………………………………………1

1.1课程设计的目的……………………………………………………………1

1.2课程设计的要求……………………………………………………………1

第二章课程设计任务内容………………………………………………………2

2.1课程设计的主要内容………………………………………………………2

2.2系统设计原则………………………………………………………………2

第三章设计说明…………………………………………………………………3

3.1游戏分析和介绍……………………………………………………………3

3.1.1游戏分析…………………………………………………………………………3

3.1.2游戏介绍…………………………………………………………………………3

3.2重点模块说明………………………………………………………………3

3.2.1棋盘界面Showboard()……………………………………………………………3

3.2.2下棋Play()…………………………………………………………………………4

3.2.3覆盖棋盘Recoverboard()…………………………………………………………7

3.2.4游戏结束后初始化棋盘Unitboard()……………………………………………7

3.2.5保存棋盘CopyB()…………………………………………………………………8

3.3函数清单…………………………………………………………………………………8

3.4接口…………………………………………………………………………9

第四章软件使用说明…………………………………………………………10

4.1测试…………………………………………………………………………10

4.2限制条件……………………………………………………………………13

第五章课程设计心得体会………………………………………………………14

附录一程序流程图………………………………………………………………15

附录二程序代码…………………………………………………………………16

附录三参考文献…………………………………………………………………26

第一章课程设计目的和要求

1.1课程设计的目

1,学习综合运用C语言课程和其他相关课程的知识,提高分析解决实际问题的能力,进一步巩固、加深和拓宽所学的知识,进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。

2,全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法,与同学合作设计整套程序,并且独立完成一定工作量的程序设计.

3,掌握程序设计中的常用算法和C语言的程序技巧,培养良好的程序设计风格。

4,运用所学的知识了解五子棋游戏的制作结构,将所学的知识运用于实践中。

1.2课程设计的要求

1,与同学合作设计、编制、调试出一款双人五子棋游戏,并单独完成其中一定量的函数模块。

2,要求该游戏具有趣味性和可操作性,能够正常运行。

其中用到C++语言中的各种语句、结构。

(如其中需要注意全局变量和局部变量的申明,数组的使用等)

3,双人五子棋要求能够进入欢迎界面,二人对弈,当有五颗同色棋子相连时,判断出输赢等一系列游戏流程。

第二章课程设计任务内容

2.1课程设计的主要内容

任务内容就是设计一款老少皆宜、能够锻炼个人策略谋划能力、较为传统的五子棋。

棋盘为16*16,棋子放在交叉点儿上,两人各执一色,轮流下棋,先将横、竖、斜线上的五个同色棋子练成不间断的一排则胜出。

2.2系统设计原则

1,系统性。

系统作为统一整体而存在,因此,在设计中,要从系统的角度考虑。

系统的代码要统一,传递语言要尽可能一致。

2,可靠性。

可靠性是指系统抵御外界干扰的能力及外界干扰时的恢复能力。

3,规范性。

游戏的运用以吸引玩家的乐趣为前提,一方面,系统设计应尽量避免不必要的复杂化,另一方面模块应尽量简洁,以缩短处理流程。

第三章设计说明

3.1游戏分析和介绍

3.1.1游戏分析

该五子棋程序基本上实现了五子棋游戏的功能,有双方下棋之前的欢迎界面及下棋过程中的棋盘界面,还有最终会判断出输赢。

同时,该游戏采用了二维坐标实现的,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。

细节方面,该程序有实时储存功能,随时记录。

另外考虑到游戏挺简单的,就没有设置悔棋的相关模块。

3.1.2游戏介绍

该游戏是简单的双人五子棋,所实现的功能是能够显示欢迎界面,选择是否进行游戏,进入游戏界面以后,玩家开始下棋。

玩家输入坐标则会在棋盘上显示棋子,(若是输入的坐标超出棋盘或者该位子已经有子则会提示玩家重新输入坐标位子),若输入<0,0>则退出游戏。

3.2重点模块说明

3.2.1棋盘界面Showboard()

出现棋盘的界面,对棋盘上每一个点进行定位,并在棋盘上显示相关的信息。

相关代码如下:

intShowboard()//棋盘界面

{

system("CLS");

cout<<"";

for(ints=1;s<=16;s++)

{

if(s>=10)cout<

elsecout<

}

cout<

for(i=0;i<16;i++)

{

printf("%2d",i+1);

for(j=0;j<16;j++)

cout<

if(i==6) cout<<"退出:

输入:

00";

if(i==8) cout<<"步数(Step):

"<

if(i==12) cout<<"制作人:

吴忆芸余迎香。

";

if(i==14) cout<<"请输入棋子的纵坐标、横坐标下子!

";

cout<

}

return

(1);

}

3.2.2下棋Play()

在这个小游戏中,黑方先下棋,然后可以轮流进行。

而在Play()这个函数中会调用各个函数,如最初的欢迎界面Interface(),每颗棋子的保存CopyB(),判断棋子的位子是否合法boollegal()boolOverflow(),判断同色五颗棋子是否连成一条线judgewin()

相关代码如下:

intPlay()

{

chara0[3]="◇";

chara1[3]="●";

Showboard();

cout<<"黑方下:

"<

while(cout<<"输入纵坐标:

",cin>>x,cout<<"输入横坐标:

",cin>>y)

{

if(x==0&&y==0)

{

Recoverboard();

Interface();

break;

}

if(Overflow()) continue;

if(legal())

{

x--;y--;

if(flag==1)//输入的是白棋

{

map[x][y][0]=a0[0];

map[x][y][1]=a0[1];

Step++;

Showboard();

if(judgewin())

{

cout<<"\n绿方胜利了!

\n";

cout<<"游戏结束了!

---是否重来?

(y/n)";

cin>>Switch;

if(Switch!

='n')

{

unitboard();

Play();

}

else

return1;

}

cout<<"黑方下:

"<

flag=0;

}

else

{

map[x][y][0]=a1[0];

map[x][y][1]=a1[1];

Step++;

Showboard();

if(judgewin())

{

cout<<"\n黑方胜利了!

"<

cout<<"游戏结束了!

---是否重来?

(y/n)";

cin>>Switch;

if(Switch!

='n')

{

unitboard();

Play();

}

else

return1;

}

cout<<"绿方下:

"<

flag=1;

}

}

else

{

cout<<"Italreadyhaveachessman!

PleaseReenter:

\n此位置已有子!

请重新输入:

";

}

}

}

3.2.3覆盖棋盘Recoverboard()

当一盘棋下完选择重来的时候,会出现一个最初的棋盘界面覆盖掉目前存在的棋盘,从而使棋盘达到清屏的效果,但是却能够保存所下的棋的步数。

相关代码如下:

voidRecoverboard()//覆盖棋盘,使棋盘恢复到原始状态

{

Step=0;

for(i=0;i<16;i++)

for(j=0;j<16;j++)

{

map[i][j][0]=copymap[i][j][0];

map[i][j][1]=copymap[i][j][1];

}

}

3.2.4游戏结束后初始化棋盘Unitboard()

相关代码如下:

intunitboard()//游戏结束后界面初始化

{

for(inti=0;i<16;i++)

for(intj=0;j<16;j++)

{

map[i][j][0]=copymap[i][j][0];

map[i][j][1]=copymap[i][j][1];

}

return1;

}

3.2.5保存棋盘CopyB()

这个函数看起来貌似可以没有,但是,却是不可缺少的。

它所实现的是对棋盘的保存,若是没有这个函数,最终将判断不出胜负。

相关代码如下:

voidCopyB()//调用字符数组保存原始棋盘

{

for(i=0;i<16;i++)

for(j=0;j<16;j++)

{

copymap[i][j][0]=map[i][j][0];

copymap[i][j][1]=map[i][j][1];

}

}

3.3函数清单

charmap[16][16][8]//绘制16*16的棋盘

copymap[16][16][8]//在重新玩一局游戏的时候显示最初的空棋盘

Showboard()//棋盘界面

棋盘界面//最初的欢迎界面

unitboard()//游戏结束后棋盘初始化

judgewin()//判断输赢

Play()//下棋

Recoverboard()//覆盖棋盘

legal()//判断棋子是否合法

Overflow()//判断棋子是否在棋盘内部

3.4函数接口

Intmain

Systemtitle

Systemcolor()

System

mode()

CopyB()

Interface()

Overflow

欢迎界面

Recoverboard

Play()

Judgewin

Snowboard

Legal

图3-1

第四章软件使用说明

4.1测试

如下所示,是运行过程中的各种界面显示:

1,如图所示是五子棋的欢迎界面

图4-1

2,选择“1”时则出现如下棋盘界面

图4-2

3,选择“2”时,出现如下界面

图4-3

4,进入棋盘界面下棋,当该位子已经有子的时候,界面显示如下

图4-4

5,进入棋盘界面下棋,当输入的坐标超出棋盘时,界面显示如下:

图4-5

6,当五颗同色的棋子相连的时候,界面显示如下:

图4-6

7,选择“y”时,回到空棋盘,显示如下:

图4-7

8,当选择“n”时,会出现如下界面:

图4-8

4.2限制条件

这个游戏由于比较小,而且是双人对战,所以没有设计悔棋这一步骤。

这是一个相当大的限制。

另外,只能是人人对战,而实现不了人机对战。

第五章课程设计心得体会

在本次课程设计中,不仅让我认识到自己学习上的不足,也通过请教其他同学何老师学会了修改并运行程序,还让自己复习了编程的知识,对遇见的众多问题,通过思考,耐心动手解决问题,在课程设计期间我也学到了课本中学不到的知识,明白了只有通过自己不断地动手实践才能找出不足、找出问题和提高自己的能力,发现课程设计是我学习和掌握专业知识的好方法,让自己变得活跃,也会看明白程序问题,本次受益匪浅。

最后,感谢王艳老师的悉心指导,交给我的程序设计的思想和知识。

这次课程设计要感谢老师和同学为我提出了很多的宝贵意见,给我讲解了我很多不懂得知识及应用方法,为我更好的完成报告付出了辛勤的劳动。

附录一程序流程图

附录二程序代码

#include

#include

#include

#include

#include

#include

usingnamespacestd;

intx,y,Step=0;

boolflag=0;

inti,j;

charSwitch;

charmap[16][16][8]={

{"┌","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┐"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"},

{"└","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┘"}};

charcopymap[16][16][8];//保存棋盘初始状态,恢复初始状态

intShowboard(),Interface(),unitboard(),judgewin(),Play();//棋盘界面,最初的欢迎界面,游戏结束后初始化棋盘,判断输赢,下棋

voidRecoverboard();//覆盖棋盘

boollegal(),Overflow();//判断位子是否合法,判断位子是否在棋盘内部

intInterface()

{

chara;

cout<<"\n\n 五子棋游戏\n\t\t──────────\n\t\t────────────────\n";

cout<<" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<

cout<<" ~~~~"<

cout<<" ~~1:

TwoPersonGames~~"<

cout<<" ~~(人人对战)~~"<

cout<<" ~~~~"<

cout<<" ~~2:

Exit~~"<

cout<<" ~~(退出)~~"<

cout<<" ~~~~"<

cout<<" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<

cout<<"\n Pleaseselect(请选择):

";

cin>>a;

if(a=='1') Play();

else

{

cout<<"\n\n(谢谢使用!

)\n";

cout<<"按任意键退出!

";

getch();

return0;

}

return1;

}

voidRecoverboard()//恢复到棋盘原始状态

{

Step=0;

for(i=0;i<16;i++)

for(j=0;j<16;j++)

{

map[i][j][0]=copymap[i][j][0];

map[i][j][1]=copymap[i][j][1];

}

}

voidCopyB()//调用字符数组保存原始棋盘

{

for(i=0;i<16;i++)

for(j=0;j<16;j++)

{

copymap[i][j][0]=map[i][j][0];

copymap[i][j][1]=map[i][j][1];

}

}

intunitboard()//游戏结束后界面初始化

{

for(inti=0;i<16;i++)

for(intj=0;j<16;j++)

{

map[i][j][0]=copymap[i][j][0];

map[i][j][1]=copymap[i][j][1];

}

return1;

}

intjudgewin()//判断输赢,每次向两个方向检查,两个方向间距大于5就返回1,否则返回0

{

intcx,cy,dx,dy;

chara,a0[3]="◇",a1[3]="●";

if(flag==1)

a=a0[1];

else

a=a1[1];

cx=x;cy=y;dx=x;dy=y;

while(map[cx][cy][1]==a)

{

cx--;cy--;//向左上检测

if(cx<0||cy<0)

break;

}

while(map[dx][dy][1]==a)

{

dx++;dy++;//向右下检测

if(dx>15||dy>15)

break;

}

if(dx>=(cx+6)||dy>=(cy+6))

return1;

cx=x;cy=y;dx=x;dy=y;

while(map[cx][cy][1]==a)

{

cx--;//向上竖直检测

if(cx<0)

break;

}

while(map[dx][dy][1]==a)

{

dx++;//竖直向下检测

if(dx>15)

break;

}

if(dx>=(cx+6))

return1;

cx=x;cy=y;dx=x;dy=y;

while(map[cx][cy][1]==a)

{

cy--;//水平向左检测

if(cy<0)

break;

}

while(map[dx][dy][1]==a)

{

dy++;//水平向右检测

if(dy>15)

break;

}

if(dy>=(cy+6))

return1;

cx=x;cy=y;dx=x;dy=y;

while(map[cx][cy][1]==a)

{

cx++;cy--;//向左下方检测

i

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2