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

合集下载

五子棋游戏_java课设_含可运行程序

五子棋游戏_java课设_含可运行程序

沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
图2 界面修剪图
沈阳大学
图3 游戏说明图
图4 游戏关于图
运行游戏后,正式的对战可以有时间设定,点击设置游戏时间,出现对话框这时你可以输入你想要设定的时间,该时间是按分钟设置的,会出现如图3所示:
沈阳大学
图4 游戏设置确定图
当点击确定后,双方就可以进行对战了,当轮到一方时,该方的设定时间就会走动,而另一方就会停止。

如图5所示:
图5 游戏对战图
如果这场游戏时间超时,或者一方中途认输的,就可以提示出单击认输的按钮,这样就可以结束游戏啦!如图6所示:
沈阳大学
图7 游戏结束图
设计体会
通过编写这个程序,我体会最为深刻的一点是五子棋游戏的整体结构的设计和
程序流程设计模式的重要性。

即使是对于这一个并不大的程序,代码的组织都觉得变得非常重要,因为这关系到日后的运行维护以及扩展。

这个游戏之中,有关程序的实现以及对五子棋界面的设计有大量的方法,而且大都都相似,但是对于整个程序的架构,却只有亲身去实践后才可以知道各个模块是怎样衔接和联系的。

几千上万行的代码需要通
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学。

程序设计课程设计五子棋实验报告(附代码)

程序设计课程设计五子棋实验报告(附代码)
3
程序设计课程设计报告书
1、引言
1.1 编写目的
学会 MFC 的一些基本操作,会使用其中的部分函数,编写一个五子连珠的小游戏, 游戏由两人对弈,用鼠标操作,执黑子者先下。
1.2 读者对象
计算机专业的学生或对编程感兴趣的学生
1.3 软件项目概述
项目名称:五子棋游戏 简称:五子棋 项目代号:无 软件项目的大致功能和性能要求
4、界面要求
人机界面要容易操作,有比较舒适的背景,遇到禁手、悔棋、保存、胜利 等可弹出对话框。人机交互和谐。
5、测试方案
1. 检验判断胜利:
6
程序设计课程设计报告书
若胜利,则弹出对话框,并显示是何种胜利 2. 检验禁手
7
程序设计课程设计报告书
以上仅列出六种禁手,当然还有跟多情况 3. 检验保存
当按下“保存”图标菜单时,会弹出对话框,可给棋局取个文件名,如“1” 然后单击“保存(S)” 4. 检验打开 重现打开游戏,按下“打开”图标菜单,现在打开“1” 会显示对话框,选择要打开的文件“1” 单击“打开”,则会复盘,显示上次未完成的游戏,继续对弈 5. 悔棋(有个撤销按钮,不便验收展示) 6. 综上,基本实现新局、保存棋局、打开棋局、悔棋、禁手、判断胜利
1.1 编写目的..............................................................................................................................4 1.2 读者对象..............................................................................................................................4 1.3 软件项目概述......................................................................................................................4 1.4 文档概述..............................................................................................................................4 1.5 定义......................................................................................................................................5 1.6 参考资料..............................................................................................................................5 2、任务概述....................................................................................................................................... 5 2.1 目标....................................................................................................................................... 5 2.2 软件的开发和运行环境.......................................................................................................5 2.3 用户特征..............................................................................................................................5 2.4 假设与约束..........................................................................................................................5 2.5 进度要求..............................................................................................................................5 2.6 验收要求...............................................................................................................................5 3、功能需求描述............................................................................................................................... 6 3.1 基本功能........................................................................................... 错误!未定义书签。 3.2 增加功能........................................................................................... 错误!未定义书签。 4、界面要求....................................................................................................................................... 6 5、测试方案....................................................................................................................................... 6 6、功能设计..................................................................................................................................... 10 6.1 类的关系描述.....................................................................................................................10 6.2 类的设计............................................................................................................................. 11 7、使用指南..................................................................................................................................... 11 8、维护接口..................................................................................................................................... 11 9、总结............................................................................................................................................. 12

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

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

c语言五子棋课程设计报告一、前言五子棋作为一种智力游戏,在我国有着悠久的历史和广泛的群众基础。

本次设计的目的是使用C语言实现五子棋游戏,通过此次课程设计,学生将掌握C语言的编程思想和开发方法,同时了解五子棋游戏的规则和策略。

