毕业论文基于Java的拼图游戏设计22500.doc

上传人:文库蛋蛋多 文档编号:2387543 上传时间:2023-02-17 格式:DOC 页数:28 大小:540KB
返回 下载 相关 举报
毕业论文基于Java的拼图游戏设计22500.doc_第1页
第1页 / 共28页
毕业论文基于Java的拼图游戏设计22500.doc_第2页
第2页 / 共28页
毕业论文基于Java的拼图游戏设计22500.doc_第3页
第3页 / 共28页
毕业论文基于Java的拼图游戏设计22500.doc_第4页
第4页 / 共28页
毕业论文基于Java的拼图游戏设计22500.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《毕业论文基于Java的拼图游戏设计22500.doc》由会员分享,可在线阅读,更多相关《毕业论文基于Java的拼图游戏设计22500.doc(28页珍藏版)》请在三一办公上搜索。

1、目 录1 开发环境及相关技术的介绍11.1 开发环境11.2 Java语言特点12 游戏实现功能解析及界面12.1游戏规则介绍12.2游戏实现功能22.2.1主窗口界面22.2.2主窗口菜单32.2.3 游戏过程中的出现的相关窗体63 游戏程序实现83.1 程序类主要功能介绍83.2 程序源代码94 小结27基于Java的拼图游戏设计1 开发环境及相关技术的介绍1.1 开发环境操作系统:Microsoft Windows XP程序语言:Java 开发环境:JDK-6u6-windows-i586-P1.2 Java语言特点1). 平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之

2、间的Java接口。Java的数据类型与机器无关。2). 安全性Java的编程类似C+,但舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3). 面向对象 Java吸收了C+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4). 分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5). 健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存

3、,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。2 游戏实现功能解析及界面2.1游戏规则介绍1)本游戏是一个Java语言的拼图游戏,有一个格子是空的,其他格子内随机放置由要拿来拼图的图片切割成的若干个小图片,图片的切割按照一定的公式计算,因为,该通过单击任意一个与空格子相邻的方块可以把该方游戏中设有拼图游戏的等级,根据不同的等级,按照公式会切割成不同的小图片块数。2)在开始游戏之前,可以选择游戏等级后再点击“开始”菜单里的“新游戏”,进行拼图游戏,通过将空格旁边的小图片

4、移入空格子内(不断的移动方块),来实现拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。3)游戏拼完后,会弹出一个“信息”框,显示你玩游戏所用的步数与时间,点击“确定”后,会弹出一个“输入”框,可以在里面输入游戏者的姓名,单击“确定”后会弹出游戏的记录框。4)游戏的简单规则在游戏界面的“关于”菜单内的“帮助”信息框内已经简单介绍了。游戏前可以先预览看看。2.2游戏实现功能2.2.1主窗口界面 1) 游戏初始状态 当游戏刚运行时,会出现如下界面,本游戏中已经存在了三张图片,如过游戏者想拼自己感兴趣的图片的话,可以将自己的图片放入到“background”(背景图片)文件夹中,再进行“选

5、择”-“背景图片”中选择你自己的图片,然后选择“等级”-“困难”或“普通”或“简单”,进行等级选择,最后选择“开始”-“新游戏”就可以拼自己想拼的图了。初始窗口如图1所示:图1 游戏初始窗口2)游戏进行状态当游戏者选择好图片与等级后,就可以进行拼图游戏了及进入游戏的进行状态。其游戏进行状态如图2所示:图2 游戏进行状态3)游戏暂停状态 当游戏者,在游戏过程中半途暂停游戏的话,将出现如图3所示的游戏暂停状态的界面。当游戏者又想继续游戏时,直接单击界面上的“继续”字样,就可以继续游戏了。 图3 游戏暂停状态2.2.2主窗口菜单在游戏的主窗口菜单中包括如下几个菜单:(1)“开始”菜单。包括了,“新游

