1、 2012 届 本 科 毕 业 设 计(论 文)基于 JAVA 的手机游戏开发Based on JAVA mobile phone game development学 院: 工学院 专 业: 计算机科学与技术 0801 姓 名: 刘洋 学 号: 080102060004 指导教师: 高文玲 完成时间: 2012 年 4月 18日 二 一 二 年 四 月2基于 JAVA 的手机游戏开发摘 要本拼图游戏前期是基于 J2SE 平台开发的,是一个 Application,它的实现过程是将一张大图切割成 N 张小图,然后在其中任意挑出 N-1 张小图,使它们随机出现在 N 个位置。通过鼠 标或键盘的方向
2、键移动已 经切割的 N-1 张小图,让其复原成原来的顺序,玩家就胜 利,游 戏就结束了。在游戏结束之后,会自动将游戏得分及时间计算出来。让有些玩家可以查看自己的成绩。游戏可以设置多个等级,所拼的图片也可以进行选择, 让游戏玩家可以根据自己的喜好进行选择。关 键 词:JAVA 语言;应用程序;游戏Based on JAVA mobile phone game developmentAbstractThis puzzle is based on the J2SE platform, it is one the Application of the rules of the game and jig
3、saw puzzle Noah. This game will cut to a picture N Zhang diagram, then any single out N-1 Zhang diagram, so that they appear randomly in the N position. By mouse or keyboard direction keys to move the N-1 has been cut Zhang diagram, allowed to recover to their original order, the players on the vict
4、ory, the game ended. After the end of the game, the game score calculated. The game can set up multiple levels, you can play complex, you can play simple, and so onKeywords: Java language ;application;game4前 言随着计算机技术的不断发展,网络技术的普及范围也越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。特 别是当今手机用户队伍的不断壮大,人们在使用手机
5、进行交流的同时,也对手机的娱乐功能有了要求。智能机的出现,使得人 们可以从网上下载各种游戏,在空 闲的时间进行娱乐。人们对手机游戏种类、画面的流 畅 ,丰富的 颜色也有了一定的要求。手机游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,已经成为大部分现代人休闲娱乐的首选。该课题所设计实现的拼图游戏是使用 Java 语言开发 的一款游戏。这款游戏是一个小巧、益智的游戏。无论是服务器还是客户端的 实现都相对容易。通 过对该游戏软件的编写,还可以巩固学生对以上各种知识的掌握和理解。目 录第一章 概述 11.1 项目开发的背景 .11.2 项目开发的目的 .11.3 开发环境介绍 .11.3.
6、1. java 语言 .21.3.2 myeclipse 介绍 .2第二章 可行性分析及总体设计原则 42.1 可行性分析 .42.1.1 技术可行性 42.1.2 经济可行性 .42.1.3 社会可行性 42.2 总体设计原则 .4第三章 系统分析 6业务流程分析 .6第四章 系统设计 7模块流程图 .7第五章 系统演示 85.1 程序主界面 .85.2 等级设置 125.3 图片选择 .195.4 拼图画面 .205.5 显示原图 .215.6 拼图成功 .225.7 打破拼图记录界面 .235.8拼图成功后排名情况 24结 论 25致 谢 26参考文献 27西安外事学院工学院毕业论文1第
7、一章 概述1.1项目开发的背景随着科技的发展,现在手机的功能越来越多,越来越强大,手机游 戏开发行业也应运而生。手机游戏画面也日趋细腻、流 畅,规则 复杂,具有很强的娱乐性和交互性。加之手机携带方便,人们可以随时随地可以沉浸在自己喜欢的游戏中,成为人们消遣时间的首选。庞大的用户群使得手机游戏的发展具有潜在的前景。 由于大多数的手机都内置了 Java 的运行环境,加上 Java 语言自身的跨平台特性,Java 成为了编写手机游戏时 最常使用的语言之一。拼图游戏很多人都玩过,它的游戏规则是将图片进行分割,然后将顺序打乱,要求游戏玩家从左至右的顺序进行移动分割好的图片,把打乱顺序的小图片拼成一个完整
8、的图。前提要求是,每次只可以移动一个小图。 这个程序实现了拼图游戏中的基本功能。首先你可以载入自己喜欢的图片,然后进行难易程度的选择,在打乱顺序的图片右侧有排列正确的原图,可以对比进行排列。在你点击开始的时候,同 时开始计时,如果你成功地拼好,此 时时间 停止,同时给出成功提示信息,要求输入游戏玩家的姓名,并按照时间的长短进 行比较、排名,每个等 级只保留用时最少的游戏玩家的资料。如果发现自己完成不了,可以放弃当前正在进行的游戏,重新开始新游戏 。 1.2项目开发的目的 1) 实现程序GUI图形界面;2) 实现游戏开始、重来、退出功能;西安外事学院工学院毕业论文23) 设计实现游戏主要算法;4
9、) 实现鼠标或键盘事件响应模块;5) 实现用户可选难度等级功能;6) 实现输赢自动判别功能。7) 查看原图功能8) 图片选择功能9) 关于游戏1.3 开发环境介绍由于手机游戏开发普遍采用java语言,该游戏采用的开发环境为:JDK1.6,Myeclipse集成开发环境。下面简要介绍一下开发语言及开发工具。西安外事学院工学院毕业论文31.3.1. java 语言(1) 简单 性Java 与 C+语言非常相近,但 Java 比 C+简单,它抛弃了 C+中的一些不是绝对必要的功能,如头 文件、 预处理文件、指 针 、结构、运算符重载、多重继承以及自动强迫同型。 Java 实现了自动的垃圾收集,简化了
10、内存管理的工作。(2) 面向对象Java 吸收了 C+面向对象的概念,将数据封装于类 中, 实现了程序的简洁性和便于维护性,使程序代码 可以只需一次编译就可反复利用。(3) 多线程多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,不同的线程处理不同的任务,他 们之间互不干涉,不会由于一处等待影响其他部分,这样容易实现 网络上的实时交互操作。(4) 分布性Java 是面向网络的语言。通过它提供的类库可以处 理 TCP/IP 协议,用户可以通过 URL 地址在网络上很方便的访问其他对象。(5) 体系结构中立Java 是一种网络语言,为使 Java 程序能在网络的任何地方运行,
11、Java 解释器生成与体系结构无关的字节码结构的文件格式。为了使 Java 的应用程序能不依赖于具体的系统,Java 语言环境还提供了用于访问 底层操作系统功能的类组成的包,当程序使用这些包 时,可以确保它能运行在各种支持 Java 的平台上。(6) 安全性用于网络、分布环境下的 Java 必须要防止病毒的入侵,Java 不支持指针,一第一章 概述4切对内存的访问都必须通过对象的实例变量来实现,这样就防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。1.3.2 myeclipse 介绍MyEclipse,是一个十分优秀的用于开发 Java, J2EE 的 Ecl
12、ipse 插件集合,MyEclipse 的功能非常 强大,支持也十分广泛,尤其是对各种开源产品的支持十分不错。MyEclipse 企 业 级 工 作 平 台 (MyEclipse Enterprise Workbench ,简 称MyEclipse)是 对 EclipseIDE 的 扩 展 ,利 用 它 我 们 可 以 在 数 据 库 和 JavaEE 的开 发 、发 布 以 及 应 用 程 序 服 务 器 的 整 合 方 面 极 大 的 提 高 工 作 效 率 。它 是 功 能丰 富 的 JavaEE 集 成 开 发 环 境 ,包 括 了 完 备 的 编 码 、调 试 、测 试 和 发 布
13、功 能 ,完 整 支 持 HTML,Struts,JSP,CSS,Javascript ,Spring ,Hibernate。在结构上,MyEclipse 的特征可以被分为 7 类:1. J2EE 模型2. WEB 开发工具3. EJB 开发工具4. 应用程序服务器的连接器5. J2EE 项目部署服务6. 数据库服务7. MyEclipse 整合帮助对于以上每一种功能上的类别,在 Eclipse 中都有相应的功能部件,并通过一系列的插件来实现它们。 MyEclipse 结构上的这种模 块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。西安外事学院工学院毕业论文5Ecli
14、pse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集。简单而言,MyEclipse 是 Eclipse 的插件,也是一款功能 强大的 J2EE 集成开发环境,支持代码编写、配置、测试以及除错。MyEclipse 是 Eclipse 的插件,也是一款功能 强大的 JavaEE 集成开发环境,支持代码编写、配置、测试以及除错,MyEclipse6.0 以前版本需先安装Eclipse。MyEclipse6.0 以后版本安装 时不需安装 Eclipse。第二章 可行性分析及总
15、体设计原则6第二章 可行性分析及总体设计原则2.1可行性分析为避免开发失误,保证新系统的成功开发和运行,从技术、 经济和社会三方面对本系统的可行性进行了分析和研究。2.1.1 技术可行性本系统的开发基于 Swing 技术的拼图游戏开发。 Swing 可以轻松开发功能丰富的应用程序。现有的技术 已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,利用现有技术 条件可以达到该系统的功能目标。本人在学校期间已经掌握 Java 设计思想和代 码编写。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发的。因此,java 拼图游戏具有技术可行性。2.1.2 经济可行性具有信息化的
16、处理设施,并且拥有支持本系统的应用平台。因此无需再投入资金购买其他设施。系统的开 发基于本人对程序开发的实践学习而来,无需资金投入,并且软件开发过程投入的成本不高,因此开 发经费完全可以接受。游戏开发成功后可以提供娱乐、休闲等。因此,java 拼图游戏开发也具有经济可行性。2.1.3 社会可行性本系统的社会可行性主要从法律因素、用户使用可行性两方面进行研究。(1)法律因素西安外事学院工学院毕业论文7系统的软件设计是在独立的环境下完成的,无可供抄袭的软件产品。(2)用户使用可行性本系统对用户的要求,除了需要具备在 Microsoft Windows 平台上使用个人电脑的知识外,并不需要特 别的技
17、术能力。在投入使用前,无需 对操作系统的人员进行培训。这样既减少投入成本又简化了操作环节。因此,java 拼图游戏也具有社会可行性。2.2 总体设计原则本系统为了设计、实现和后期维护的方便,以及系 统用户使用的便利,所以必须采取一定的设计原则。其主要设计原则有:简单性:在实现系统的功能的同时,尽量让系统操作简单易懂,这对于一个系统来说是非常重要的。针对性:本系统设计是针对 java 拼图游戏的需求定向开发设计,所以具有专业突出和很强的针对性。实用性:要求本系统能够满足 java 拼图游戏的需要,因此具有良好的实用性。一致性:页面整体设计风格以及命名规则的一致性:整体框架和用图用色风格及变量、
18、类名和其他元素的命名规则保持一致。功能一致性:完成同样的功能应该尽量使用同样的元素。 元素风格一致性:界面元素的美观风格、摆放位置在同一个界面和不同界面之间都应该是一致的。变量命名规则的一致性:变量应该用统一的规则进行命名,做到任意变量均能从上下文推断其义。第二章 可行性分析及总体设计原则8先进性:本系统采用 Myeclipse 做为开发工具,使用 swing 技术开发,软件具有良好的兼容性和系统稳定性。因此本设计具有良好的先进性 。西安外事学院工学院毕业论文9第三章 系统分析业务流程分析在进行业务流程分析时,需要按照原有信息流动过程,逐个地调查分析所有环节的处理业务、处理内容、处理顺序和对处
19、理时间 的要求,弄清各个 环节需要的信息、信息来源、流经去向、处理方法、计算方法、提供信息的时间和信息形态。业务流程分析可以帮助开发者了解该业务处理过程,发现和处理系统调查工作中的错误和疏漏。java 拼图游戏的具体的业务流程图,流程如 图 3.1 所示。图 3-1 程序启动后,玩家进行难度的选择,再 进行图片选择。然后就可以点击开始游戏,游戏中移动分割后的小块,使其成为一幅完整的第三章 系统分析10图片。拼图成功后会显示玩家的用时和步骤数,同 时还会要求玩家输入姓名并查看排名。第四章 系统设计模块流程图图 4-1主程序运行后,进行难度选择, 难度分为高级、中级 、初级三种等级,等级越高,图片
20、被分割的块数越多,拼接的难度也越大。然后再进行图片的选择,本游戏中已经预先载入了三张图片可供玩家选择。最后点击开始游戏。西安外事学院工学院毕业论文11第五章 系统演示12第五章 系统演示5.1程序主界面运行程序得到如下主界面,界面中有游戏操作菜单栏和操作提示。菜单栏中有三个选项:开始,设置,关于。主界面上还有操作提示,有助于我们快速了解该游戏的如何使用。图 5-1主要代码:import java.awt.image.BufferedImage;import javax.swing.JButton;import javax.swing.ImageIcon;import javax.swing.J
21、OptionPane;import javax.swing.JRadioButtonMenuItem;public class MainPinTu extends CardFrame西安外事学院工学院毕业论文13private boolean start;private int fWidth = this.getWidth();private int fHeight = this.getHeight();private GameOver gOver;private boolean index = true;public MainPinTu()start = false;ImageIcon ic
22、on = new ImageIcon(“icon/ico.png“);this.setSize(200 + fWidth, 200 + fHeight);this.setIconImage(icon.getImage();this.setVisible(true);private void startGame()if (start)return;start = true;updateMenuBegin();public void endGame()updateMenuBegin();initMenuBackground();start = false;JOptionPane.showMessa
23、geDialog(null,“时间:“ + gOver.getTime() + “sn“ +“步骤:“ + gOver.getStep();Grades g = new Grades(this);g.set(int)gOver.getTime(), gOver.getStep();protected void FrameLostFocus()if (start if (gOver != null) gOver.pause();index = false;第五章 系统演示14protected void FrameGetFocus()nextCard();if (gOver != null) g
24、Over.pause();index = true;public void menuNewClick()Split sp = Split.get();BufferedImage image;if (!sp.set(getFilename() | (image = sp.divid(getType() = null)JOptionPane.showMessageDialog(null, “文件 “+getFilename()+“ 不存在!n 请选择“);return;startGame();this.setSize(fWidth, fHeight);this.setVisible(true);i
25、nt len = Split.levelgetType();int row = image.length;int cal = image0.length;gOver = new GameOver(this);JButton button = new JButtonrowcal;Matrix matrix = new Matrix(button, panel0, len, gOver);matrix.init(image);this.setSize(cal * len + fWidth, row * len + fHeight);this.setVisible(true);public void
26、 menuGradesClick()Grades g = new Grades(this);g.show();西安外事学院工学院毕业论文15public void menuShowClick()new ShowImage(getFilename();public void menuExitClick()System.exit(0);public void menuHelpClick()String help0 = “移动小图片,使其成为原始图像。nn“;String help1 = “触摸周围的空白块小图片,使其走向空白块移动。“;JOptionPane.showMessageDialog(n
27、ull, help0 + help1);public void menuAboutClick()String version = “名称: java 拼图游戏 n“;String author = “作者: 文之秀创意工作室n“;String email = “E-mail: “;JOptionPane.showMessageDialog(null, version + author + email);public static void main(String argv)MainPinTu app = new MainPinTu();app.setSize(400, 300); 第五章 系统
28、演示165.2 等级设置在设置菜单中有等级选择项,等级分为 Hard,Normal,Easy。难度不同,对图片所分割的块数就不同,等级越高,分块数越多,拼 图的 难度也就相应的增加。图 5-2代码如下:import 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;
29、import javax.swing.JRadioButtonMenuItem;import javax.swing.ButtonGroup;import javax.swing.KeyStroke;public abstract class MenuFrame extends JFramepublic final static int heightTitle = 30;西安外事学院工学院毕业论文17public final static int widthTitle = 6;public final static int heightMenu = 27;private JMenu m = n
30、ew 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(
31、“Java 拼图游戏“);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 a
32、ddMenu()JMenuBar mBar = new JMenuBar();this.setJMenuBar(mBar);mBar.add(m0);mBar.add(m1);第五章 系统演示18mBar.add(m2);m0.setMnemonic(B);m1.setMnemonic(O);m2.setMnemonic(A);initMenuBegin();initMenuOption();initMenuAbout();update = false;public abstract void menuNewClick();public abstract void menuGradesClic
33、k();public abstract void menuShowClick();public abstract void menuExitClick();private void menuLevelClick(String nm)type = 3;if (nm.equals(“Hard“)type = 0;else if (nm.equals(“Normal“)type = 1;else if (nm.equals(“Easy“)type = 2;private void menuBackgroundClick(String nm)filename = nm;public abstract
34、void menuHelpClick();public abstract void menuAboutClick();public int getType()return type;public String getFilename()return filename;西安外事学院工学院毕业论文19private void initMenuBegin()JMenuItem mI = new JMenuItem(“新建(N)“),new JMenuItem(“等级(G)“),new JMenuItem(“退出(E)“);mI0.setMnemonic(N);mI1.setMnemonic(G);m
35、I2.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(ActionE
36、vent e)menuGradesClick(););mI2.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuExitClick(););m0.add(mI0);第五章 系统演示20m0.add(mI1);m0.add(mI2);m0.insertSeparator(2);private void initMenuOption()mm0.setMnemonic(L);mm1.setMnemonic(B);m1.add(mm0);m1.add(mm1);initMenuLeve
37、l();initMenuBackground();private void initMenuLevel()JRadioButtonMenuItem mi = new JRadioButtonMenuItem(“Hard“),new JRadioButtonMenuItem(“Normal“),new JRadioButtonMenuItem(“Easy“);for (int i = 0; i 3; i+)mii.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)JRadioButton
38、MenuItem mi = (JRadioButtonMenuItem)e.getSource();menuLevelClick(mi.getText(););bgrp.add(mii);mm0.add(mii);mi1.setSelected(true);menuLevelClick(mi1.getText();西安外事学院工学院毕业论文21public void initMenuBackground()mm1.removeAll();File bkg = new File(Arg.path);if (!bkg.exists()return;File list = bkg.listFiles
39、();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.get
40、Source();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);第五章 系统演示22mI0.setAccelerator(KeyStro
41、ke.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
42、(!update)m0.remove(2);return;JMenuItem mi = new JMenuItem(“显示原图(S) “);mi.setMnemonic(S);mi.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)menuShowClick(););西安外事学院工学院毕业论文23m0.insert(mi, 2);第五章 系统演示245.3图片选择在工具栏中的设置菜单中有如下两项:可以对游戏难易程度选择的等级设置菜单以及可以选择不同图片的菜单。如下界面是对图片进行选择,该游戏中预先载入了三张图片可供选择。图 5-3