当前位置:文档之家› 五子棋游戏程序的设计报告

五子棋游戏程序的设计报告

计算机学院网络工程专业《程序设计综合课程设计》报告(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()出现棋盘的界面,对棋盘上每一个点进行定位,并在棋盘上显示相关的信息。

相关代码如下:int Showboard()//棋盘界面{system("CLS");cout << " ";for(int s=1;s<=16;s++){if(s>=10) cout << s-10 << " ";else cout << s << " ";}cout << endl;for(i=0;i<16;i++){printf("%2d",i+1);for(j=0;j<16;j++)cout << map[i][j];if(i==6) cout << "退出:输入: 0 0 ";if(i==8) cout << "步数(Step):" << Step;if(i==12) cout << "制作人:吴忆芸余迎香。

";if(i==14) cout << "请输入棋子的纵坐标、横坐标下子!" ;cout << endl;}return(1);}3.2.2下棋Play()在这个小游戏中,黑方先下棋,然后可以轮流进行。

而在Play()这个函数中会调用各个函数,如最初的欢迎界面Interface(),每颗棋子的保存CopyB(),判断棋子的位子是否合法bool legal() bool Overflow(),判断同色五颗棋子是否连成一条线judgewin()相关代码如下:int Play(){char a0[3]="◇";char a1[3]="●";Showboard();cout << "黑方下:"<<endl;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;{unitboard();Play();}elsereturn 1;}cout << "黑方下:"<<endl;flag=0;}else{map[x][y][0]=a1[0];map[x][y][1]=a1[1];Step++;Showboard();if(judgewin()){cout << "\n黑方胜利了!" << endl;cout << "游戏结束了! ---是否重来?(y/n)";cin >> Switch;{unitboard();Play();}elsereturn 1;}cout << "绿方下:"<<endl;flag=1;}}else{cout << "It already have a chessman!Please Reenter:\n此位置已有子!请重新输入:";}}}3.2.3 覆盖棋盘Recoverboard()当一盘棋下完选择重来的时候,会出现一个最初的棋盘界面覆盖掉目前存在的棋盘,从而使棋盘达到清屏的效果,但是却能够保存所下的棋的步数。

相关代码如下:void Recoverboard()//覆盖棋盘,使棋盘恢复到原始状态{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()相关代码如下:int unitboard()//游戏结束后界面初始化{for(int i=0;i<16;i++)for(int j=0;j<16;j++){map[i][j][0]=copymap[i][j][0];map[i][j][1]=copymap[i][j][1];}return 1;}3.2.5 保存棋盘CopyB()这个函数看起来貌似可以没有,但是,却是不可缺少的。

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

相关代码如下:void CopyB()//调用字符数组保存原始棋盘{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函数清单char map[16][16][8]//绘制16*16的棋盘copymap[16][16][8]//在重新玩一局游戏的时候显示最初的空棋盘Showboard()//棋盘界面棋盘界面//最初的欢迎界面unitboard()//游戏结束后棋盘初始化judgewin()//判断输赢Play()//下棋Recoverboard()//覆盖棋盘legal()//判断棋子是否合法Overflow()//判断棋子是否在棋盘内部3.4函数接口图3-1第四章软件使用说明4.1测试如下所示,是运行过程中的各种界面显示:1,如图所示是五子棋的欢迎界面图4-12,选择“1”时则出现如下棋盘界面图4-23,选择“2”时,出现如下界面图4-34,进入棋盘界面下棋,当该位子已经有子的时候,界面显示如下图4-45,进入棋盘界面下棋,当输入的坐标超出棋盘时,界面显示如下:图4-56,当五颗同色的棋子相连的时候,界面显示如下:图4-67,选择“y”时,回到空棋盘,显示如下:图4-78,当选择“n”时,会出现如下界面:图4-84.2 限制条件这个游戏由于比较小,而且是双人对战,所以没有设计悔棋这一步骤。

这是一个相当大的限制。

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

相关主题