6、戏” 、“成绩记录” 、“图片预览” 、“退出游戏” 。如图4所示。 “新游戏” :单击可以开始游戏,如图2所示游戏进行状态。 “成绩记录” :单击可以查看游戏者的游戏成绩记录。如图5所示。初始的成绩记录。 “图片预览” :在游戏过程中可以单击预览图片,对照着拼,如图6所示。 “退出游戏” :游戏者要结束游戏可直接单击退出游戏。 图4 开始菜单 图5初始成绩记录图6 图片预览 (2)“选择”菜单。包括了,“等级”、“背景图片”。如图7所示。当运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,界面如图8所示,这是可以按照“初始状

7、态”界面上的提示进行操作。若正常的有“background”在主程序路径下的话,运行游戏选择背景图片的话,就可以选择图片了,界面如图9所示。 “等级” :在游戏者开始游戏之前,要进行游戏等级选择,共有困难、普通、简单三种选择。其图片的切割块数,会根据选择的等级不同,而有所不同。简单的是一共8个小图片。 “背景图片” :这里保存了所要拼的所有图片。在游戏前要进行选择。 图7 图8图9(3)“关于”菜单。包括了“帮助”、“关于”两个下拉菜单。如图10所示。图10“关于”菜单“帮助”:在游戏时,可以单击查看游戏的简单规则,界面如图11所示。“关于”:可查看该游戏的版本、作者、与作者的Email的相关

8、信息,界面如图12所示。图11 “帮助”信息框图12 下拉单“关于”的消息框 2.2.3 游戏过程中的出现的相关窗体 (1)提示信息窗口 当游戏者运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,若此时直接“开始”-“新游戏”,将会弹出如下提示信息框。如图13所示。图13 提示信息框 (2) 拼图成功界面 若选择abc.jpg图片拼图时,若拼图成功,界面如图14所示。 图14 拼图成功 (3)成绩记录输入框 当游戏者完成拼图游戏后,将出现一个成绩记录框(“输入”框),输入游戏者的姓名。如图15所示。输入后单击确定按钮,将弹出总

9、的成绩记录框。如图16所示。图15(a) 输入前 图15 (b) 输入后 图16 成绩记录框3 游戏程序实现3.1 程序类主要功能介绍 该游戏程序中包括11个类。包括: ButtonClick.class、CardFrame.class、GameOver.class、Data.class 、Grades.class、Matrix.class、MenuFrame.class、 point.class、Puzzle.class、ShowImage.class、Split.class。其中主要的类实现的功能如下:1) ButtonClick.class该类主要是实现鼠标事件,让玩家在用鼠标点击能够移

10、动拼图的小图片,移动到周围空格的地方2) CardFrame.class该类主要实现,初始界面的相关提示信息。3)GameOver.class 该类主要实现游戏过程中的计时、暂停、结束等功能,游戏结束时的信息。4) Data.class 该类主要实现保存游戏者的游戏成绩记录的相关数据。5)Grades.class 该类主要实现成绩记录的初始化,在拼图成功后可记录游戏者姓名的功能,并直接提取等级、步数与时间等信息的功能。保存成绩记录信息,以便游戏者查看。6)MenuFrame.class 该类主要实现有主菜单与子菜单的功能。并设置相关的快捷键功能。7)Puzzle.class 该类是该游戏程序的

11、主程序,从游戏界面大小到游戏过程中出现的所有信息框等相关功能都都到了实现,调用相关类实现其功能。8)ShowImage.class 该类主要实现图片的提取与切割的功能。3.2 程序源代码1)Arg.javapublic interface Argpublic static final String path = background;public static final String rc = Game.rc;2) ButtonClick.java import java.awt.event.ActionEvent;import java.awt.event.ActionListener;i

