Java实现简单五子棋程序_第1页
Java实现简单五子棋程序_第2页
Java实现简单五子棋程序_第3页
Java实现简单五子棋程序_第4页
Java实现简单五子棋程序_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈阳理工大学课程设计专用纸 .15目录目录11 问题定义 21.1 游戏需求及功能.22 可行性研究.22.1 项目概述22.2 可行性分析的前提22.2.1 项目的目标22.2.2 项目的环境32.3 可选的方案32.3.1 方案一32.3.2 方案二32.4.2 高层数据流图32.5 经济可行性32.6 技术可行性42.7 操作可行性43.1 需求概述43.2 需求模型43.2.1 数据模型43.2.2 功能模型53.2.3 行为模型54 总体设计64.1 系统体系结构64.2 模块详细说明65 详细设计75.1 人机界面设计75.2 过程设计76 测试156.1 白盒测试15图

2、 6.1 五子棋流程图156.2 黑盒测试157 结论166.陈国君等编著.Java2程序设计基础.北京:清华大学出版社,2006161 问题定义 1.1游戏需求及功能 近年来,随着网络的发展,游戏成为许多人关注的焦点。与传统的影音产业一样,游戏产业也是娱乐行业的一个重要组成部分,基于数字化的网络游戏更让人们找到了前所未有的感受,并已经成为全球互联产业的热点。五子棋,亦称“连五子”、“串珠”、“五目”、“五格”等等,日文称之为“连珠”,英文则称之为“Gobang”或“Renju”或“FIR(Five In a Row)”,是起源于中国古代的传统黑白棋种之

3、一,是一种体现民族特色的休闲游戏,同时能较好的锻炼人的思维。具有广阔的开发前景。 五子棋的玩法想必大家都很熟悉了,想办法把自己的棋子在横、竖、斜任意一个方向上连续排满5个就算赢,本项目实现的五子棋的主要功能是实现不同的对战模式:人机对战和人人对战两种模式。 2 可行性研究2.1 项目概述 人工智能是一门正在迅速发展的新兴的,综合性很强的交叉科学。它与生物工程、空间技术一起被并列为二十一世界三大尖端技术。它的中心任务是研究如何使计算机去做那些过去只能靠人的智力才能做的工作。目前各发达国家都把人工智能作为重点项目,列入本国的高科技发展计划当中,投入巨大的人力和物力。计算机人机对弈也是其中之一。作为

4、人智能研究的一个重要分支,计算机博弈是检验人工水平的一个重要方面。它的研究为人工智能带来了很多重要的方法和理论,产生了广泛的社会影响和学术影响。五子棋人机对弈是计算机博弈中的一种。研究其计算机算法,可以让我们看到人工智能的稚形,也有助于我们人脑的开发。五子棋是我国发明的,研究它可以让更多的外国人了解五子棋,这有助于我国优秀文化的推广2.2 可行性分析的前提2.2.1 项目的目标 此系统为智力游戏,适合于各类游戏爱好者。由于其经典性及其游戏的简单性,各类人士都可以也都爱玩。人们在与电脑对战享受娱乐的同时,也会体会到自己的智力也会有所提升。2.2.2 项目的环境编程语言:JAVA操作系统:Wind

5、ows 系列开发工具:Myeclipse2.3 可选的方案2.3.1 方案一 对于五子棋游戏的实现,可以将其分为面板类,棋子类,来实现五子棋游戏,二者之间通过棋子落在棋盘上的方法取得联系:2.3.2 方案二相比较方案一:方案二将其分为菜单类,鼠标响应事件类,面板类,实现类这四部分,我们采用的是第二方案2.4 所建议的系统2.4.1 系统说明设计一五子棋游戏软件,使之能提供以下功能: 1. 可以选择不同的棋盘2更改游戏的背景颜色3实现不同的游戏模式;人机对战和人人对战其中,最后五子棋的算法部分功能由我实现。2.4.2 高层数据流图1.1下棋1.2棋盘状态 玩 家1 玩 家2 图 2.1 数据流图

6、2.5 经济可行性 本系统开发成本低,不需要过多人员、金钱和特殊要求。2.6 技术可行性系统现阶段的发展过程中,利用现有人力和物力是完全具备的能力开发出来的,本系统的实现方法步骤简单容易,所以本系统的技术上是完全可行的。a. 在当前的限制条件下,该系统的功能目标能达到;b. 利用现有的技术,该系统的功能能实现;c. 对开发人员的数量和质量的要求并说明这些要求因该能满足;d. 在规定的期限内,本系统的开发能完成。2.7 操作可行性 游戏是由鼠标操作,简单 易上手。可操作性强。 3 需求分析3.1 需求概述(1) 人机对弈模式:选择该模式可以实现人与电脑之间的对弈,电脑会智能的选择该在哪处下子,并

7、会在每次下棋结束后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。(2) 人人对弈模式:选择该模式可以实现人与人之间的对弈,系统会提示哪方先下,然后玩家之间交替的下棋,同样系统会在下完每次棋后判断是否有哪方已经获胜,如果获胜则结束本局游戏,并提示玩家游戏结束。(3) 更换棋盘背景:次功能可以根据玩家的爱好任意更换棋盘的背景颜色,由于每个人对颜色的喜好不一样,因此这个功能也是非常必需的。也行更换一种玩家所喜欢的颜色,玩家能发挥得更好。3.2 需求模型颜色黑色3.2.1 数据模型下 棋 棋 子 棋 盘 N 1 白色 大小 图3.1 实体之间的关系E-R图 3.2.2 功能模型(

8、是对2.4.3中数据流图的细化,要有编号,与前图对应)3.2.3 行为模型 4 总体设计 五子棋游戏4.1 系统体系结构 3.0算法实现模块 1.0面板模块 2.0菜单模块 图 4.1 五子棋系统结构图4.2 模块详细说明IPO表系统:五子棋游戏模块: 算法实现编号:3.0作者:李伟 日期:2014/03/06被调用:调用:输入: 输出: 处理:五子棋算法的实现模块局部数据元素:注释: 图4.2 五子棋IPO图5 详细设计5.1 人机界面设计 5.1 五子棋游戏界面5.2 过程设计package wuziqi;import java.awt.Container;import java.awt.

