五子棋游戏 课程设计报告(含源代码可以运行)

时间:2024.4.21

  五子棋游戏  课程设计报告(含源代码可以运行)               

目录

第一章 需求分析. 1

1.1 总体分析. 1

1.2 初始化. 1

1.3 主循环控制模块. 1

1.4 玩家下子. 1

1.5 盘面分析填写棋型表. 2

1.6 对方下子. 2

1.7 胜负判断. 2

第二章 功能描述. 3

2.1 功能模块图. 3

2.2 功能说明. 3

第三章 系统设计. 4

3.1 流程图. 4

3.2 流程图说明. 5

第四章 运行结果. 6

第五章 总结. 8

第六章 致谢. 9

附录一 参考文献. 10

附录二 源代码. 11

五子棋游戏

第一章 需求分析

1.1 总体分析

软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。对于任何一个软件而言,需求分析工作都是至关重要的一步。只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。

软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。

基于本游戏,首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数组Table[15][15](15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这张表也是今后分析的基础。在此之后还要为两个玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型数据。

1.2 初始化

首先,建立盘面数组Table[15][15]、对战双方的棋型表Computer[15][15][4]和Player[15][15][4]并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘(棋盘可以不显示)。

1.3 主循环控制模块

控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个调度者的角色。

1.4 玩家下子

当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在Table[15][15]数组的相应地方记录‘2’,以表明该子是玩家下的。

1.5 盘面分析填写棋型表

您在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。先来分析己方的棋型,我们从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到Computer[x][y][n]中就行了(x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向)。而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同样的方法填写对方棋型表。

  注意:所有棋型的编号都要事先 定义好,越重要的号数越大!

1.6 对方下子

有了上面填写的两张棋型表,就是遍历棋型表Computer[15][15][4]和Player[15][15][4]找出其中数值最大的一点,在该点下子即可。但这种算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”的毛病。 如果在这儿下子将会形成对手不得不防守的棋型(例如:‘冲四’、‘活三’);那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测。这时再调用模块4对预测后的棋进行盘面分析,如果出现了‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了(当然对黑棋而言‘双三’、‘双四’是禁手,另当别论);否则照同样的方法向下分析,就可预测出第二步、第三步……

等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢?进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能待机发动反击,何乐而不为呢!

1.7 胜负判断

务须多言,某方形成五子连即获胜;若黑棋走出‘双三’、‘双四’或长连即以禁手判负。

第二章 功能描述

2.1 功能模块图

图2.1 功能模块图

2.2 功能说明

该五子棋程序基本上实现了五子棋的游戏功能,有双方下棋的界面及最终判定结果的界面。同时该游戏采用二维坐标实现,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。在细节方面,该系统提供实时存储功能,随时记录为完成的游戏,使用户可以很好的处理意外中断的情况。该游戏基本实现了游戏的一些要求和特征。在游戏的源程序及文档方面,我们也严格遵守软件工程思想,立足实验要求,确定任务,需求分析,设计和编码,每个步骤力求清晰易懂。原代码注释详尽,各功能模块功能分明,可移植性强。当然该系统也有很多不足的地方,第一次进行独立的课程设计,也有很多细节方面是考虑到的,这款游戏也是在不断的调试和修改中产生和完善的。希望老师能够指出不足,帮助我不断提高。    

第三章 系统设计

3.1 流程图

图3.1 流程图

3.2 流程图说明

本程序定义了各种操作函数、各种状态判定宏,思想明确,思路清晰。各个判断选择了不同路径,因此继续进行或输出结果。程序中,“循环”的利用非常直接和清晰,双方交替下棋,因此循环往复。最终决出胜负或最终平局。分析时,也考虑了许多种情况,针对各个情况均作出了相对措施和解决方案

程序采用循环进行双方交替下棋,并进行了很多判断。首先判断棋盘是否已满,若棋盘已满,则输出平局,结束游戏;若棋盘未满,则继续进行。然后判断“0”方是否胜出,若“0”方获胜,则输出“0”方获胜,结束游戏;若“0”方没有获胜,则继续进行。再判断“x”方是否获胜,若“x”方获胜,则输出“x”方获胜,结束游戏;若“x”方没有获胜,则继续进行。回到“首先”的判断。如此循环……

第四章 运行结果

图4.1 运行结果初始图

图4.2 游戏过程图

图4.3 游戏进行图

图4.4 “0”方获胜图

第五章 总结

第六章 致谢

附录一 参考文献

[1]严蔚敏,吴伟民.数据结构.北京:清华大学出版社,20##年

[2]苏仕华,魏韦巍,王敬生,刘燕君.数据结构课程设计(第二版).北京:机械工业出版社,20##年

[3]谭浩强.C程序设计(第二版).北京:清华大学出版社,1999年

[4]谭浩强.C++程序设计.北京:清华大学出版社,20##年

附录二 源代码

#include 

using namespace std; 

int Hsheng(char a[][15]);

//判断o子是否获胜的函数 

int Bsheng(char a[][15]);

//判断x子是否获胜的函数 

int he(char a[][15]);

//判断是否平局(也就是棋盘下满了)的函数 

void qipan(char a[15][15])

//执行输出棋盘命令

{

cout<<"本游戏采用二维数组实现,棋盘为15X15的二维直角坐标系,均从1到15,祝二位游戏愉快.";

 for(int i=0;i<15;i++)

//打印棋盘

 {

   for(int j=0;j<15;j++)

 cout<

 cout<

}

 int main()

{

 char a[15][15];   int x,y; 

 for(int i=0;i<15;i++) 

 for(int j=0;j<15;j++) 

 a[i][j]=' ';

 qipan(a); 

 while(1)

//用循环语句执行o,x交替下子,这些while语句看起来似乎是个死循环~实际上都会经过break结束 

 {

  int a1=1; 

  while(1) 

   {

 for(;a1;) 

      {

cout<<"请输入o子下的位置:";

 //输入o子的位置

 cin>>x>>y; if(a[x][y]=='o'||a[x][y]=='x')

//判断是否已有子 

 {cout<<"已有子请重下"<<",";continue;} 

 else if(x>=15||y>=15)

{cout<<"输入错误请重输"<<",";continue;} 

 else

 { a[x][y]='o'; a1=0;}

 }

  break;

qipan(a);

//下好o子后将棋盘显示 

 if(Hsheng(a))

//判断o子是否已经获胜 

 {cout<<"o子获胜"<

 while(1)

//下x子 

 {

cout<<"请输入x子下的位置:"; 

 cin>>x>>y; 

 if(a[x][y]=='o'||a[x][y]=='x'||x>=15||y>=15) 

   {

 for( ; a[x][y]=='o'||a[x][y]=='x'; ) 

    {

cout<<"已有子请重下"; 

 cout<<"请输入x子下的位置:"; 

 cin>>x>>y;continue;

 } 

 for ( ; x>=15||y>=15||x; ) 

     {

 cout<<"输入错误请重输"<<",";

 //判断输入棋子位置是否正确

 cout<<"请输入x子下的位置:";

 cin>>x>>y;continue ;

 a[x][y]='x';break;

 } 

 else 

 {a[x][y]='x'; break;}

 } 

 qipan(a);

//再一次输出棋盘 

 if(Bsheng(a))

//判断x子是否已经获胜 

 {cout<<"x子获胜"<

 if(he(a))

//判断是否平局 

 {cout<<"平局"<

  } 

 return 0; 

int Hsheng(char a[][15])

{

  int i,j;

//判断横着的5个是否都相等 

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

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

if(a[i][j]=='o'&&a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o') 

 return 1; 

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

//判断竖着的5个是否都相等 

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

 if(a[i][j]=='o'&&a[i+1][j]=='o'&&a[i+2][j]=='o'&&a[i+3][j]=='o'&&a[i+4][j]=='o') 

 return 1; 

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

//判断左斜5个 

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

 if(a[i][j]=='o'&&a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o') 

 return 1; 

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

//右斜5个 

 for(j=14;j>3;j--) 

 if(a[i][j]=='H'&&a[i+1][j-1]=='o'&&a[i+2][j-2]=='o'&&a[i+3][j-3]=='o'&&a[i+4][j-4]=='o') 

 return 1; 

 return 0;

  } 

int Bsheng(char a[][15])

//同o,只是改字符 

 int i,j; 

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

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

if(a[i][j]=='x'&&a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]=='x') 

 return 1; 

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

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

if(a[i][j]=='x'&&a[i+1][j]=='x'&&a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x') 

 return 1; 

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

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

if(a[i][j]=='x'&&a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x') 

 return 1; 

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

 for(j=14;j>3;j--) 

if(a[i][j]=='x'&&a[i+1][j-1]=='x'&&a[i+2][j-2]=='x'&&a[i+3][j-3]=='x'&&a[i+4][j-4]=='x') 

 return 1; 

 return 0;

  } 

int he(char a[][15]) 

{

  for(int i=0;i<15;i++) 

  for(int j=0;j<15;j++) 

 {

  if(a[i][j]==' ')

//当棋盘全部子都不是' '时才能return 1,即棋盘已下满 

 return 0; 

 return 1; 

}

更多相关推荐:
五子棋-课程设计报告

五子棋-课程设计报告单位分院(系)专业学号学生姓名指导教师完成日期20xx年05月日摘要五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手…

C语言图形五子棋课程设计报告

北京师范大学C语言课程设计报告课题名称:游戏五子棋指导教师:课题组员:院系:信息科学与技术时间:20##.3.15-20##.4.20摘要五子棋是一种两人对弈的纯策略型棋类游戏,应用C语言编写程序可以在计算机上…

《C++语言程序设计》课程设计报告--五子棋

C语言程序设计课程设计报告课程题目年级专业学号姓名指导教师江苏师范大学数学与统计学院摘要五子棋是我国古代的传统的黑白棋种之一五子棋不仅能增强思维能力提高智力而且富含哲理有助于修身养性本游戏是以C语言作为开发工具...

20xx年C语言五子棋课程设计报告

本科控制软件设计课程设计题目五子棋学院计信院专业自动化年级学号姓名谯平同组人张健李益指导教师黄仁杰20xx年9月6日1目录1设计简介32设计模块3小组分工4流程图5设计过程6调试过程7分析与总结8源程序4445...

c++五子棋课程设计报告

福建农林大学计算机与信息学院课程设计报告课程名称课程设计题目姓名系专业年级学号指导教师职称面向对象程序设计课程设计五子棋计算机软件工程年月日福建农林大学计算机与信息学院计算机类课程设计报告结果评定2目录1设计目...

五子棋JAVA语言课程设计报告

封面Java语言程序设计课程设计报告分院电信分院班级电子商务1班姓名何芳林学号20xx0210460123指导教师吴军良课设时间20xx1220至20xx1231二O一一年十二月二十日10电商1班何芳林Java...

java课程设计报告-五子棋

目录第一章软件开发平台游戏设计思路第二章小游戏五子棋的开发过程第一节JAVA基础知识第二节启动程序的分析第三节游戏设计过程第三章总结第四章参考文献第五章附录第一章游戏设计思路第二章第一节java程序基础知识本系...

五子棋 课程设计完整报告 C++版

一课程设计的目的计算机网络课程设计是计算机网络原理课程之后的实践加强环节通过本设计的训练使学生加深对网络协议的理解并实践制定通信规则同时通过实践进一步掌握套接字编程方法为大型网络编程打下坚实基础通过本次课程设计...

JAVA课程设计 五子棋

攀枝花学院课程业设计五子棋学生姓名学号所在院系数学院计算机学院专业信息与计算科学指导教师讲师二一四年六月攀枝花学院教务处制攀枝花学院Java课程设计攀枝花学院本科学生课程设计任务书注任务书由指导教师填写攀枝花学...

五子棋程序设计报告

宜宾学院面向对象课程设计学院计算机与信息工程学院班级20xx级6班学生姓名郑亮学号141106020设计地点单位宜宾学院设计题目双人五子棋完成日期20xx年12月5日目录1问题要求及任务描述411题目要求412...

五子棋游戏程序设计报告

计算机学院网络工程专业程序设计综合课程设计报告20xx20xx学年第一学期学生姓名学生班级学生学号指导教师20xx年12月30日双人五子棋目录第一章课程设计目的和要求111课程设计的目的112课程设计的要求1第...

C语言五子棋源代码 - 课程设计报告

计算机程序设计基础C语言课程设计题目简易五子棋软件设计院系部信息工程学院姓名张卓班级自103学号10072820xx年7月5日北京目录1课程设计报告311课题描述312需求分析313概要设计4131功能模块41...

五子棋课程设计报告(33篇)