java五子棋小游戏课程设计.pdf
《java五子棋小游戏课程设计.pdf》由会员分享,可在线阅读,更多相关《java五子棋小游戏课程设计.pdf(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java 五子棋小游戏 1.课程设计的目的 通过此次课程设计,巩固所学Java 语言基本知识,增进 Java 语言编辑基本功,掌握 JDK、Editplus、Eclipse、JCreator 等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握 Java 语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。2.设计方案论证 2.1 设计思路 (1)界面棋盘设计 在对棋盘界面设计方面要考虑简洁友好,符合游戏者需求。棋子的设计方面系统中设置了两种棋子颜色,white 或者 black,游戏者可自行选择。棋子怎样画出来,怎
2、样使棋子按我们所想的方式来绘制出来是设计的主要难题。运行时要求当每次点击鼠标的时候就在点击鼠标的地方画一个棋子,所以得定义一个棋子的类使点击鼠标时系统把棋子绘制出来。这样主界面里的棋子就确定了,而且也确定了几个所需要的类。可以先定义好这些类了。有了以上的准备就可以把棋盘绘制出来了,下棋时每次在适当位置点击鼠标的时候就在所点击的位置上画出你这个角色的颜色,然后计算机会自动的下棋,计算机自动下棋要有一个控制变量来控制能不能下棋。人可以随意的下子,可是计算机就要计算在哪个位置下子了。这里由计算机下子的算法来确定,人人对战的话就不象单机游戏一样,要计算机来判断人下子之后计算机下那一个地方了,人人对战只
3、要在双方下子的时候判断赢棋情况,当然还要同步的控制两个人下棋的顺序,这样的话就要用到线程了,各自都继承或实现线程类或接口,以便各自能随时单独控制接发消息。(2)算法设计 对于五子棋游戏,无论人机对战,还是双人对战,都需要判断棋盘上是否存在五子连珠情况,这既是游戏名字的由来,也是游戏结束的标志。判断五子连珠的原理是从横,竖,左斜线,右斜线 4 条线上判断是否存在 5 个相连的同类棋子。对战一方落子后,在该处向 8 个方向检测连续的同类棋子,如果检测到直线方向上存在 5 个连续的同类棋子(包含本位置棋子),则判断为“连五”并结束检测循环。基于检测结果,可以判断游戏是否结束,并根据获胜方的落子代码判
4、断获胜方是谁。由于不考虑禁手问题,在实现“连五”过程中,我们可以考虑完成“双四”,“四三”,“双三”,“冲四”,“活三”,“活四”来实现目的。活四:有两个点能形成“连五”的四就是活四;冲四:只有一个点能形成“连五”的四叫做“冲四”,或者叫做“单四”;活三:己方在落一子就能形成“活四”的三叫做“活三”。“活三”分为“连活三”和“跳活三”。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。双三:由于黑方走一着在无子交叉点上同时
5、形成二个或二个以上黑方 活 的局面。双四:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 四 的局面。四三:指某一方同时具备两个先手,其中一个是 四 ,一个是 活三 。在实现上面这些高级算法的时候,我们需要一个基础,就是对制定位置周围情况进行检测。在棋盘上面,棋子存在 8 个移动方向,检测时需要对每个方向进行检测。为了简单直观,这里将每步棋子的移动生成一个新的棋子。2.2 需求分析 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开
6、发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。2.3 功能模块图 图 1.功能模块图 2.4 设计方法 2.4.1 ChessFrame 主要功能 类 ChessFrame 主要功能是创建五子棋游戏主窗体和菜单,主要代码如下:class
7、 ChessFrame extends JFrame implements ActionListener private String strsize=20 x15,30 x20,40 x30;private String strmode=人机对弈,人人对弈;public static boolean iscomputer=true,checkcomputer=true;private int width,height;private ChessModel cm;private MainPanel mp;2.4.2 游戏主窗体 构造五子棋游戏的主窗体,主要代码如下:public ChessFr
8、ame()this.setTitle(五子棋游戏);cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,Center);this.setResizable(false);this.addWindowListener(new ChessWindowEvent();MapSize(20,15);JMenuBar mbar=new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu=new JMenu(游戏);mbar.add(m
9、akeMenu(gameMenu,new Object 开局,棋盘,模式,null,退出 ,this);JMenu lookMenu=new JMenu(视图);mbar.add(makeMenu(lookMenu,new Object Metal,Motif,Windows ,this);JMenu helpMenu=new JMenu(帮助);mbar.add(makeMenu(helpMenu,new Object 关于 ,this);2.4.3 主菜单 构造五子棋游戏的主菜单,代码如下:public JMenu makeMenu(Object parent,Object items,O
10、bject target)JMenu m=null;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=new ButtonGroup();JRadioButtonMen
11、uItem rmenu;for(int j=0;jstrsize.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=new ButtonGroup();JRadioButtonMenuItem rmenu;for(int h=0;hstrmode.length;h+)rme
12、nu=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;3.设计结果与分析 (1)五子棋游戏的主界面,如图 2 所示。图 2 程序主界面 (2)五子棋游戏的结束界面,如图 3 所示。图 3 游戏结束界面 (3)游戏游戏栏中的各个选项,如图 4 所示。图 4 Game 栏中的选项 (4)视图设置栏中的各个选项,如图 5 所示。图
13、 5 Configure 栏中的各个选项 (5)Help 帮助栏中的选项,如图 6 所示。图 6 Help 栏中的选项 (6)点击 Help 栏中的 About 选项弹出的界面,如图 7 所示。图 7 About 选项弹出时的界面 4.设计体会 通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了 Java 使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。在此感谢我的指导老师冯云老师,她在课题的研究上不遗余力的给予指导。她严谨的治学态度深深的影响了我
14、,使我受益匪浅!5.参考文献 1耿祥义.JAVA 大学实用教程北京:电子工业出版社.2005.3:85-113 2朱战立,沈伟Java 程序设计实用指南北京:电子工业出版社,2005.1:48-135 3 唐大仕.Java 程序设计M.北京:北方交通大学出版社:2007.05:56-92 4叶核亚.JAVA2 程序设计实用教程M北京:电子工业出版社;2008.4:64-98 5邢素萍.JAVA 办公自动化项目方案精解M.北京:航空工业出版社,2006.9:35-120 附录 /Java 编程:五子棋游戏源代码 import java.awt.*;import java.awt.event.*;
15、import java.applet.*;import javax.swing.*;import java.io.PrintStream;import javax.swing.JComponent;import javax.swing.JPanel;/*main 方法创建了 ChessFrame 类的一个实例对象(cf),*并启动屏幕显示显示该实例对象。*/public class FiveChessAppletDemo public static void main(String args)ChessFrame cf=new ChessFrame();cf.show();/*类 ChessF
16、rame 主要功能是创建五子棋游戏主窗体和菜单 */class ChessFrame extends JFrame implements ActionListener private String strsize=20 x15,30 x20,40 x30;private String strmode=人机对弈,人人对弈;public static boolean iscomputer=true,checkcomputer=true;private int width,height;private ChessModel cm;private MainPanel mp;/构造五子棋游戏的主窗体 p
17、ublic ChessFrame()this.setTitle(五子棋游戏);cm=new ChessModel(1);mp=new MainPanel(cm);Container con=this.getContentPane();con.add(mp,Center);this.setResizable(false);this.addWindowListener(new ChessWindowEvent();MapSize(20,15);JMenuBar mbar=new JMenuBar();this.setJMenuBar(mbar);JMenu gameMenu=new JMenu(游
18、戏);mbar.add(makeMenu(gameMenu,new Object 开局,棋盘,模式,null,退出 ,this);JMenu lookMenu=new JMenu(视图);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,Ob
19、ject target)JMenu m=null;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=new ButtonGroup();JRadioButtonMenu
20、Item rmenu;for(int j=0;jstrsize.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=new ButtonGroup();JRadioButtonMenuItem rmenu;for(int h=0;hstrmode.length;h+)rmen
21、u=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(Object item,Object target)JMenuItem r=null;if(item instanceof String)r=new JMenuItem(String)it
22、em);else if(item instanceof JMenuItem)r=(JMenuItem)item;else return null;if(target instanceof ActionListener)r.addActionListener(ActionListener)target);return r;/构造五子棋游戏的单选按钮式菜单项 public JRadioButtonMenuItem makeRadioButtonMenuItem(Object item,Object target)JRadioButtonMenuItem r=null;if(item instanc
23、eof String)r=new JRadioButtonMenuItem(String)item);else if(item instanceof JRadioButtonMenuItem)r=(JRadioButtonMenuItem)item;else return null;if(target instanceof ActionListener)r.addActionListener(ActionListener)target);return r;public void MapSize(int w,int h)setSize(w*20+50,h*20+100);if(this.chec
24、kcomputer)this.iscomputer=true;else this.iscomputer=false;mp.setModel(cm);mp.repaint();public boolean getiscomputer()return this.iscomputer;public void restart()int modeChess=cm.getModeChess();if(modeChess=1)cm=new ChessModel(modeChess);MapSize(cm.getWidth(),cm.getHeight();else System.out.println(u8
25、1EAu5B9Au4E49);public void actionPerformed(ActionEvent e)String arg=e.getActionCommand();try if(arg.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 UIMan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 五子棋 小游戏 课程设计
限制150内