9、event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JRadioButtonMenuItem;import javax.swing.SwingUtilities;i

10、mport javax.swing.UIManager;/*类ChessFrame主要功能是创建五子棋游戏主窗体和菜单*/class ChessFrame extends JFrame implements ActionListener private String strsize="20x15","30x20","40x30"private String strmode="人机对弈","人人对弈"public static boolean iscomputer=true,checkcomput

11、er=true;private int width,height;private ChessModel cm;private MainPanel mp;/构造五子棋游戏的主窗体public ChessFrame() this.setTitle("五子棋游戏"); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,"Center"); this.setResizable(false); this.addWindowListe

12、ner(new ChessWindowEvent(); MapSize(20,15); JMenuBar mbar = new JMenuBar(); this.setJMenuBar(mbar); JMenu gameMenu = new JMenu("游戏"); mbar.add(makeMenu(gameMenu, new Object "开局", "棋盘","模式", null, "退出" , this); JMenu lookMenu =new JMenu("视图"

13、); mbar.add(makeMenu(lookMenu,new Object "Metal","Motif","Windows" ,this); JMenu helpMenu = new JMenu("帮助"); mbar.add(makeMenu(helpMenu, new Object "关于" , this);/构造五子棋游戏的主菜单public JMenu makeMenu(Object parent, Object items, Object target) JMenu m = n

14、ull; if(parent instanceof JMenu) m = (JMenu)parent; else if(parent instanceof String) m = new JMenu(String)parent); else return null; for(int i = 0; i < items.length; i+) if(itemsi = null) m.addSeparator(); else if(itemsi = "棋盘") JMenu jm = new JMenu("棋盘"); ButtonGroup group=n

15、ew ButtonGroup(); JRadioButtonMenuItem rmenu; for (int j=0;j<strsize.length;j+) rmenu=makeRadioButtonMenuItem(strsizej,target); if (j=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else if(itemsi = "模式") JMenu jm = new JMenu("模式"); ButtonGroup group=ne

16、w ButtonGroup(); JRadioButtonMenuItem rmenu; for (int h=0;h<strmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0) rmenu.setSelected(true); jm.add(rmenu); group.add(rmenu); m.add(jm); else m.add(makeMenuItem(itemsi, target); return m;/构造五子棋游戏的菜单项public JMenuItem makeMenuItem(O

17、bject item, Object target) JMenuItem r = null; if(item instanceof String) r = new JMenuItem(String)item); else if(item instanceof JMenuItem) r = (JMenuItem)item; else return null; if(target instanceof ActionListener) r.addActionListener(ActionListener)target); return r;/构造五子棋游戏的单选按钮式菜单项public JRadio

18、ButtonMenuItem makeRadioButtonMenuItem( Object item, Object target) JRadioButtonMenuItem r = null; if(item instanceof String) r = new JRadioButtonMenuItem(String)item); else if(item instanceof JRadioButtonMenuItem) r = (JRadioButtonMenuItem)item; else return null; if(target instanceof ActionListener

19、) r.addActionListener(ActionListener)target); return r; public void MapSize(int w,int h) setSize(w * 20+50 , h * 20+100 ); if(this.checkcomputer) this.iscomputer=true; else this.iscomputer=false; mp.setModel(cm); mp.repaint(); public boolean getiscomputer() return this.iscomputer; public void restar

20、t() int modeChess = cm.getModeChess(); if(modeChess <= 3 && modeChess >= 1) cm = new ChessModel(modeChess); MapSize(cm.getWidth(),cm.getHeight(); else System.out.println("u81EAu5B9Au4E49"); public void actionPerformed(ActionEvent e) String arg=e.getActionCommand(); try if (ar

21、g.equals("Windows") UIManager.setLookAndFeel( "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); else if(arg.equals("Motif") UIManager.setLookAndFeel( "com.sun.java.swing.plaf.motif.MotifLookAndFeel"); else UIManager.setLookAndFeel( "javax.swing.plaf.

22、metal.MetalLookAndFeel" ); SwingUtilities.updateComponentTreeUI(this); catch(Exception ee) if(arg.equals("20x15") this.width=20; this.height=15; cm=new ChessModel(1); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("30x20") this.wid

23、th=30; this.height=20; cm=new ChessModel(2); MapSize(this.width,this.height); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("40x30") this.width=40; this.height=30; cm=new ChessModel(3); MapSize(this.width,this.height);y SwingUtilities.updateComponentTreeUI(this); if(arg.equals(

24、"人机对弈") this.checkcomputer=true; this.iscomputer=true; cm=new ChessModel(cm.getModeChess(); MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("人人对弈") this.checkcomputer=false; this.iscomputer=false; cm=new ChessModel(cm.getModeChess()

25、; MapSize(cm.getWidth(),cm.getHeight(); SwingUtilities.updateComponentTreeUI(this); if(arg.equals("开局") restart(); if(arg.equals("关于") JOptionPane.showMessageDialog(this, "五子棋游戏测试版本", "关于", 0); if(arg.equals("退出") System.exit(0); 6 测试6.1 白盒测试 1.白盒测试:白盒测试的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否能按预定的要求正确工作。本次课程设计采用语句覆盖的方法: 图 6.1 五子棋流程图6.2 黑盒测试 1.黑盒测试:黑盒测试把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论