五子棋C++实验报告

合集下载

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

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

实验报告实验一五子棋游戏北方工业大学 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的难度也是这里。

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

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

c五子棋课程设计报告

c五子棋课程设计报告

c五子棋课程设计报告一、课程目标知识目标:1. 学生理解五子棋的基本规则,掌握棋盘布局、棋子走法等相关知识。

2. 学生了解五子棋的历史背景,了解我国棋文化的发展。

3. 学生掌握基本的五子棋策略,如防守、进攻、布局等。

技能目标:1. 学生能够熟练进行五子棋对弈,具备一定的竞技水平。

2. 学生能够运用所学策略进行棋局分析,提高解决问题的能力。

3. 学生能够通过五子棋锻炼思维,提高逻辑思维和判断能力。

情感态度价值观目标:1. 学生培养对五子棋的兴趣,激发学习棋类游戏的热情。

2. 学生在五子棋学习过程中,培养团队协作精神,增进同学间的友谊。

3. 学生通过五子棋学习,体会竞技精神,树立正确的竞争观念。

课程性质分析:本课程为兴趣选修课程,结合五子棋的竞技性和趣味性,旨在提高学生的逻辑思维和竞技水平。

学生特点分析:五年级学生具备一定的认知能力和自学能力,对新鲜事物充满好奇,喜欢竞技类游戏。

教学要求:1. 教师应关注学生的个体差异,因材施教,提高学生的学习兴趣。

2. 教师应注重理论与实践相结合,让学生在实践中掌握五子棋技能。

3. 教师应关注学生在学习过程中的情感体验,培养学生的竞技精神和团队协作能力。

二、教学内容1. 五子棋基本知识:- 棋盘与棋子:介绍五子棋的棋盘布局、棋子走法及胜负判定规则。

- 历史背景:讲解五子棋的起源、发展及在我国棋文化中的地位。

2. 五子棋基本策略:- 防守策略:教授学生如何防守对手的进攻,保持棋局平衡。

- 进攻策略:指导学生运用有效进攻手段,制造对手的困境。

- 布局策略:讲解如何合理布局棋子,为后续棋局发展奠定基础。

3. 五子棋实战技巧:- 棋型分析:教授学生识别不同棋型,提高棋局分析能力。

- 残局破解:训练学生解决棋局中出现的复杂局面,提高实战水平。

4. 教学进度安排:- 第一周:五子棋基本知识学习,了解棋盘、棋子及历史背景。

- 第二周:基本策略学习,掌握防守、进攻和布局策略。

- 第三周:实战技巧训练,提高棋局分析和实战能力。

五子棋游戏项目报告

五子棋游戏项目报告
一、需求分析
1。1 开发背景
五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美.五子棋容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。传统五子棋的棋子分为黑白两色,采用围棋棋盘,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个同色棋子连成不间断的一排者为胜.
16.显示已保存文档、有经典文档和继续文档int showSave(int choice);
本次作业历时十天时间,总的说起来可以分为三个部分:
3。1 前期准备部பைடு நூலகம்(第1-3天)
主要完成方案的讨论、资料的收集、流程图、算法等前期工作,编写报告中需求分析的一部分和总体方案的一部分及项目任务书。
第1天:选定题名,进行方案的讨论。收集资料,写出需求分析中的开发背景部分。
4。5第
测试人:崔广浩
测试内容:我们将在总体上对程序的运行效果和运行环境进行测试,以完善所有功能,达到软件的最优化!
测试过程:
首先我们测试了软件对运行环境的要求,我们先在Windows xp操作系统中运行了一遍,结果并无异常情况出现;随后我们在CPU只有1GHz频率的硬件系统中运行,也并未发现任何问题!我们基本上可以得出结论,我们的软件在一般的软、硬件环境下都能正常稳定地运行,对机子的配置基本没有什么要求,适合于广大的电脑拥有者使用!
第2-3天:商定算法,将软件总体分块,写出项目任务书.
3。2中期实现功能部分(第4—7天)
主要完成预先设想的基本功能和附加功能,完成项目文档中的技术路线和需求分析的剩余部分,完成调试报告中的单功能调适。
第4天:开始软件编写,完成棋盘的设计部分.完成下棋部分程序的编写,测试棋盘设计部分。完成悔棋部分程序的编写,测试下棋部分程序。

五子棋课程设计实验报告

五子棋课程设计实验报告

