五子棋程序设计报告
- 格式:pdf
- 大小:324.78 KB
- 文档页数:18
计算机学院网络工程专业《程序设计综合课程设计》报告(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,双人五子棋要求能够进入欢迎界面,二人对弈,当有五颗同色棋子相连时,判断出输赢等一系列游戏流程。
目录1、引言 (3)1.1 编写目的 (3)1.2 读者对象 (3)1.3 软件项目概述 (3)1.4 文档概述 (4)1.5 定义 (4)1.6 参考资料 (4)2、任务概述............................................................... 错误!未定义书签。
2.1目标 (4)2.2软件的开发和运行环境 (5)2.3 用户特征 (5)2.4 假设与约束 (5)2.5 进度要求 (6)2.6验收要求 (6)3、功能需求描述与测试方案: (7)4、界面要求 (20)5、功能设计 (21)5.1类的关系描述 (21)5.2类的设计 (21)6、使用指南 (23)7、总结 (23)8、附录 (24)1、引言1.1 编写目的本文档为用户和软件设计者提供一个交流的平台。
在其中包含了用户所要求完成的功能,软件设计师实现的初步设想并最终实现的代码。
同时,为用户提供了使用的约束条件、使用手册,方便用户更好的使用本软件。
1.2 读者对象本文档的读者是最终验收者(教员和辅导员)。
1.3 软件项目概述●项目名称:五子棋游戏●简称:五子棋●项目代号:无●软件项目的大致功能和性能要求为:1)设计一个五子连珠类;2)记录游戏双方的游戏过程,允许悔棋;3)实现保存棋谱和根据棋谱复盘的功能;4)判断双方输赢,先走出五子连珠的一方胜;5)响应用户的鼠标消息,并显示棋盘信息;6)判断先下者落子时不允许走禁手。
1.4 文档概述本文档向用户和验收人员提供了一个很好的了解效果。
在文档中,有用户提出的需求(功能),有整个框架的具体描述,有每一个添加功能的具体实现代码以及测试结果。
最终具体描述了软件使用的说明。
1.5 定义五1.6 参考资料【1】《程序设计课程设计》国防科大印刷厂【2】《面向对象程序设计与Visual C++ 6.0教程》清华大学出版社【3】《Visual C++ 6.0 》人民邮电大学出版社【4】《Visual C++ 实用教程》电子工业出版社2、任务概述2.1目标用户提出需要设计出一个五子棋游戏,可以在任何的情况下都可以独立的运行。
《计算机网络》设计报告题目:局域网五子棋设计班级:计算机08.2班姓名:颜晓云指导教师:杨松波2011年7 月15日目录1、概论 .......................................................................... 错误!未定义书签。
2、功能介绍 ........................................................................ 错误!未定义书签。
3、程序流程图 .................................................................... 错误!未定义书签。
4、实现代码 ........................................................................ 错误!未定义书签。
5、总结体会 ....................................................................... 错误!未定义书签。
-6、参考文献 ........................................................................ 错误!未定义书签。
第一章绪论主要运用了GUI(用户图形界面)和API(应用程序借口)来实现。
当然,Event 监听器等也是这个程序的重要部分。
程序没有用到图片的引用,棋盘和棋子的设计完全是应用坐标来绘制,再加入按钮、及实现本游戏的用户界面布局。
程序编写的思路来源于网上和书上的资料,程序在编写过程中遇到的问题主要集中在前期的棋盘绘制和后期的棋子算法。
第二章功能介绍(1)程序在设计初就定义黑棋先行,白棋随后。
从第一个棋子开始开始相互顺序落子。
(2)通过坐标索引算出最先在棋盘的横向、竖向、斜向形成连续的相同色五棋子的一方为胜利。
c语言五子棋课程设计报告一、前言五子棋作为一种智力游戏,在我国有着悠久的历史和广泛的群众基础。
本次设计的目的是使用C语言实现五子棋游戏,通过此次课程设计,学生将掌握C语言的编程思想和开发方法,同时了解五子棋游戏的规则和策略。
二、五子棋游戏规则五子棋游戏是在15*15的棋盘上进行,由黑白双方轮流落子,先将五个同色棋子连成一条线的一方获胜。
落子的位置必须为空,不能与已有的棋子重叠。
黑方先手,白方后手。
下图为五子棋棋盘示意图。
三、五子棋游戏实现本次课程设计采用C语言实现五子棋游戏,主要包括棋盘的绘制、落子的判断和胜负的判断等功能。
1.棋盘的绘制棋盘的绘制采用双重循环实现,将15*15的棋盘分成225个小格,其中包括14个横线和14个竖线,以及4个角上的点。
通过循环输出字符实现棋盘的绘制。
2.落子的判断落子的判断主要包括鼠标的点击和棋子的绘制两个部分。
当鼠标点击棋盘上的一个位置时,程序会根据当前轮到哪方落子来绘制相应颜色的棋子,并将该位置的状态改为已有棋子。
同时,程序会检查当前落子是否符合规则,即该位置是否为空,如果不为空则重新等待鼠标点击。
3.胜负的判断胜负的判断主要包括横向、纵向、斜向和反斜向四个方向。
通过判断当前落子位置在这四个方向上的连续棋子数是否达到五个来确定胜负。
如果达到五个,则程序会弹出相应的提示框,显示胜利方。
四、总结通过本次课程设计,学生掌握了C语言的编程思想和开发方法,同时了解了五子棋游戏的规则和策略。
本次设计主要包括棋盘的绘制、落子的判断和胜负的判断等功能。
希望本次课程设计能够增强学生的编程能力和对五子棋游戏的理解。
课程设计报告:Java五子棋1. 背景五子棋是一种两人对弈的策略棋类游戏,它的目标是在一个棋盘上先将自己的五个棋子连成一条线,可以是横线、竖线、斜线等。
五子棋具有简单规则、易于上手、趣味性强等特点,因此在各个年龄段都备受欢迎。
本次课程设计旨在使用Java语言实现一个简单的五子棋游戏,并通过该项目来提高学生对面向对象编程和图形用户界面开发的理解和实践能力。
2. 分析2.1 需求分析根据五子棋游戏的规则,我们需要实现以下功能:•创建一个可视化的游戏界面,包括棋盘和落子提示•实现落子操作,玩家可以通过点击鼠标来在合法位置落下自己的棋子•判断胜负条件,当任意一方连成五个棋子时,游戏结束并宣布胜利者•提供重新开始和退出游戏的选项2.2 设计思路为了实现上述功能,我们将采取以下设计思路:•使用Java Swing库来创建游戏界面,包括棋盘和落子提示•使用二维数组来表示棋盘,并通过判断数组中的元素来确定当前位置是否已经有棋子•使用鼠标事件监听器来实现玩家的落子操作•使用算法判断胜负条件,例如遍历棋盘判断是否有五个连续的棋子•使用菜单栏和对话框来实现重新开始和退出游戏的选项3. 实现3.1 游戏界面设计我们将使用Java Swing库来创建游戏界面。
首先,我们需要创建一个主窗口,并设置其大小、标题和布局。
然后,在主窗口上添加一个棋盘面板和一个状态栏面板。
在棋盘面板上,我们使用GridLayout布局将其分割为15行15列的格子。
每个格子可以是一个按钮,用于玩家落子操作。
同时,我们还需要在每个格子上显示当前位置是否已经有棋子。
在状态栏面板上,我们将显示当前玩家的提示信息(轮到哪一方落子)以及胜利者信息(如果有)。
3.2 落子操作实现为了实现玩家的落子操作,我们需要使用鼠标事件监听器。
当玩家点击某个格子时,程序会捕捉到鼠标点击事件,并根据当前玩家的身份在对应的位置上落下棋子。
为了判断当前位置是否已经有棋子,我们可以使用一个二维数组来表示棋盘。
上海海事大学程序设计课程设计报告课程题目FIVE CHESS GAME作者姓名学号联系方式指导教师学科(专业)所在学院提交日期目录1引言 (3)1.1五子棋介绍 (3)1.2选题背景和动机 (3)1.3系统所要解决的问题 (3)2 系统框架 (5)2.1棋盘类 (6)2.1.1 主要成员变量说明: (6)2.1.2清空棋盘——Clear (6)2.1.3绘制棋子——Draw (6)2.1.4左键消息——OnLButtonUp (7)2.1.5载入棋盘 (7)2.1.6对方落子完毕——Over (7)2.1.7设置游戏模式——SetGameMode (7)2.1.8胜负的判断——Win (7)2.2游戏模式类 (8)3关键技术 (9)3.1 棋盘对话框的制作 (9)3.1.1 对话框机制 (9)3.1.3 棋子 (10)3.2 人机对弈 (10)3.2.1 难度的选择 (10)3.2.2 机器的落子判断 (11)4运行结果 (15)4.1开发环境及运行环境 (15)4.1.1开发环境 (15)4.1.2运行环境 (15)4.2运行图示 (15)4.2.1 棋盘显示 (15)4.2.2 开始的选择对话框 (16)4.2.3 主界面中的游戏难度选项 (16)4.2.4 电脑的应对 (17)5调试分析 (19)6总结 (21)参考文献 (22)1引言1.1五子棋介绍五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
【关键字】报告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语言编程,设计一个简单的五子棋游戏,并对其进行实验测试。
实验目的
1. 学习使用C语言进行游戏开发;
2. 设计并实现一个简单的五子棋游戏;
3. 对游戏进行功能测试和性能评估。
实验方法
1. 使用C语言编写五子棋游戏的程序代码;
2. 设计游戏界面和用户交互功能;
3. 实现游戏规则和胜负判定功能;
4. 进行功能测试和性能评估。
实验结果
经过实验,我们成功地设计并实现了一个简单的五子棋游戏。
游戏具有清晰的界面和简单的操作方式,玩家可以轻松上手。
在功能测试中,游戏能够正确判定胜负,且没有出现明显的bug。
在性能评估中,游戏在常见的操作系统上都能够流畅运行,响应速度较快。
实验结论
通过本次实验,我们学习到了使用C语言进行游戏开发的基本方法和技巧。
我
们成功地设计并实现了一个简单的五子棋游戏,并对其进行了功能测试和性能
评估。
实验结果表明,我们的游戏具有良好的稳定性和性能表现,能够满足玩
家的基本需求。
展望
在未来,我们可以进一步完善游戏的功能和界面设计,增加更多的游戏模式和
挑战性。
我们也可以考虑将游戏移植到其他平台上,以提供更广泛的游戏体验。
同时,我们还可以利用更先进的技术和算法,进一步优化游戏的性能和用户体验。
总之,我们将继续努力,不断改进和完善我们的五子棋游戏,为玩家提供
更好的游戏体验。
一、实习背景随着计算机技术的不断发展,编程已成为现代生活的重要组成部分。
为了提高自己的编程技能,培养自己的实际动手能力,我选择了五子棋程序设计作为实习项目。
五子棋是一种古老的中国传统棋类游戏,具有极高的趣味性和挑战性。
通过本次实习,我学习了Java编程语言,掌握了五子棋游戏的算法和实现方法,提高了自己的编程水平。
二、实习目标1. 熟练掌握Java编程语言的基本语法和常用类库;2. 掌握五子棋游戏的设计和实现方法;3. 学会使用面向对象编程思想进行程序设计;4. 培养自己的团队协作和沟通能力。
三、实习内容1. 系统设计在系统设计阶段,我首先分析了五子棋游戏的规则和特点,明确了游戏的基本功能,包括:棋盘显示、落子、判断胜负、悔棋等。
然后,我设计了五子棋游戏的基本架构,包括以下几个模块:(1)棋盘模块:负责棋盘的显示和落子操作;(2)落子模块:负责实现玩家的落子操作;(3)判断胜负模块:负责判断游戏是否结束,以及判断胜负;(4)悔棋模块:负责实现玩家的悔棋操作。
2. 算法设计五子棋游戏的算法主要包括以下几个部分:(1)棋盘表示:使用二维数组表示棋盘,每个元素代表一个棋子,其中0表示空位,1表示玩家1的棋子,2表示玩家2的棋子;(2)落子算法:根据玩家的落子位置,在棋盘上放置对应的棋子;(3)判断胜负算法:从落子位置开始,向四个方向(上、下、左、右)查找连续的五个相同的棋子,如果找到,则判断为胜利;(4)悔棋算法:撤销上一步的落子操作,将棋盘恢复到上一步的状态。
3. 编码实现在编码实现阶段,我按照设计文档和算法要求,使用Java编程语言完成了五子棋游戏的基本功能。
具体实现如下:(1)棋盘模块:使用JFrame创建一个窗口,使用JPanel绘制棋盘,使用鼠标监听器实现落子操作;(2)落子模块:在棋盘模块的基础上,增加一个方法,用于处理玩家的落子操作;(3)判断胜负模块:编写一个方法,用于判断游戏是否结束,以及判断胜负;(4)悔棋模块:编写一个方法,用于撤销上一步的落子操作。