【Java开源代码栏目提醒】:本文主要为网学会员提供“【课程设计报告】Java实现游戏连连看(有源代码) - 毕业设计”,希望对需要【课程设计报告】Java实现游戏连连看(有源代码) - 毕业设计网友有所帮助,学习一下!
JAVA 语言实现连连看游戏1.课程设计目的
Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等特点。
面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于
软件的维护和继承。
学会
Java 程序开发的环境搭建与配置,并在实际运用中学习和掌握
Java 程序开发的全过程。
进一步熟悉掌握
Java 程序设计语言的基础内容,如用户图形界面设计、
Java多线程编程、Applet 程序的设计、文件和
网络输入输出流编程、
Java 数据库编程等。
通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力2.设计
方案论证2.1 设计思路2.1.1 用户可以通过点击菜单中的“开始游戏”选项,开始新游戏程序。
程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。
记录图片坐标,以方便计算图片是否可以相连。
确定图片大小,以确定用户点击的是那张图片。
2.1.2 用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归 0),以完成用户以后的选取工作。
如果用户选择的是相同的图片,那么系统会消除这两张图片,并使鼠标记数为 0,并消除这两张图片的标记,使里面的图片被标记在外面。
以便用户可以进行以后的选择。
2.1.3 用户也可使通过使用“炸弹”功能进行消除图片。
方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片。
2.1.4 炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。
并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。
2.1.5 当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。
2.1.6 当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。
2.1.6 如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。
2.2 设计方法 在 设 计 连 连 看 小 游 戏 是 , 需 要 编 写 6 个
Java 源 文 件 : MainFrame.
java ,ChessButton.
java,MapUI.
java,Settings.
java,ArrayPoint.
java,Map.
java。
2.2.1 MainFrame.
java 主窗口部分定义了程序用函数,实现了程序菜单(initMenuBar)的使用。
2.2.2 ChessButton.
java 按键部分定义按键的位置,代表的值。
2.2.3 MapUI.
java 游戏部分判断点击的图片,判断两图片是否可连,是否相同。
判断是否胜利。
实现炸弹功能。
2.2.4 Settings.
java 数组确定了游戏各种参数属性。
2.2.5 ArrayPoint.
java 取值部分定义图片的值。
2.2.6 Map.
java 算法部分通过算法确定两张图片是否连通。
2.3 功能模块 此设计共有以下几个功能模块。
2.3.1 开始游戏
程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。
记录图片坐标,以方便计算图片是否可以相连。
确定图片大小,以确定用户点击的是那张图片。
2.3.2 使用“炸弹” 用户点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片。
2.3.3 限制炸弹“数目” 默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。
并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。
2.3.4 对用户游戏时的判断 用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么
系统认为用户没有点(鼠标记数归 0),以完成用户以后的选取
工作。
如果用户选择的是相同的图片,那么系统会消除这两张图片,并使鼠标记数为 0,并消除这两张图片的标记,使里面的图片被标记在外面。
以便用户可以进行以后的选择。
2.4 流程图如下图 2 主函数流程图 开始程序 开始游戏 接收用户点击 Y 是否使用炸弹 N N 是否二次点击 Y 消除点击计数 两张图片 N 是否相同消除两张一样的 Y可以相连的图片 N 两张图片是否 可以相连 Y 消除用户点击 的两张图片 消除点击计数 Y 是否还有图 片未消除 N 结束 图3 游戏进行流程图图 4 使用炸弹流程图图 5 计算时间流程图2.5 类、方法、属性说明 成员变量 成员变量描述 变量类型 名称行数 int ROWS列数 int COLUMNS图片后缀名 string RELEX每局所花时间(秒) int PERTIME判断的时间间隔 int PER炸弹的使用次数 int BOMBCOUNT 方法 方法名 功能 备注 MenuBar 实用程序菜单 无备注 Bomb 设置炸弹 无备注 Point 定义按键的位置 无备注 Chesses 初步定义游戏界面,功能 无备注 Timer 时间限制 无备注3.
设计结果与分析 用户可以通过点击菜单中的“开始游戏”选项,开始新游戏程序。
程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。
记录图片坐标,以方便计算图片是否可以相连。
确定图片大小,以确定用户点击的是那张图片。
图 6 开始游戏后画面 用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归 0),以完成用户以后的选取工作。
如果用户选择的是相同的图片(如第八行第二列和第八行第三列),那么系统会消除这两张图片,并使鼠标记数为 0,并消除这两张图片的标记,使里面的图片被标记在外面。
以便用户可以进行以后的选择。
图 7 消除三对后画面 用户也可使通过使用“炸弹”功能进行消除图片。
方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片(如第一行第一列河第一行第四列)。
图 8 使用炸弹后画面 炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。
并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。
图 9 炸弹使用光后画面 当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。
图 10 时间到时的画面 当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。
图 11 点击确定时的画面 如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。
图 12 通关画面4.设计体会 通过这次
课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
因而,通过课程设计之后,把以前所学过的知识重新温故。
有些在设计过程中已解决,有些还有待今后慢慢
学习,只要认真学就会有更多的收获。
总之这次课程设计使我更多的掌握了所学的知识,并运用到实践上,了解了
java 的重要性,对以后的学习起了重要作用。
在设计的过程中我遇到了很到
问题,不过在老师和同学们的帮助和自己的思考下还是很好的完成了。
这此课程设计还让我懂得了写程序不能闭门造车,要努力拓宽知识面,开阔视野,拓展思维。
5.参考文献1 印旻.
Java 语言与面向对象程序设计M北京: 清华大学出版社,2005.4: 58-722 朱站立、沈伟.
Java 程序设计实用教程M 北京: 电子工业出版社 2007.5:82-953 朱福喜、尹为民、余振坤等.
Java 语言与面向对象程序设计M 第 2 版. 武汉: 武汉大学出版社,2006.1:123-1304 艾力江.
Java 2 范例入门与提高 M北京: 清华大学出版社6. 附录 MainFrame.
java: import
java.awt.BorderLayout import
java.awt.event.ActionEventimport
java.awt.event.ActionListenerimport javax.swing.JFrameimport javax.swing.JMenuimport javax.swing.JMenuBarimport javax.swing.JMenuItemimport javax.swing.JOptionPaneimport javax.swing.JPanelimport javax.swing.SwingUtilitiesimport javax.swing.Timerimport cn.elva.Settingsimport cn.elva.model.Mappublic class MainFrame extends JFrame private static final long serialVersionUID 1L private int bombCount Settings.BOMBCOUNT private JPanel jContentPane null private JMenuBar menuBar null private JMenu fileMenu null private JMenuItem reloadItem null private JMenuItem startItem null private JMenuItem bombItem null private JMenuItem exitItem null private MapUI mapUI null private long startTime private long endTime private Timer timer null private JMenuBar initMenuBar if menuBar null menuBar new JMenuBar fileMenu new JMenuquot文件quot startItem new JMenuItemquot开始游戏quot startItem.addActionListenernew ActionListener public void actionPerformedActionEvent e reload reloadItem new JMenuItemquot重来一次quot reloadItem.addActionListenernew ActionListener public void actionPerformedActionEvent e reload exitItem new JMenuItemquot退出quot exitItem.addActionListenernew ActionListener public void actionPerformedActionEvent e System.exit0 fileMenu.addstartItem fileMenu.addreloadItem fileMenu.add bombItem fileMenu.addexitItem menuBar.addfileMenu return menuBarpublic static void mainString args SwingUtilities.invokeLaternew Runnable public void run MainFrame thisClass new MainFrame thisClass.setDefaultCloseOperationJFrame.EXIT_ON_CLOSE thisClass.setVisibletrue public MainFrame super initializeprivate void initialize this.setSize900 900 this.setTitlequotllkquot this.setJMenuBarinitMenuBar // this.setContentPanegetJContentPane this.setTitlequot连连看quotprivate void reload mapUI new MapUI startTime System.currentTimeMillis / 1000 endTime startTime Settings.PERTIME jContentPane new JPanel jContentPane.setLayoutnew BorderLayout jContentPane.addmapUI this.setContentPanejContentPane this.validate Map.LEFTCOUNT Settings.ROWS Settings.COLUMNS initTimer bombItem.setEnabledtrue bombCountSettings.BOMBCOUNT private void initTimer ActionListener actionListener new ActionListener public void actionPerformedActionEvent e startTime System.currentTimeMillis / 1000 if startTime endTime JOptionPane.showMessageDialogMainFrame.this quot时间到了quot int result JOptionPane.showConfirmDialogMainFrame.this quot 重 玩 一 次 quotquotAgainquot JOptionPane.YES_NO_CANCEL_OPTION if result JOptionPane.YES_OPTION reload else jContentPane.setVisiblefalse validate timer new javax.swing.Timer1000 actionListener timer.start ChessButton.
java public class ChessButton extends JButton protected ArrayPoint point null public ChessButtonint row int col int value thisnew ArrayPointrow col value public ChessButtonArrayPoint point this.point point String name quotResource/quotpoint.getValue Settings.RELEX URL url ChessButton.class.getResourcename ImageIcon icon new ImageIcon url this.setIconicon public ChessButton thisnew ArrayPoint0 0 0 public ArrayPoint getPoint return point public void setPointArrayPoint point this.point point MapUI.javaimport
java.awt.GridLayoutimport
java.awt.event.ActionEventimport
java.awt.event.ActionListenerimport javax.swing.JOptionPaneimport javax.swing.JPanelimport cn.elva.Settingsimport cn.elva.model.ArrayPointimport cn.elva.model.Mappublic class MapUI extends JPanel implements ActionListener private static final long serialVersionUID 1L private ChessButton chesses null private Map map new Map private boolean two false private ArrayPoint priviousPoint private ArrayPoint currPoint public MapUI super initialize private void initialize initChesses GridLayout gridLayout new GridLayoutSettings.ROWS 2Settings.COLUMNS 2 gridLayout.setHgap2 gridLayout.setVgap2 this.setLayoutgridLayout this.setSize300 200 for int row 0 row lt Settings.ROWS 2 row for int col 0 col lt Settings.COLUMNS 2 col addchessesrow Settings.COLUMNS 2 col private void initChesses int values map.getMap this.chesses new ChessButtonSettings.ROWS 2 Settings.COLUMNS 2 for int row 0 row lt 10 row for int col 0 col lt 10 col int index row Settings.COLUMNS 2 col chessesindex new ChessButtonrow col valuesrowcol chessesindex.addActionListenerthis if row 0 row Settings.ROWS 2 - 1 col 0 col Settings.COLUMNS 2 - 1 chessesindex.setVisiblefalse public void clearCheeseArrayPoint priviousPoint ArrayPoint currPoint int values map.getMap valuespriviousPoint.getIpriviousPoint.getJ 0 valuescurrPoint.getIcurrPoint.getJ 0 int index1 priviousPoint.getI Settings.COLUMNS 2 priviousPoint.getJint index2 currPoint.getI Settings.COLUMNS 2 currPoint.getJ chessesindex1.setVisiblefalse chessesindex2.setVisiblefalse if map.LEFTCOUNT 0 JOptionPane.showMessageDialogthis quot恭喜您通过quot public void actionPerformedActionEvent e ChessButton button ChessButton e.getSource ArrayPoint p button.getPoint if two currPoint p if map.matchthis.priviousPoint this.currPoint clearCheesethis.priviousPoint this.currPoint two false else this.priviousPoint p two true public void bomb int values map.getMap ArrayPoint p1 null ArrayPoint p2 null for int row 1 row lt Settings.ROWS 1 row for int col 1 col lt Settings.COLUMNS 1 col if valuesrowcol 0 p1 new ArrayPointrow col valuesrowcol for int i 1 i lt Settings.ROWS 1 i for int j 1 j lt Settings.COLUMNS 1 j if valuesij 0 p2 new ArrayPointi j valuesij else .