C语言程序设计报告题目: 五子棋班级: 电气Q1041班人数: 3人小组成员: 周啸天、万广富、黄山奇指导老师:桂超时间: 2011.11.30目录第一章课程设计的目的和要求 (3)1.1 课程设计的目的 (3)1.2 课程设计的要求 (3)1.3 课程设计的实验环境 (3)第二章功能描述 (4)第三章总体设计 (5)3.1 功能模块设计 (5)3.1.1 任务执行流程图 (5)3.1.2 下棋函数流程图 (6)3.2 数据结构设计 (7)3.2.1 定义结构体 (7)3.2.2 定义数组 (7)3.2.3 全局变量 (7)3.3 函数功能描述 (7)第四章程序实现 (8)4.1源码分析 (8)4.2运行结果及界面介绍 (22)第五章后记 (27)第一章课程设计的目的和要求1.1 课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。

1.2 课程设计的要求1、编写程序代码,调试所写程序使其能够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3 课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。

本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp软件环境:安装VC++6.0第二章功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。

【报告】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 五子棋实验报告

c  五子棋实验报告

c 五子棋实验报告
C五子棋实验报告
引言
五子棋是一种古老的策略游戏,它既考验了玩家的思维能力,又具有很高的娱乐性。

在本次实验中,我们将利用C语言编程,设计一个简单的五子棋游戏,并对其进行实验测试。

实验目的
1. 学习使用C语言进行游戏开发;
2. 设计并实现一个简单的五子棋游戏;
3. 对游戏进行功能测试和性能评估。

实验方法
1. 使用C语言编写五子棋游戏的程序代码;
2. 设计游戏界面和用户交互功能;
3. 实现游戏规则和胜负判定功能;
4. 进行功能测试和性能评估。

实验结果
经过实验,我们成功地设计并实现了一个简单的五子棋游戏。

游戏具有清晰的界面和简单的操作方式,玩家可以轻松上手。

在功能测试中,游戏能够正确判定胜负,且没有出现明显的bug。

在性能评估中,游戏在常见的操作系统上都能够流畅运行,响应速度较快。

实验结论
通过本次实验,我们学习到了使用C语言进行游戏开发的基本方法和技巧。


们成功地设计并实现了一个简单的五子棋游戏,并对其进行了功能测试和性能
评估。

实验结果表明,我们的游戏具有良好的稳定性和性能表现,能够满足玩
家的基本需求。

展望
在未来,我们可以进一步完善游戏的功能和界面设计,增加更多的游戏模式和
挑战性。

我们也可以考虑将游戏移植到其他平台上,以提供更广泛的游戏体验。

同时,我们还可以利用更先进的技术和算法,进一步优化游戏的性能和用户体验。

总之,我们将继续努力,不断改进和完善我们的五子棋游戏,为玩家提供
更好的游戏体验。

c语言报告五子棋

c语言报告五子棋

青岛理工大学《C语言程序设计》题目游戏五子棋指导教师:李兰姓名:王鹏学号:200907127班级:计算094专业:计算机科学与技术地点:二号实验楼第六机房时间: 6.28 至7.1一、内容游戏五子棋在这个小游戏中,实现了两人对战的游戏模式,没有添加禁手规则,另外考虑到落子时的可能失误,就添加了悔棋工具,游戏过程中可以进行游戏存档,进入悔棋和存档的方法为将光标移动到已有子的位置,敲一下落子键即可。

下次游戏时候可以进入存档界面然后选择读取游戏存档即可继续玩上次的游戏。

在游戏时自动计算双方各胜几局,平几局。

按键控制一号玩家:上:w 下:s 左: a 右 : d 落子: f二号玩家:上:I 下:k 左: j 右: l 落子: h二、上机环境操作系统:Windows 98/XP/Win 7开发工具:VC++6.0三、函数调用关系图四、各函数功能说明对每个函数功能加以说明,说明该函数主要实现了什么内容。

1 int main() 主函数2 system(“color 5a”) 控制台前景、背景颜色设置3 system(“cls”) 清屏4 Printsjm(void) 输出游戏首界面5 start(void) 界面初始化6 print(void) 界面刷新7 check(void) 检测是否有一方赢棋8 checkheqi(void) 检测是否和棋9 zq(int,char (*p)[],char (*p)[]) 走棋落子10 huiqi(char (*p)[]) 悔棋11 jilu(char (*p)[]) 记录上次落子前的界面12 cundang(void) 存储游戏进度13 duqu(void) 读取游戏进度14 fuzhi(void) 保存临时界面15 huifu(void) 恢复临时界面以实现光标移动16 newdata(void) 数据刷新五、算法描述或流程图system(“color 5a”)和system(“cls”) 只需要调用<stdlib.h>头文件,并在使用前将要声明的变量声明好即可。

