基于Java的拼图游戏设计.doc_第1页
基于Java的拼图游戏设计.doc_第2页
基于Java的拼图游戏设计.doc_第3页
基于Java的拼图游戏设计.doc_第4页
基于Java的拼图游戏设计.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

目录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引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。2). 安全性Java的编程类似C+,但舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3). 面向对象 Java吸收了C+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4). 分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5). 健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。2 游戏实现功能解析及界面2.1游戏规则介绍1)本游戏是一个Java语言的拼图游戏,有一个格子是空的,其他格子内随机放置由要拿来拼图的图片切割成的若干个小图片,图片的切割按照一定的公式计算,因为,该通过单击任意一个与空格子相邻的方块可以把该方游戏中设有拼图游戏的等级,根据不同的等级,按照公式会切割成不同的小图片块数。2)在开始游戏之前,可以选择游戏等级后再点击“开始”菜单里的“新游戏”,进行拼图游戏,通过将空格旁边的小图片移入空格子内(不断的移动方块),来实现拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。3)游戏拼完后,会弹出一个“信息”框,显示你玩游戏所用的步数与时间,点击“确定”后,会弹出一个“输入”框,可以在里面输入游戏者的姓名,单击“确定”后会弹出游戏的记录框。4)游戏的简单规则在游戏界面的“关于”菜单内的“帮助”信息框内已经简单介绍了。游戏前可以先预览看看。2.2游戏实现功能2.2.1主窗口界面 1) 游戏初始状态 当游戏刚运行时,会出现如下界面,本游戏中已经存在了三张图片,如过游戏者想拼自己感兴趣的图片的话,可以将自己的图片放入到“background”(背景图片)文件夹中,再进行“选择”-“背景图片”中选择你自己的图片,然后选择“等级”-“困难”或“普通”或“简单”,进行等级选择,最后选择“开始”-“新游戏”就可以拼自己想拼的图了。初始窗口如图1所示:图1 游戏初始窗口2)游戏进行状态当游戏者选择好图片与等级后,就可以进行拼图游戏了及进入游戏的进行状态。其游戏进行状态如图2所示:图2 游戏进行状态3)游戏暂停状态 当游戏者,在游戏过程中半途暂停游戏的话,将出现如图3所示的游戏暂停状态的界面。当游戏者又想继续游戏时,直接单击界面上的“继续”字样,就可以继续游戏了。 图3 游戏暂停状态2.2.2主窗口菜单在游戏的主窗口菜单中包括如下几个菜单:(1)“开始”菜单。包括了,“新游戏” 、“成绩记录” 、“图片预览” 、“退出游戏” 。如图4所示。 “新游戏” :单击可以开始游戏,如图2所示游戏进行状态。 “成绩记录” :单击可以查看游戏者的游戏成绩记录。如图5所示。初始的成绩记录。 “图片预览” :在游戏过程中可以单击预览图片,对照着拼,如图6所示。 “退出游戏” :游戏者要结束游戏可直接单击退出游戏。 图4 开始菜单 图5初始成绩记录图6 图片预览 (2)“选择”菜单。包括了,“等级”、“背景图片”。如图7所示。当运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,界面如图8所示,这是可以按照“初始状态”界面上的提示进行操作。若正常的有“background”在主程序路径下的话,运行游戏选择背景图片的话,就可以选择图片了,界面如图9所示。 “等级” :在游戏者开始游戏之前,要进行游戏等级选择,共有困难、普通、简单三种选择。其图片的切割块数,会根据选择的等级不同,而有所不同。简单的是一共8个小图片。 “背景图片” :这里保存了所要拼的所有图片。在游戏前要进行选择。 图7 图8图9(3)“关于”菜单。包括了“帮助”、“关于”两个下拉菜单。如图10所示。图10“关于”菜单“帮助”:在游戏时,可以单击查看游戏的简单规则,界面如图11所示。“关于”:可查看该游戏的版本、作者、与作者的Email的相关信息,界面如图12所示。图11 “帮助”信息框图12 下拉单“关于”的消息框 2.2.3 游戏过程中的出现的相关窗体 (1)提示信息窗口 当游戏者运行游戏时,如果没有把“background”这个文件夹放入主程序的目录下,在运行游戏选择背景图片时,将没有图片可选,若此时直接“开始”-“新游戏”,将会弹出如下提示信息框。如图13所示。图13 提示信息框 (2) 拼图成功界面 若选择abc.jpg图片拼图时,若拼图成功,界面如图14所示。 图14 拼图成功 (3)成绩记录输入框 当游戏者完成拼图游戏后,将出现一个成绩记录框(“输入”框),输入游戏者的姓名。如图15所示。输入后单击确定按钮,将弹出总的成绩记录框。如图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该类主要是实现鼠标事件,让玩家在用鼠标点击能够移动拼图的小图片,移动到周围空格的地方2) CardFrame.class该类主要实现,初始界面的相关提示信息。3)GameOver.class 该类主要实现游戏过程中的计时、暂停、结束等功能,游戏结束时的信息。4) Data.class 该类主要实现保存游戏者的游戏成绩记录的相关数据。5)Grades.class 该类主要实现成绩记录的初始化,在拼图成功后可记录游戏者姓名的功能,并直接提取等级、步数与时间等信息的功能。保存成绩记录信息,以便游戏者查看。6)MenuFrame.class 该类主要实现有主菜单与子菜单的功能。并设置相关的快捷键功能。7)Puzzle.class 该类是该游戏程序的主程序,从游戏界面大小到游戏过程中出现的所有信息框等相关功能都都到了实现,调用相关类实现其功能。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;import 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 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 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.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 CardLayout();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(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 button = 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(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;private 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 matrix.length; i+)for (int j = 0; j datatype.time | (t = datatype.time & s = datatype.step)return; = JOptionPane.showInputDialog(null,你打破了记录!n请输入你的名字。);datatype.time = t;datatype.step = s;tryPrintStream f = new PrintStream(Arg.rc);f.printf(%s %d %dn, , data0.time, data0.step);f.printf(%s %d %dn, , data1.time, data1.step);f.printf(%s %d %dn, , 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, 等级, 姓名, 时间, 步数);String h = .format(%8s%15s%8d%8dn, 困难, , data0.time, data0.step);String n = .format(%8s%15s%8d%8dn, 普通, , data1.time, data1.step);String e = .format(%8s%15s%8d%8dn, 简单, , data2.time, data2.step);JOptionPane.showMessageDialog(null, title+h+n+e);catch (Exception e)JOptionPane.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 matrix;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; 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, 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.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;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 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(widthTitle, 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.setMnemonic(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 = 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;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 ActionListener()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();private void initMenuLevel()JRadioButtonMenuItem mi = new JRadioButtonMenuItem(困难),new JRadioButtonMenuItem(普通),new JRadioButtonMenuItem(简单) ;for (int i = 0; i 3; i+)mii.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)JRadioButtonMenuItem mi = (JRadioButtonMenuItem)e.getSource();menuLevelClick(mi.getText(););bgrp.add(mii);mm0.add(mii);mi1.setSelected(true);menuLevelClick(mi1.getText();public void initMenuBackground()mm1.removeAll();File bkg = new File(Arg.path);if (!bkg.exists()return;File list = bkg.listFiles();JRadioButtonMenuItem mi;int j = 0;for (int i = 0; i list.length; i+)if (!listi.isFile() | listi.isHidden()continue;mi = new JRadioButtonMenuItem(listi.getName();mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)JRadioButtonMenuItem mi = (JRadioButtonMenuItem)e.getSource();menuBackgroundClick(mi.getText(););fgrp.add(mi);mm1.add(mi);mi.setSelected(j = 0);if (j = 0)menuBackgroundClick(mi.getText();j+;private void initMenuAbout()JMenuItem mI = new JMenuItem(帮助(H),new JMenuItem(关于(A);mI0.setMnemonic(H);mI1.setMnemonic(A);mI0.setAccelerator(KeyStroke.getKeyStroke(F1);mI0.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuHelpClick(););mI1.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuAboutClick(););m2.add(mI0);m2.add(mI1);public void updateMenuBegin()update = !update;if (!update)m0.remove(2);return;JMenuItem mi = new JMenuItem(图片预览(S);mi.setMnemonic(S);mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuShowClick(););m0.insert(mi, 2);8) point.javapublic class pointint row;int cal;public point(int r, int c)row = r;cal = c;public void set(int r, int c)row = r;cal = c;public int getRow()return row;public int getCal()return cal;public boolean neighbor(int r, int c)int n = Math.abs(row - r) + Math.abs(cal - c);return n = 1;9) Puzzle.javaimport java.awt.image.BufferedImage;import javax.swing.JButton;import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JRadioButtonMenuItem;public class Puzzle extends CardFrameprivate boolean start;private int fWidth = this.getWidth();private int fHeight = this.getHeight();private GameOver gOver;private boolean index = true;public Puzzle()start = false;ImageIcon icon = new ImageIcon(icon/OK.png);this.setSize(200 + fWid

温馨提示

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

评论

0/150

提交评论