二、五子棋游戏规则五子棋游戏是在15*15的棋盘上进行,由黑白双方轮流落子,先将五个同色棋子连成一条线的一方获胜。

落子的位置必须为空,不能与已有的棋子重叠。

黑方先手,白方后手。

下图为五子棋棋盘示意图。

三、五子棋游戏实现本次课程设计采用C语言实现五子棋游戏,主要包括棋盘的绘制、落子的判断和胜负的判断等功能。

1.棋盘的绘制棋盘的绘制采用双重循环实现,将15*15的棋盘分成225个小格,其中包括14个横线和14个竖线,以及4个角上的点。

通过循环输出字符实现棋盘的绘制。

2.落子的判断落子的判断主要包括鼠标的点击和棋子的绘制两个部分。

当鼠标点击棋盘上的一个位置时,程序会根据当前轮到哪方落子来绘制相应颜色的棋子,并将该位置的状态改为已有棋子。

同时,程序会检查当前落子是否符合规则,即该位置是否为空,如果不为空则重新等待鼠标点击。

3.胜负的判断胜负的判断主要包括横向、纵向、斜向和反斜向四个方向。

通过判断当前落子位置在这四个方向上的连续棋子数是否达到五个来确定胜负。

如果达到五个,则程序会弹出相应的提示框,显示胜利方。

四、总结通过本次课程设计,学生掌握了C语言的编程思想和开发方法,同时了解了五子棋游戏的规则和策略。

本次设计主要包括棋盘的绘制、落子的判断和胜负的判断等功能。

希望本次课程设计能够增强学生的编程能力和对五子棋游戏的理解。

QT-五子棋游戏设计-课程设计报告

QT-五子棋游戏设计-课程设计报告

2013-2014学年秋季学期《Windows程序设计》课程设计报告学院:计算机与信息学院序号: 56姓名:周春雷学号: 2012112302指导教师:王安慧完成时间 2014 年 05月29日目录一、课程设计的目的 (1)二、课程设计的容及要求 (1)三、关键技术及相关原理介绍 (1)四、系统的总体设计 (2)五、设计思路及关键问题的解决方法 (3)六、设计模块分类 (4)1. 输入模块 (4)2. 输出模块 (6)3. 判断模块 (7)①判断输赢模块 (7)②判断命令模块 (11)七、运行结果截屏 (13)一、课程设计的目的通过所学的知识和技术,在老师的帮助下以及自己查询资料,完成对五子棋游戏的编程实现,使程序支持人人战,并且可以完成判断输赢,悔棋,从新开始等基本功能。

本次课程设计的课题简单,且娱乐性强。

在完成课题的过程中可以很好的复习学过的知识和技术,并且在完成设计编程后,可以很大程度上提高自信心和好学心,同时在做的过程中遇到难题能主动查阅资料、寻求帮助,对团队协作以及对网络资源的有效利用有了更深的体会。

二、课程设计的容及要求课程设计的容:本次设计将提供一个“五子棋”的游戏程序,可完成的功能有“人与人对战”、悔棋、开始新游戏。

课程设计的要求:使用QT软件开发,语言使用C++。

三、关键技术及相关原理介绍本系统主要分为输入模块、输出模块和判断模块这三大块。

各模块依据所属功能的不同来划分。

输入模块主要实现用户对数据的输入,输出模块则是完成对用户输入到系统的数据在棋盘上的显示,而判断模块这是系统的主要模块,完成对用户输赢的判断和对用户悔棋和从新开始等操作命令的响应。

本次采用了QT进行程序设计,对于图形界面有较好的处理方法和环境。

四、系统的总体设计图1:系统功能模块图图1是系统的总体模块图,依据系统的不同功能包含3个大的模块:输入模块,判断模块和输出模块。

各个模块的具体代码实现和功能描述在后面将详细的解释。

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

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