五子棋c#实训报告

五子棋c#实训报告

九江学院实训报告实训名称:Java编程指导老师:李兴南雷波姓名:肖世明学号:***********班级:理学A1221提交日期:2015年10月20日1.实训目的:通过本实训,应达到如下目标:理解委托的概念,掌握线程之间通过委托与控件交互的方法。

理解异常处理的机制,掌握异常处理语句的用法。

理解线程的概念,掌握多线程编程的一般方法。

掌握基于TCP的应用编程技术。

2.实训题目:通过开发一款网络对战五子棋游戏,熟练掌握Java网络编程技术,亲历一个项目开发的流程3.功能描述:程序基本功能描述如下:实训项目要求使用Java编程语言,基于客户机/服务器(C/S)模式,开发一款网络对战五子棋游戏。

服务器端可以支持多玩家同时在线游戏。

玩家可以通过客户端登陆到服务器端与其它玩家进行五子棋游戏对战。

项目基本要求描述如下:1.当服务器“启动服务”之后,可以允许玩家连接服务器;当服务器“停止服务”之后,不允许玩家连接服务器。

2.玩家请求登陆时需提交用户名,在没有“满员”和“重名”的情况下,服务器允许玩家登陆;在“满员”或“重名”的情况下,服务器拒绝玩家登陆。

3.玩家登陆成功之后,进入“游戏大厅”界面,并获得其他在线玩家的信息,其他玩家也能获得该玩家的信息。

4.玩家注销登陆之后,断开与服务器的连接,并关闭“游戏大厅”界面。

5.玩家“落座”之后,进入“游戏桌”界面,并获得该桌玩家的信息。

如果有对家落座,对家也能获得该玩家落座的信息。

其他玩家也能获得该玩家的状态的改变。

6.玩家“起身”之后,进入“游戏大厅”界面。

如果有对家落座,对家也能获得该玩家起身的信息。

其他玩家也能获得该玩家的状态的改变。

7.玩家“请求开始”游戏之后,初始化“棋盘”界面,玩家进入“就绪”状态。

如果有对家也处于“就绪”状态,则开始游戏。

其他玩家也能获得该玩家的状态的改变。

8.游戏开始之后,首先黑方“行棋”,之后双方轮流行棋。

9.玩家“落子”之后,对家也能获得“棋盘”状态的改变。

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

(此文档为word格式,下载后您可任意编辑修改!)一、需求分析1.1开发背景电脑游戏行业经过二十年的发展,已经成为与影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,其年销售额超过好莱坞的全年收入。

互联网的出现为电脑游戏行业发展注入了新的活力,凭借信息双向交流、速度快、不受空间限制等优势,让真人参与游戏,提高了游戏的互动性、仿真性和竞技性,使玩家在虚拟世界里可以发挥现实世界无法展现的潜能,改变了单机版游戏固定、呆板、与机器对话的状况。

网络游戏的这些优势不仅使其在电脑游戏行业中异军突起并在某种程度上取代了单机版游戏,而且成为网络业三大(网上金融、网上教育和网络游戏)赢利且利润优厚的领域之一。

网络作为一种新兴的传播方式,主要包括三大内容:娱乐、资讯、通讯。

提到网络娱乐,过去主要指的是单机版游戏,没有引入网络的概念但随着科技的发展,游戏娱乐产业也在成长目前,国内的游戏娱乐产业正处于起步阶段,特点表现为:第一,它是一种文化的传播。

娱乐产业可以潜移默化地改变人的观念,当前,很多多媒体的播放已被电脑网络所取代。

第二,网络游戏加强了人与人的沟通。

第三,网络游戏具有一定的教育意义。

网络游戏所具有的角色扮演的功能,使得玩家能通过互助更好地完成游戏中的各项任务。

网络无国界,游戏在网络文化产业世界的发展中地位会越来越高。

目前在国外,休闲游戏如棋类等,玩家的年龄跨度非常大,这和我国目前网游市场以青少年为主要消费人群的状况截然不同。

其实,网络可以解决空间的问题,网络和生活越来越息息相关,因此,开辟适合各个年龄层的游戏产品迫在眉睫。

同时,这也涉及到一个企业开发的能力。

娱乐产业发展到一定程度,通过不断锻炼和经验的积累,完全可以通过融入娱乐的成分把教条的东西深入浅出地展现给消费者。