12、mport javax.swing.JButton;import javax.swing.JOptionPane;public class ButtonClick implements ActionListenerprivate JButton button;private point pint;private int row;private int cal;private int matrix;private GameOver gOver;private boolean end;public ButtonClick(JButton b, point p, int m, int r, int

13、c, GameOver g)button = b;pint = p;matrix = m;row = r;cal = c;gOver = g;end = false;public void actionPerformed(ActionEvent e)if (end | !pint.neighbor(row, cal)return;int r = pint.getRow();int c = pint.getCal();buttonrc.setIcon(buttonrowcal.getIcon();buttonrowcal.setIcon(null);pint.set(row, cal);int

14、t = matrixrc;matrixrc = matrixrowcal;matrixrowcal = t;end = gOver.judge();3) CardFrame.javaimport java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.

15、WindowAdapter;import javax.swing.JButton;import javax.swing.JLabel;import javax.swing.JPanel;public abstract class CardFrame extends MenuFrameprivate CardLayout card;private Container con;protected JPanel panel = new JPanel(), new JPanel();public CardFrame()con = this.getContentPane();card = new Car

16、dLayout();con.setLayout(card);panel0.setLayout(null);JLabel label;label = new JLabel(请输入你的图片到);label.setBounds(10, 15, 190, 30);panel0.add(label);label = new JLabel(背景图片文件夹。n);label.setBounds(10, 30, 190, 45);panel0.add(label);label = new JLabel(单击选择-背景图片);label.setBounds(10, 50, 190, 65);panel0.add

17、(label);label = new JLabel(选择图片。n);label.setBounds(10, 65, 190, 80);panel0.add(label);label = new JLabel(接着, 单击 开始-新游戏 可以);label.setBounds(10, 85, 190, 100);panel0.add(label);label = new JLabel(开始游戏。);label.setBounds(10, 100, 190, 115);panel0.add(label);panel1.setLayout(new BorderLayout();JButton bu

18、tton = new JButton(继 续);button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)FrameGetFocus(););panel1.add(button, BorderLayout.CENTER);con.add(panel0, 游戏);con.add(panel1, 暂停);card.show(con, 游戏);this.addWindowListener(new WindowAdapter()public void windowDeactivated(

19、WindowEvent e)FrameLostFocus(););protected void nextCard()card.next(con);protected abstract void FrameLostFocus();protected abstract void FrameGetFocus();4) GameOver.javaimport java.util.Date;public class GameOverprivate boolean gameOver;private boolean stop;private int matrix;private Puzzle Main;pr

20、ivate int step;private long now;private long countTime;public GameOver (Puzzle frm)Main = frm;public void start(int m)gameOver = false;matrix = m;step = 0;Date d = new Date();now = d.getTime();stop = false;countTime = 0;public boolean judge()if (gameOver)return true;step+;int c = 1;for (int i = 0; i

21、 matrix.length; i+)for (int j = 0; j datatype.time | (t = datatype.time & s = datatype.step)return;datatype.name = JOptionPane.showInputDialog(null,你打破了记录!n请输入你的名字。);datatype.time = t;datatype.step = s;tryPrintStream f = new PrintStream(Arg.rc);f.printf(%s %d %dn, data0.name, data0.time, data0.step)

22、;f.printf(%s %d %dn, data1.name, data1.time, data1.step);f.printf(%s %d %dn, data2.name, data2.time, data2.step);f.close();catch (Exception e)JOptionPane.showMessageDialog(null, Arg.rc + has broken!);show();public void show()trycreatData();readData();String title = .format(%8s%15s%8s%8sn, 等级, 姓名, 时间

23、, 步数);String h = .format(%8s%15s%8d%8dn, 困难, data0.name, data0.time, data0.step);String n = .format(%8s%15s%8d%8dn, 普通, data1.name, data1.time, data1.step);String e = .format(%8s%15s%8d%8dn, 简单, data2.name, data2.time, data2.step);JOptionPane.showMessageDialog(null, title+h+n+e);catch (Exception e)J

24、OptionPane.showMessageDialog(null, Arg.rc + has broken!);6) Matrix.javaimport java.awt.image.BufferedImage;import javax.swing.JPanel;import javax.swing.JButton;import javax.swing.ImageIcon;public class Matrixprivate JButton button;private JPanel panel;private int row;private int cal;private int matr

