1、 活三:己方在落一子就能形成“活四”的三叫做“活三”。“活三”分为“连活三”和“跳活三”。连活三:在棋盘某一条阳线或阴线上有同色三子相连,且在此三子两端延长线上有一端至少有一个,另一端至少有两个无子的交叉点与此三子紧密相连。跳活三:中间仅间隔一个无子交叉点的连三,但两端延长线均至少有一个无子的交叉点与此三子相连。 双三:由于黑方走一着在无子交叉点上同时形成二个或二个以上黑方 活 的局面。 双四: 四 四三:指某一方同时具备两个先手,其中一个是 ,一个是 活三 。 在实现上面这些高级算法的时候,我们需要一个基础,就是对制定位置周围情况进行检测。在棋盘上面,棋子存在8个移动方向,检测时需要对每个方
2、向进行检测。为了简单直观,这里将每步棋子的移动生成一个新的棋子。2.2需求分析 一款小游戏的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求,其中玩家的实际需求最为重要.面对游戏拥有不同知识和理解层面的玩家,游戏制作人对玩家需求的理解程度,在很大程度上决定了此类游戏开发的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给游戏制作人,保证开发过程按照满足玩家需求为目的正确开发方向进行,是每游戏游戏制作人需要面对的问题。作为五子棋的设计需要考虑到的最基本的需求莫过于人机对战与人人对战功能的实现,当然还有下棋过程中的下棋悔棋功能以及判断游戏的胜负等
3、方面的要求。当然最好是要考虑到界面的友好性,作为一个娱乐软件,还应该考虑到玩家在游戏时的舒适性。2.3功能模块图图1.功能模块图2.4设计方法2.4.1 ChessFrame主要功能类ChessFrame主要功能是创建五子棋游戏主窗体和菜单,主要代码如下:class ChessFrame extends JFrame implements ActionListener private String strsize=20x15,30x2040x30;private String strmode=人机对弈人人对弈public static boolean iscomputer=true,check
4、computer=true;private int width,height;private ChessModel cm;private MainPanel mp;2.4.2 游戏主窗体构造五子棋游戏的主窗体,主要代码如下:public ChessFrame() this.setTitle(五子棋游戏); cm=new ChessModel(1); mp=new MainPanel(cm); Container con=this.getContentPane(); con.add(mp,Center this.setResizable(false); this.addWindowListene
5、r(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(视图 mbar.add(makeMenu(lookMenu,new Object MetalMotifWindows ,this); JMenu helpMe
6、nu = new JMenu(帮助 mbar.add(makeMenu(helpMenu, new Object 关于2.4.3 主菜单构造五子棋游戏的主菜单,代码如下:public JMenu makeMenu(Object parent, Object items, Object 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(
7、int i = 0; i items.length; i+) if(itemsi = null) m.addSeparator(); else if(itemsi = ) JMenu jm = new JMenu( ButtonGroup group=new ButtonGroup(); JRadioButtonMenuItem rmenu; for (int j=0;jstrsize.length;j+) rmenu=makeRadioButtonMenuItem(strsizej,target); if (j=0) rmenu.setSelected(true); jm.add(rmenu
8、); group.add(rmenu); m.add(jm); else if(itemsi = for (int h=0;hstrmode.length;h+) rmenu=makeRadioButtonMenuItem(strmodeh,target); if(h=0) else m.add(makeMenuItem(itemsi, target); return m;3.设计结果与分析(1)五子棋游戏的主界面,如图2所示。图2 程序主界面(2)五子棋游戏的结束界面,如图3所示。图3 游戏结束界面(3)游戏游戏栏中的各个选项,如图4所示。图4 Game栏中的选项(4)视图设置栏中的各个选项
9、,如图5所示。图5 Configure栏中的各个选项(5)Help帮助栏中的选项,如图6所示。图6 Help栏中的选项(6)点击Help栏中的About选项弹出的界面,如图7所示。图7 About选项弹出时的界面4.设计体会通过这次课程设计,我进一步加深对基础理论的理解,扩大专业知识面,对收集资料、查阅文献、方案制定等实践方面得到了很好的锻练,促进对所学知识应用能力的提高。同时我渐渐的复习了Java使用方法和编程语法,之后的编程过程也相对得心应手,基本完成了预期计划的要求。在此感谢我的指导老师冯云老师,她在课题的研究上不遗余力的给予指导。她严谨的治学态度深深的影响了我,使我受益匪浅!5.参考文
10、献1耿祥义.JAVA大学实用教程北京:电子工业出版社.2005.3:85-1132朱战立,沈伟Java程序设计实用指南北京:电子工业出版社,2005.1:48-1353 唐大仕.Java程序设计M. 北京:北方交通大学出版社:2007.05:56-92 4叶核亚. JAVA2程序设计实用教程M北京:电子工业出版社;2008.4:64-985邢素萍. JAVA办公自动化项目方案精解M.北京:航空工业出版社, 2006.9:35-120附录/Java编程:五子棋游戏源代码import java.awt.*;import java.awt.event.*;import java.applet.*;i
11、mport 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();*类ChessFrame主要功能是创建五子棋游戏主窗体和菜单/
12、构造五子棋游戏的主窗体/构造五子棋游戏的主菜单/构造五子棋游戏的菜单项public JMenuItem makeMenuItem(Object item, Object target) JMenuItem r = null; if(item instanceof String) r = new JMenuItem(String)item); else if(item instanceof JMenuItem) r = (JMenuItem)item; if(target instanceof ActionListener) r.addActionListener(ActionListener)
13、target); return r;/构造五子棋游戏的单选按钮式菜单项public JRadioButtonMenuItem makeRadioButtonMenuItem( Object item, Object target) JRadioButtonMenuItem r = null; r = new JRadioButtonMenuItem(String)item); else if(item instanceof JRadioButtonMenuItem) r = (JRadioButtonMenuItem)item; public void MapSize(int w,int h)
14、 setSize(w * 20+50 , h * 20+100 ); if(this.checkcomputer) this.iscomputer=true; 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); MapS
15、ize(cm.getWidth(),cm.getHeight(); else System.out.println(u81EAu5B9Au4E49 public void actionPerformed(ActionEvent e) String arg=e.getActionCommand(); try if (arg.equals() UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel else if(arg.equals(com.sun.java.swing.plaf.motif.Moti
16、fLookAndFeeljavax.swing.plaf.metal.MetalLookAndFeel ); SwingUtilities.updateComponentTreeUI(this); catch(Exception ee) if(arg.equals() this.width=20; this.height=15; MapSize(this.width,this.height); this.width=30; this.height=20; cm=new ChessModel(2); this.width=40; this.height=30; cm=new ChessModel(3); this.checkcomputer=true; cm=new ChessModel(cm.getModeChess(); this.checkcomputer=false; restart(); JOptionPane.showMessageDialog(this, 五子棋游戏测试版本, 0); System.exit(0);*类ChessModel实现了整个五子棋程序算法的核心*/class ChessModel /棋盘的宽度、高度、棋盘的模式(如2015)private int width,height,modeChess;/