《软件基础》大作业项目名称:五子棋游戏学号: 05姓名:校建林朱颖完成时间: 2011年11月28日指导教师:鲁可目录一需求分析 (1)1.1开发背景 (1)1.2项目目标五子棋与游戏开发成员和具体日期完成任务以及任务的具体分配. . . . . . . . . . . . . . . . . . . . 11.3运行环境...初始化. (3)1.4项目任务书主循环控制模块 (3)1.5玩家下子 (3)1.6盘面分析填写棋型表 (3)1.7对方下子 (4)1.8胜负判断 (4)二技术线路 (4)2.1采用的软件及开发平台是什么2.2项目的总体方案—包括模块及模块间的联系、信息流、数据流等2.3项目的详细设计—包括模块的功能、数据结构及算法等2.1技术线路模块图 (4)2.2技术线路说明 (5)三工程进度第三章系统设计 (5)3.1流程图 (6)3.2流程图说明 (6)四程序测试分析 (7)4.1阶段性测试4.2总体测试五个人总结 (9)附录源代码 (10)五子棋游戏第一章需求分析1.1开发背景软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。

对于任何一个软件而言,需求分析工作都是至关重要的一步。

只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。

实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。

软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。

具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。

基于本游戏,首先得为整个棋盘建立一表格用以记录棋子信息,我们使用一个15*15的二维数组Table[15][15](15*15是五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’代表对方的子;这表也是今后分析的基础。

【报告】c五子棋实验报告

【报告】c五子棋实验报告

【关键字】报告c五子棋实验报告篇一:五子棋对战实验报告实验项目五子棋网络对战和聊天实验日期XX0406实验报告要求:一、实验目的:学习和使用socket编程,熟练软件开发二、实验原理:使用socket进行网络通信,java作为编程语言三、实验要求:编写五子棋程序可以实现联机网络对战,并且可以进行聊天四、实验步骤、结果(程序+注释+截图)及分析:首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。

1、然后考虑使用java的swing包,创建ClientChessPanel类负责棋盘部分,包括判断输赢,使用数组chesses[i][j]记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。

drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。

importjavax.swing.*;importjava.awt.*;;importChatOneToOneClient.Clientskt;classClientChessPanel extends JPanel{private static final long serialVersionUID = 1L;private int space=20; //网格间的距离private int grids=30; //棋盘的网格数private int radius=space/2; //棋的半径Clientsktskt;//当chesses[i][j]=0,表示网格节点(i,j)上无棋//当chesses[i][j]=1,表示网格节点(i,j)上放白棋//当chesses[i][j]=2,表示网格节点(i,j)上放黑棋privateint[][] chesses=new int[grids+1][grids+1];private intcurrColor=1; //当前棋的颜色privateMouseListenerplayChessHandler=new MouseAdapter(){public void mouseClicked(MouseEvent e){if(skt.reMouseGo()){int x=e.getX();int y=e.getY();//放一颗棋子if(x=0 && y=0)if(chesses[round(x)][round(y)]==0){chesses[round(x)][round(y)]=currColor;repaint(); //刷新图形skt.dataout("x:"+String.valueOf(round(x)));skt.dataout("y:"+String.valueOf(round(y)));skt.setMouseGo(false);if(gameOver(currColor)){skt.dataout("g:你输了");ClientMyDialog(skt.chat,"你赢了");;}currColor=currColor==1?2:1; //切换棋子的颜色}}}};public int round(float a){ //获得接近a的网格节点坐标float f=a/space;returnMath.round(f);}publicClientChessPanel(intspace,intgrids,Clientsktskt){ this.space=space;this.grids=grids;this.radius=space/2;this.skt=skt;setBackground(Color.BLUE);setSize(space*grids,space*grids);addMouseListener(playChessHandler);startChess();}public void startChess(){clearGrids(); //清空棋盘currColor=1;repaint(); //刷新图形private void clearGrids(){for(inti=0;i for(int j=0;j chesses[i][j]=0;}//画一颗棋子private void drawChess(Graphics g,intx,inty,int color){g.setColor(color==1?Color.GREEN:Color.BLACK);g.fillOval(x*space-radius,y*space-radius,radius*2,radius*2);}//画网格private void drawGrids(Graphics g){g.setColor(Color.DARK_GRAY);for(inti=0;i g.drawLine(0,i*space,grids*space,i*space);g.drawLine(i*space,0,i*space,grids*space);}}//接收对方下的棋坐标public void paintChess(intx,int y){if(x=0 && y=0){if(chesses[x][y]==0){chesses[x][y]=currColor;currColor=currColor==1?2:1; //切换棋子的颜色skt.setMouseGo(false);skt.setMouseGo(true);repaint(); //刷新图形}}}//判断游戏是否结束publicbooleangameOver(intgameOver){int five=0;//用于判断是否有连续5个子for(inti=0;i for(int j=0;j if(chesses[i][j]==gameOver){five++;for(in(本文来自:小草范文网:c五子棋实验报告)t k=1;k if(chesses[i][j+k]==gameOver){five++;if(five==5){return true;}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j+k]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k4;k++){//左斜向比较if(chesses[i+k][j-k]==gameOver){five++;if(five==5){return true;}}else{five=1;}}}}five=0;}return false;}public void paintComponent(Graphics g){ //覆盖paintComponent()方法super.paintComponent(g); //必须先调用父类的方法drawGrids(g); //画网格for(inti=0;i for(int j=0;j if(chesses[i][j]!=0)drawChess(g,i,j,chesses[i][j]); //画棋子}}2、ClientComponentPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。

C语言图形五子棋课程设计报告(同名10005)

C语言图形五子棋课程设计报告(同名10005)

C语言图形五子棋课程设计报告(同名10005)北京师范大学C语言课程设计报告课题名称:游戏五子棋指导教师:尹乾课题组员:罗福莉赵帅帅何虹达院系:信息科学与技术时间: 2014.3.15-2014.4.20摘要五子棋是一种两人对弈的纯策略型棋类游戏,应用C语言编写程序可以在计算机上实现二人对弈五子棋功能。

二人对弈五子棋程序由欢迎界面显示、游戏界面生成、光标移动与落子、判断胜负、悔棋功能、提供音效等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。

程序通过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人五目录摘要--------------------------------------------------- 3 第1章:需求分析 ---------------------------------------- 61.1五子棋背景------------------------------------- 61.2 五子棋需求分析和流程设计----------------------- 7 第2章:概要设计 --------------------------------------- 122.1 各类头文件和全局变量-------------------------- 122.2 画面显示模块---------------------------------- 13 第3章:详细设计 --------------------------------------- 163.1 玩家操作模块---------------------------------- 163.2音效提供模块 ---------------------------------- 173.3 胜负判断模块---------------------------------- 17 第4章:调试分析 --------------------------------------- 184.1 图形模块-------------------------------------- 18 4.2 玩家操作模块 ------------------------------------ 194.3 胜负判断模块---------------------------------- 20第5章:用户手册 --------------------------------------- 20 第6章:小组分工 --------------------------------------- 21 第7章:结论与心得 ------------------------------------- 21 第8章:源程序代码 ------------------------------------ 22 附录一 Color命令的使用说明------------------------ 44 附录二 ASCII 码表 ----------------------------------- 44第1章:需求分析1.1五子棋背景传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为18×18,棋子放置于棋盘线交叉点上。

五子棋实验报告(含代码)

五子棋实验报告(含代码)

实验报告实验一五子棋游戏北方工业大学 2013级计算机技术米鹏一、实验原理及方法五子棋游戏开发借用Visual Studio 2012软件开发平台,选用C#语言进行编写。

整体程序主要分为三部分:界面操作部分、AI逻辑部分和棋子定点分析部分。

1、界面操作部分界面操作部分代码主要针对图像呈现、对应矩阵存储、下棋过程控制等可见的操作环节进编写。

同时负责整个程序的初始化工作。

图像呈现采用C#中Graphics进行绘制。

棋盘被划分为15行15列,每个划分出的小方格均为30*30的正方形,棋盘可操作的范围规定在(20,20)、(460,460)两点的确定的正方形区域内。

通过鼠标左击来确定下子地点。

程序会根据鼠标鼠标点击的位置进行计算,计算得到时对应矩阵的行列,之后再改变对应矩阵的内容后,在通过行列值乘以小方格边长计算得到在显示区域中的具体位置,再稍加变动后画到显示区域中。

以X点坐标为例,下面是计算X(Column)的流程图:在对应矩阵存储方面,后面AI逻辑和棋子分析所用到的矩阵都是来源这里。

同时AI 逻辑和棋子分析不能去修改对应矩阵内容。

图像呈现点的位置、重绘的根据都是来源这里。

在下棋过程控制方面采用信号亮的机制,当操作者下过后,根据信号AI会立即计算将要下点的位置同时改变信号亮变量。

当AI下过棋子后,由于信号亮的的限制就等待操作者去下棋,同时改变信号亮变量内容。

AI和操作者的所有下子、修改矩阵、显示棋子的过程都是统一的。

在每一盘游戏开始时程序会对一些重要的变量进行初始化这里包括矩阵、信号亮、第一步棋子颜色、呈现图像等内容进行初始化。

同时AI会在棋盘中央下第一子。

2、AI逻辑部分AI逻辑部分算是整个程序策略的灵魂。

其中的一些关键性判别的前后关系将影响AI 的下棋的结果。

同时加大和降低AI的难度也是这里。

下面是我设计的策略过程:从下棋者的考虑角度进行考虑,尽可能保证每一次下子都是有必要的、都是在情理当中的。

我所设计的策略并不是完整,漏洞在与没有考虑三棋子连续的情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《软件基础》大作业项目名称:五子棋游戏学号:201046820510201046820605姓名:校建林朱颖完成时间:2011年11月28日指导教师:鲁可目录一需求分析 (1)1.1开发背景 (1)1.2项目目标五子棋与游戏开发成员和具体日期完成任务以及任务的具体分配. . . . . . . . . . . . . . . . . . . . 11.3运行环境...初始化. (3)1.4项目任务书主循环控制模块 (3)1.5玩家下子 (3)1.6盘面分析填写棋型表 (3)1.7对方下子 (4)1.8胜负判断 (4)二技术线路 (4)2.1采用的软件及开发平台是什么2.2项目的总体方案—包括模块及模块间的联系、信息流、数据流等2.3项目的详细设计—包括模块的功能、数据结构及算法等2.1技术线路模块图 (4)2.2技术线路说明 (5)三工程进度第三章系统设计 (5)3.1流程图 (6)3.2流程图说明 (6)四程序测试分析 (7)4.1阶段性测试4.2总体测试五个人总结 (9)附录源代码 (10)五子棋游戏第一章需求分析1.1开发背景软件需求分析是软件开发周期的第一个阶段,也是关系到软件开发成败的关键一步。

对于任何一个软件而言,需求分析工作都是至关重要的一步。

只有通过软件需求分析,才能把软件的功能和性能由总体的概念性描述转化为具体的规格说明,进而建立软件开发的基础。

实践表明,需求分析工作进行得好坏,在很大程度上决定了软件开发的成败。

软件需求分析的任务是:让用户和开发者共同明确将要开发的是一个什么样的软件。

具体而言,就是通过对问题及其环境的理解、分析和综合,建立逻辑模型,完成新软件的逻辑方案设计。

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

在此之后还要为两个玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型数据。

1.2 项目目标五子棋与游戏开发具体任务完成日期以及任务的具体分配五子棋游戏开发成员:校建林、朱颖。

五子棋游戏开发具体的任务步骤:1.需求分析内容包括:总体分析、五子棋与游戏开发成员和具体任务完成日期以及任务的具体分配、初始化、主循环控制模块、玩家下子、盘面分析填写棋型表、对方下子、胜负判断。

2.技术线路内容包括:采用的软件及开发平台是什么。

项目的总体方案—包括模块及模块间的联系、信息流、数据流等。

项目的详细设计—包括模块的功能、数据结构及算法等。

技术线路模块图技术线路模块图、技术线路说明。

3.系统设计内容包括:流程图、流程图说明。

4.程序测试分析5.总结。

6.源代码。

2.具体日期完成任务1.第五周完成任务:完成具体的需求分析中的总体分析、五子棋与游戏开发成员和具体任务完成日期以及任务的具体分配、初始化、主循环控制模块等部分内容的任务。

2.第六周完成任务:完成具的需求分析中的玩家下子、盘面分析填写棋型表、对方下子、胜负判断等部分内容的任务。

3.第七周完成任务:完成具的功能描述的功能模块图、功能说明部分内容的任务。

4.第八周完成任务:完成具的系统设计的流程图、流程图说明部分内容的任务。

5. 第九周完成任务:完成具的程序测试结果部分内容的任务。

6.第九周完成任务:完成具的五子棋游戏源代码中的初始化程序任务。

7.第九周完成任务:完成具的五子棋游戏源代码中的主循环控制模块程序任务。

8.第十周完成任务:完成具的五子棋游戏源代码中的玩家下子的有关程序任务。

9.第十一周完成任务:完成具的五子棋游戏源代码中的盘面、棋型的有关程序任务。

10.第十二周完成任务:完成具的五子棋游戏源代码中的对方下子的有关程序任务。

11.第十二周完成任务:完成具的五子棋游戏源代码中的整体程序任务。

12.第十三周完成任务:完成具的系统设计的流程图、流程图说明部分内容的任务。

13..第十四周完成任务:完成具的程序测试结果以及总结部分内容的任务。

3.五子棋游戏开发具体任务的具体分配1.校建林、朱颖共同完成需求分析任务。

-2. 校建林完成具体的需求分析中的总体分析、五子棋与游戏开发成员和具体任务完成日期以及任务的具体分配、初始化、主循环控制模块等部分内容的任务。

3.朱颖完成具的需求分析中的玩家下子、盘面分析填写棋型表、对方下子、胜负判断等部分内容的任务。

4.校建林、朱颖共同完成具的功能描述的功能模块图、功能说明部分内容的任务。

5. 校建林、朱颖共同完成具的系统设计的流程图、流程图说明部分内容的任务。

6. 校建林完成具的程序测试结果部分内容的任务。

7. 校建林、朱颖共同完成具的五子棋游戏源代码中的初始化程序任务。

8. 校建林、朱颖共同完成具的五子棋游戏源代码中的玩家下子的有关程序任务。

10. 校建林完成具的五子棋游戏源代码中的玩家下子的有关程序任务。

11. 朱颖完成具的五子棋游戏源代码中的盘面、棋型的有关程序任务。

12.校建林、朱颖共同完成具的五子棋游戏源代码中的对方下子的有关程序任务。

13.校建林、朱颖共同完成具的五子棋游戏源代码中的整体程序任务。

14. 校建林、朱颖共同完成具的系统设计的流程图、流程图说明部分内容的任务。

15. 校建林、朱颖共同完成具的程序测试结果以及总结部分内容的任务。

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

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

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

1.6 盘面分析填写棋型表您在下五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中选择落子点。

先来分析己方的棋型,我们从棋盘左上角出发,向右逐行搜索,当遇到一个空白点时,以它为中心向左挨个查找,如果遇到己方的子则记录然后继续,如果遇到对方的子、空白点或边界就停止查找。

左边完成后再向右进行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到Computer[x][y][n]中就行了(x、y 代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向)。

而其他三个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。

然后再用同样的方法填写对方棋型表。

注意:所有棋型的编号都要事先定义好,越重要的号数越大!1.7 对方下子有了上面填写的两张棋型表,就是遍历棋型表Computer[15][15][4]和Player[15][15][4]找出其中数值最大的一点,在该点下子即可。

但这种算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”的毛病。

如果在这儿下子将会形成对手不得不防守的棋型(例如:‘冲四’、‘活三’);那么下一步对手就会照您的思路下子来防守您,如此一来便完成了第一步的预测。

这时再调用模块4对预测后的棋进行盘面分析,如果出现了‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了(当然对黑棋而言‘双三’、‘双四’是禁手,另当别论);否则照同样的方法向下分析,就可预测出第二步、第三步……等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢?进攻不成的话就得考虑防守了,将自己和对手调换一下位置,然后用上面的方法来预测对手的棋,这样既可以防住对手巧妙的攻击,又能待机发动反击,何乐而不为呢!1.8 胜负判断务须多言,某方形成五子连即获胜;若黑棋走出‘双三’、‘双四’或长连即以禁手判负。

第二章技术线路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]严蔚敏,吴伟民.数据结构.北京:清华大学出版社,2010年[2]苏仕华,魏韦巍,王敬生,刘燕君.数据结构课程设计(第二版).北京:机械工业出版社,2010年[3]谭浩强.C程序设计(第二版).北京:清华大学出版社,1999年[4]谭浩强.C++程序设计.北京:清华大学出版社,2009年附录二源代码#include<iostream.h>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<<a[i][j];cout<<endl;}}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子获胜"<<endl; break; }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子获胜"<<endl; break; }if(he(a))//判断是否平局{cout<<"平局"<<endl; break;}}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;}。

相关文档
最新文档