25、ix;private GameOver gOver;public Matrix(JButton b, JPanel p, int len, GameOver g)this.button = b;this.panel = p;this.gOver = g;row = b.length;cal = b0.length;matrix = new introwcal;matrixrow-1cal-1 = row * cal;gOver.start(matrix);panel.removeAll();point pint = new point(row-1, cal-1);for (int i = 0;

26、 i row; i+)for (int j = 0; j cal; j+)buttonij = new JButton();buttonij.setBounds(j*len, i*len, len, len);buttonij.addActionListener(new ButtonClick(button, pint, matrix, i, j, gOver);panel.add(buttonij);public void init(BufferedImage image)if (button = null | image = null)return;ImageIcon icon;int r

27、, c, rad, d, m;boolean visit = new booleanrow*cal-1;for (int i = 0; i row*cal - 1; i+)r = i / cal;c = i % cal;rad = (int)(Math.random()*(row*cal-1-i);for (d = m = 0; d row*cal - 1 & m = rad; d+)if (!visitd)m+;matrixi/cali%cal = d;visit-d = true;icon = new ImageIcon(imaged/cald%cal);buttoni/cali%cal.

28、setIcon(icon);7) MenuFrame.javaimport java.io.File;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JRadioButtonMenuItem;import javax.swing.ButtonGroup

29、;import javax.swing.KeyStroke;public abstract class MenuFrameextends JFramepublic final static int heightTitle = 30;public final static int widthTitle = 6;public final static int heightMenu = 27;private JMenu m = new JMenu(开始(B),new JMenu(选择(O),new JMenu(关于(A) ;private JMenu mm = new JMenu(等级(L),new

30、 JMenu(背景图片(B);private boolean update;private int type;private String filename;protected ButtonGroup bgrp = new ButtonGroup();protected ButtonGroup fgrp = new ButtonGroup();public MenuFrame()super(拼图游戏);addMenu();this.setResizable(false);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setSize(widt

31、hTitle, heightTitle+heightMenu);this.setLocation(this.getToolkit().getScreenSize().width/3 - this.getWidth()/3,this.getToolkit().getScreenSize().height/3 - this.getHeight()/3);private void addMenu()JMenuBar mBar = new JMenuBar();this.setJMenuBar(mBar);mBar.add(m0);mBar.add(m1);mBar.add(m2);m0.setMne

32、monic(B);m1.setMnemonic(O);m2.setMnemonic(A);initMenuBegin();initMenuOption();initMenuAbout();update = false;public abstract void menuNewClick();public abstract void menuGradesClick();public abstract void menuShowClick();public abstract void menuExitClick();private void menuLevelClick(String nm)type

33、 = 3;if (nm.equals(困难)type = 0;else if (nm.equals(普通)type = 1;else if (nm.equals(简单)type = 2;private void menuBackgroundClick(String nm)filename = nm;public abstract void menuHelpClick();public abstract void menuAboutClick();public int getType()return type;public String getFilename()return filename;

34、private void initMenuBegin()JMenuItem mI = new JMenuItem(新游戏(N),new JMenuItem(成绩记录(G),new JMenuItem(退出游戏(E);mI0.setMnemonic(N);mI1.setMnemonic(G);mI2.setMnemonic(E);mI0.setAccelerator(KeyStroke.getKeyStroke(ctrl N);mI2.setAccelerator(KeyStroke.getKeyStroke(ctrl W);mI0.addActionListener(new ActionLis

35、tener()public void actionPerformed(ActionEvent e)menuNewClick(););mI1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuGradesClick(););mI2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuExitClick(););m0.add(mI0);m0.add(mI1);m0.add(mI2);m0.insertSeparator(2);private void initMenuOption()mm0.setMnemonic(L);mm1.setMnemonic(B);m1.add(mm0);m1.add(mm1);initMenuLevel();initMenuBackground

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号