就国内的发展来看,最近這两三年内国内的游戏公司如雨后春笋般的成立,所开发或代理的网络游戏更是不胜枚举。

以全球游戏业界的发展来看,這几年韩国的表现最为突出,特別是在网络游戏的技术研发兴游戏制作,其所发行的网络游戏更成为全球游戏产业重要的指标之一。

去年在美国洛杉矶所举行的 E3(Electronic Entertainment Exposition)展中,已经有几家的韩国厂商挤入世界第一线的游戏开发厂商之列。

近几年来,由于 3D 硬体绘图技术的突破,使得即时描绘的书面越来越精致,而且3D遊戏性更多元化更逼近真实世界,因此在遊戏产业中,3D 游戏已经逐渐取代2D游戏为游戏市场的主流,即使是网络游戏,也慢慢趋向3D化。

然而游戏3D化将会带来的游戏开发上的困难等问题,这些问题以后都需要逐步解决。

人们面对电脑的时间越来越多,面对身边的人的时间越来越少,所以我们游戏所要达到的目的就是加大人们之间的沟通,让大家随时随地都可以体验到玩游戏的乐趣。

而三子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。

同样的,通过这个游戏,既能在休闲时刻娱乐一下,也能在压力面临的时候放松一刻。

1.2项目目标开发一个三子棋游戏。

该游戏基于DOS实现,其功能可概括为:一:玩家可以设定游戏的玩法,即在游戏开始时输入变量,决定选用三子棋或者四子棋;二:玩家可以设置期盼的大小,即在游戏开始时输入一变量n(n=3~9),使棋盘的大小为n*n。

;三:加入可以悔棋功能,要求任意方可以在对方下去后修改一步,即将对方当前步和本方上一步删除,本方重新下棋。

;四:下棋方法使用输入棋盘坐标,棋盘在每次下棋后刷新屏幕。

1.3运行环境软件:运行在Windows软件环境下;硬件:具有网络连接设备的PC机或笔记本电脑;最低配置:要求内存大于128M,硬盘大于1G。

本系统的设计是在Windows 7 RTM 7600.16385(X86)中文旗舰版操作系统环境下,使用Microsoft Visual C++ 6.0中文版开发成功的。

由于Visual C++ 6.0在不牺牲灵活性、性能和控制力度的同时,给C++带来更高水平的生产效率。

除了IntelliSense Technology(智能感应技术)和Edit and Continue (即编即调)等显著缩短开发时间的新特性外,Visual C++ 6.0还为Web开发和企业开发提供更良好的支持。

面向对象的程序设计Microsoft Visual C++ 6.0支持面向对象的程序设计,但它与一般的面向对象的程序设计语言(C++)不完全相同。

在一般的面向对象程序设计语言中,对象由程序代码和数据组成,是抽象的概念;而Microsoft Visual C++ 6.0则是应用面向对象的程序设计方法,把程序和数据封装起来作为一个对象,并为每个对象赋予应有的属性,使对象成为实在的东西。

在设计对象时,不必编写建立和描述每个对象的程序代码,而是用工具画在界面上,Microsoft Visual C++ 6.0自动生成对象的程序代码并封装起来。

每个对象以图形方式显示在界面上,都是可视的。

二、程序分析2.1函数分析主函数:void main() 连珠游戏主界面,显示两个选项:A:三子棋、B:四子棋;采用do(){}while()语句实现;类:在public中包含一个构造函数,两个输出棋盘函数分别为print1()、print2(),一个三子棋游戏的函数(Three()),一个四子棋游戏的函数(Four ()),同时还有游戏四个判断胜利的函数、悔棋函数,和获取游戏结果的函数;头文件:将类定义在名为Game一个头文件中,同时对类中的各个函数定义、初始化。

2.2程序流程图三、技术路线3.1总体方案3.1.1 采用的软件及开发平台在Windows 7的环境下,采用的是Microsoft公司的Visual C++作为开发平台。

利用面向对象的思想实现一个连珠游戏系统,具体使用了:体现OOP的抽象、封装、多态3种关键技术,构造了基于Game的游戏系统,从而实现游戏的各种功能。

3.1.2 总体方案先设计一个基本构架,然后往函数中逐步添加相应的子函数,一步步完善功能;3.2详细设计1.设置一个类Game();2.我们可以在此基础之上为类添加相应功能函数,如judge1()、regret()等函数;3. Three()或者Four()函数调用相应的功能函数,来实现游戏的对局;4. 主函数中启用输入选项,若是选择三子棋,则调用Game类中Three()函数;如果选择四子棋,则调用Game类中Four()函数;5.进入相应的游戏玩法,可以查看对应的游戏帮助;6.游戏中途,可以选择悔棋,悔棋时,只要输入玩家想要悔棋的坐标即可;7.游戏结束后,统计游戏结果,并输出。

类说明:class Game{public:Game(int M);void print1(); //输出棋盘(1)void print2(); //输出棋盘(2)void Three(); //三子棋双人对战void Four(); //四子棋双人对战int judge1(int ,int ); //判断三子棋中玩家1胜利int judge2(int ,int ); //判断三子棋中玩家2胜利int judge3(int ,int ); //判断四子棋中玩家1胜利int judge4(int ,int ); //判断四子棋中玩家2胜利void regret(int ,int ); //悔棋static int GetX(){ //获取X的值return X;}static int GetY(){ //获取Y的值return Y;}private:int N;static int X; //记录玩家一赢的次数static int Y; //记录玩家二赢的次数char game[10][10];};int Game::X=0;int Game::Y=0;其中,“Game”类直接定义在“Game.h”中,并且Game类中的函数也都是相应的在“Game.h”中写好。

并且静态变量“X”“Y”也都相应的初始化。

因为这个程序并没有使用继承这一C++特性,而且只采用了一个类。

但是,类中还是采用了抽象、封装、多态三种关键技术。

四、工程进度当任务分配下来的第二天,我们组对我们所选的题目三子连珠游戏设计进行了讨论。

也明确了各个成员的工作:组长负责编程,其他成员负责查资料和编辑实验报告。

经过讨论,我们确定了这个程序所涉及的函数,查资料的也积极的参与当中。

任务开始的第一个星期的周末,编程的组员开始写一些基本的代码,同时,负责查找资料的组员也上网搜索有关的资料以及其他人编写的程序,看看他们的思路是怎样的。

接下来经过几天的讨论,小组最终确定思路,就开始各种功能函数的编写,通过一步步的调试与修改,程序也渐渐完善,只是在悔棋部分还有点问题。

和其他小组的几位成员讨论了下,还是没有想出解决的办法。

然后一直卡在那里,我们不断查阅相关的资料,看相关的代码,最后终于实现了。

最后在基本要求都实现的情况下,组长想到了加入一下小功能,如分别统计玩家一、二的胜利情况,还有就是平局。

胜利情况很好判断,只需要用两个全局变量,就可是实现了。

但是平局判断的情况,思想是:当棋盘下满的时候仍未分出胜负,此时记为平局。

我们用一个局部变量来记录棋盘中已经存在的棋子数目,然后和棋盘大小比较,这样就可以判断了。

最后考虑了下,对于三子棋的游戏规则来说,因为是人人对战,只要是第一个下棋的人,那就一定赢;另外,在四子棋中,同样是人人对战,一般不会出现平均的可能性,所以最后决定去掉这项。

最后是写实验报告,小组成员具体分工,有负责编辑文字的,也有流画程图的,总之大家一起努力,共同完成了实验报告。

四、测试报告5.1 阶段测试在程序基本设计好的时候,我们对整个程序进行了一次比较系统的测试,对各个系统的主要功能也都用数据进行了检测,以确保程序的正确性,同时希望程序能够完成各种要求。

以下是这次测试的具体结果:系统主界面运行该程序,首先进入的是游戏系统的主界面,该界面给出了一个选择项,三子棋或者四子棋;测试各个群组的初始化功能三子棋游戏帮助输入‘A’选择三子棋游戏,同时选择游戏说明,了解游戏规则。

同时界面回到游戏选择项。

开始游戏选择“双人游戏”模式,在弹出选项后,输入选择,进行棋谱大小的初始化,并开始游戏。

初始化棋盘后,开始游戏对局,并没有采用想“AI”算法,或者其他算法,所以游戏并不是人机对局,而是用户自己对局。

同时,游戏对局是输入坐标来进行的。

以下是游戏部分截图(游戏中在每次下棋后刷新屏幕):悔棋为了验证悔棋功能,我们也进行了相关的数据处理和验证,部分截图如下:上图为悔棋前的截图:上图为开始悔棋到成功的截图:其他情况退出游戏四子棋游戏帮助输入‘B’选择三子棋游戏,同时选择游戏说明,了解游戏规则。

相关文档
最新文档