21003-50-王凯阳-毕业设计.doc_第1页
21003-50-王凯阳-毕业设计.doc_第2页
21003-50-王凯阳-毕业设计.doc_第3页
21003-50-王凯阳-毕业设计.doc_第4页
21003-50-王凯阳-毕业设计.doc_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

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

文档简介

1、( 此文档为 word 格式,下载后您可任意编辑修改!)贵州电子信息职业技术学院计算机科学系毕业设计论文题目: Java 雷电游戏项目专业:计算机应用技术姓名:王凯阳指导老师:钟林江二一二年六月十八日0摘要这款游戏的名字叫 雷电战机 , 它是基于 Java 语言的环境下制作出来的。Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995年5月推出的 Java 程序设计语言和 Java 平台(JavaSE, JavaEE, JavaME)的总称。 Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人 PC、数据

2、中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下, Java 更具备了显著优势和广阔前景。本论文着眼于 J2ME技术的应用,开发一款简单的游戏程序。本程序将老少皆宜的经典作品制作出来,供大家休闲的时候玩一玩,放松一下心情。本论文介绍了 Java 的相关技术及本程序的结构分析和具体功能的实现。关键字:小游戏; Java; J2ME目录前言3第一章JAVA 的简介 .4第二章JAVA 中的类 .6第三章 Java 与 CC+的差异7第四章J2ME 技术概览 I9第五章游戏(飞机大战)的设计方案105.1 项目简介105.2项

3、目模块105.3技术实现115.4项目演示115.5飞机大战的所需素材125.6 飞机大战的设计代码展示135.7飞机大战的截面图组22第六章感 想23第七章致谢和参考文献24前 言电脑已经深入到日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。Windows 系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。然而,虽然现在世界上已经充满了花样繁多的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。Java 语言作为一种面向对象的编程语言,

4、具有分布式,可移植,高性能,多线程等特点。通过系统的学习,人们就可以使用它开发出功能齐全,满足特殊需求的应用程序。 Java 语言易学易用,对学习者掌握技能,开拓思维都有很大的帮助。我作为一名学生,在学习了 Java 语言之后,开始用它做一些小程序。这次毕业设计,正好将学过的 Java 语言中的各种技术综合起来,用 Java 开发工具编写一个小游戏,既对自己学过的技能进行一次检验,也能系统地将学过的知识复习巩固。随着计算机技术的不断发展, 网络技术的普及范围越来越广, 网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。如今网络休闲游戏发展迅速,它凭借健康、方便、互动性

5、强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。雷电战机游戏是使用 Java 语言开发的一款游戏。它使用SOCKET 建立连接,多线程处理数据,以及可嵌入网络浏览器的 ALET 作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。通过对该软件的编写,还可以巩固我们对以上各种知识的掌握和理解。第一章JAVA 的简介Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995年5月推出的 Java 程序设计语言和 Java 平台(即 JavaSE, JavaEE, JavaME )的总称。 Java 技术具有卓越的

6、通用性、高效性、平台移植性和安全性,广泛应用于个人 PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下, Java 更具备了显著优势和广阔前景。它最初被命名为 Oak,目标设定在家用电器等小型系统的 编程语言 ,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高, Sun 放弃了该项计划。 就在 Oak几近失败之时,随着互联网的发展, Sun 看到了 Oak 在计算机网络上的广阔应用前景。于是改造了 Oak,以“ Java”的名称正式发布。JAVAJava

7、编程语言的风格十分接近 C、C+语言。 Java 是一个纯的面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的核心。 Java 舍弃了 C +语言中容易引起错误的 指针(以引用取代)、运算符 重载(operator overloading )、多重继承 (以接口取代)等特性,增加了 垃圾回收 器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在Java SE1.5 版本中, Java 又引入了 泛型编程 ( Generic Programming)、类型安全的 枚举、不定长参数和自动装拆箱等语言特性。Java 不同于一般的 编译执行 计算机语言和 解释执

8、行 计算机语言。它首先将源代码 编译成二进制 字节码(bytecode ),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE 1.4.2发布后, Java 的执行速度有了大幅提升。与传统程序不同, Sun 公司在推出 Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“ Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与 微软公司 所倡导

9、的注重精英和封闭式的模式完全不同。Sun 公司对 Java 编程语言的解释是: Java 编程语言是个简单、 面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java 平台是基于 Java 语言的平台。这样的平台目前非常流行。因此微软公司推出了与之竞争的 .NET 平台以及模仿 Java 的 C#语言。第二章JAVA 中的类1,final类:为防止他人从你的类上派生新类,此类是不可扩展的。动态调用比静态调用花费的时间要长。2,多态类:在 java 中,对象变量是多态的。而java 中不支持多重继承。3,抽象类:规定一个或多个抽象方法的类本身必须定义为abst

10、ract。4,class 类和 object类中的 getclass方法返回 class 类型的一个实例,程序启动时包含在main 方法的类会被加载,虚拟机要加载他需要的所有类,每一个加载的类都要加载它需要的类。例子:public abstract string getDescripitionJava 语言中的每一个类都是从Object 类中扩展出来的。object 类中的 equal 和 toString 方法的语句。equal 用于测试一个对象是否同另一个对象相等。toString 返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示。( toString 方

11、法是 Java 语言中一个很重要的方法)通用编程:任何类类型的所有值都可以同 object 类型的变量来代替。封装:就是把数据和行为结合起在一个包中)并对对象使用者隐藏数据的实现过程,一个对象中的数据叫他的实例字段(instance field)。重载:当多个方法具有相同的名字而含有不同的参数时,便发生重载。编译器必须挑选出调用哪个方法。数组列表: ArrayList 动态数组列表,是一个类库,定义在java.util 包中,可自动调节数组的大小。第三章 Java 与 CC+的区别熟悉 C 语言和 C+语言的读者一定想搞清楚这个问题,实际上 ,Java 确实是从 C 语言和 C+语言继承了许多

12、成份,甚至可以将 Java 看成是类 C 语言发展和衍生的产物。比如 Java 语言的变量声明 , 操作符形式 , 参数传递,流程控制等方面和 C 语言 ,C+语言完全相同 .C 语言是一种 计算机程序设计语言 。它既具有 高级语言 的特点,又具有 汇编语言的特点。它由美国贝尔研究所的 D.M.Ritchie 于1972年推出。 1978后, C 语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编写系统 应用程序 ,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C 语言,适于

13、编写系统软件,三维,二维图形和动画。具体应用比如单片机以及嵌入式系统开发 。C+ 语言是一种优秀的 面向对象 程序设计语言,它在 C 语言的基础上发展而来,但它比 C 语言更容易为人们学习和掌握。 C+以其独特的语言机制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来 结构化程序设计方法 基础上的一个质的飞跃, C+完美地体现了面向对象的各种特性。Java 是一种简单的,跨平台的, 面向对象 的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。当1995年 SUN推出 Java 语言之后,全世界的目光都被这个神奇的语言所吸引。C+是

14、 C的扩展, JAVA脱胎于 C,继承了 C 语言的很多东西,同时加入跨平台特性。尽管如此, Java 和 C 语言 ,C+语言又有许多差别,主要表现在如下几个方面:(1) Java 中对内存的分配是动态的 , 它采用面向对象的机制,采用运算符 new 为每个对象分配内存空间 , 而且,实际内存还会随程序运行情况而改变。程序运行中 , 每个, Java 系统自动对内存进行扫描 , 对长期不用的空间作为” 垃圾”进行收集,使得系统资源得到更充分地利用 . 按照这种机制 , 程序员不必关注内存管理问题,这使 Java 程序的编写变得简单明了 , 并且避免了了由于内存管理方面的差错而导致系统出问题。

15、而 C 语言通过 malloc() 和 free() 这两个库函数来分别实现分配内在和释放内存空间的, C+语言中则通过运算符 new和 delete 来分配和释放内存 . 在 C和 C+这种机制中 , 程序员必须非常仔细地处理内存的使用问题。一方面,如果对己释放的内存再作释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不再使用的内存不释放 , 则会浪费系统资源,甚至因此造成资源枯竭 .(2) Java 不在所有类之外定义全局变量 , 而是在某个类中定义一种公用静态的变量来完成全局变量的功能。(3) Java不用 goto 语句 , 而是用 try-catch-fi

16、nally异常处理语句来代替goto 语句处理出错的功能 .(4) Java 不支持头文件,而 C 和 C+语言中都用头文件来定义类的原型 , 全局变量,库函数等 , 这种采用头文件的结构使得系统的运行维护相当繁杂。(5) Java 不支持宏定义,而是使用关键字 final 来定义常量 , 在 C+中则采用宏定义来实现常量定义,这不利于程序的可读性 .(6) Java 对每种数据类型都分配固定长度。比如 , 在 Java 中, int 类型总是 32 位的 , 而在 C 和 C+中,对于不同的平台 , 同一个数据类型分配不同的字节数,同样是 int 类型 , 在 PC机中为二字节即 16 位,

17、而在 VAX-11中, 则为 32 位.这使得 C 语言造成不可移植性,而 Java 则具有跨平台性 ( 平台无关性 ).(7) 类型转换不同。在 C 和 C+中 , 可通过指针进行任意的类型转换,常常带来不安全性 , 而在 Java 中,运行时系统对对象的处理要进行类型相容性检查 , 以防止不安全的转换 .(8) 结构和联合的处理。在 C 和 C+中,结构和联合的所有成员均为公有 , 这就带来了安全性问题,而在 Java 中根本就不包含结构和联合 , 所有的内容都封装在类里面 .(9) Java 不再使用指针。指针是 C 和 C+中最灵活,也最容易产生错误的数据类型 . 由指针所进行的内存地

18、址操作常会造成不可预知的错误, 同时通过指针对某个内存地址进行显式类型转换后,可以访问一个 C+中的私有成员 , 从而破坏安全性。而 Java 对指针进行完全地控制,程序员不能直接进行任何指针操作 .(10) 避免平台依赖。 Java 语言编写的类库可以在其它平台的 Java 应用程序中使用,而不像C+语言必须依赖于Windows平台。第四章 J2ME 技术概览J2ME的全称是 Java2 Micro Edition(J2ME) Java2 技术微型版,与J2SE、J2EE一样都是有美国SUN微系统公司提出的JAVA技术规范。J2ME是为了能够开发运行在小型设备、独立设备、互联移动设备、嵌入式

19、设备上的 JAVA应用程序而被提出的。 J2ME是建立在一个由概要描述、 配置、JAVA虚拟机和操作系统等部分组成的标准架构之上的,这些内容共同组成了完整的J2ME实时运行环境。它的技术核心是由一个JAVA虚拟机( JVM )及一套适合运行在上述设备环境上的API 接口构成。J2ME在 1999 年的 JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算设备的开发人员,这些开发人员需要在他们的产品中整合跨平台的能力。无线设备和小型计算设备的消费者期望这些设备能够有较高的性能。他们希望小型计算设备有快速的响应时间,与同种设备相兼容,拥有功能完备的应用程序。消费者希望桌面计算

20、机和笔记本电脑上的软件和功能同样能够运行在移动电话和个人数字助理上。J2ME 为在小型电子设备上创建性能卓越的网络应用提供了一套完整的解决方案,能很好的解决软件跨平台的兼容性和安全性的问题。 J2ME架构的模块化设计使应用程序可以灵活适应小型计算设备的限制。 J2ME 架构没有替代小型计算设备的操作系统。 相反,J2ME架构由位于原生操作系统之上的多层软件组成,这 些 软 件 共 同 称 为 “ 连 接有 限 设 备 配置 ”( Connected Limited Device Configuration, CLDC )。安装在操作系统之上的 CLDC形成了小型计算设备的运行时环境。J2ME架

21、构由 3 个软件层组成:第一层是包括在内的配置层,这个层次直接与原生操作系统进行交互。配置层还处理profile和 JVM之间的交互。第二层是 profile层,由小型计算设备的应用程序编程接口(API)的最小集合组成。第三层是Mobile Information Device Profile( MIDP )层。 MIDP 层由用户网络连接、永久存储和用户界面的java API组成。它还能够访问CLDC库和 MIDP库。第五章 游戏(飞机大战)的设计方案5.1 项目简介这是在 Java 语言的环境下开发的一款休闲、好玩于一体的小游戏,老少皆宜。这款小游戏操作简单,通过W,A,S.D 键分别来控

22、制上、左、下、右四个方向,方便闪躲敌机子弹和进攻敌机, 用 J 键来射击子弹攻打敌机。对于游戏开发来说, 由于涉及到比较复杂的情况 (有时候甚至是美学问题) ,开发过程很多时候是一个不断修改的过程,可以方便的修改游戏内容是十分关键的。对于很多游戏引擎来说,都有自己编写的脚本解释器,用来解释一些自定义的游戏脚本语言 (一般为命令式脚本, 比如 moveplayer(intx ,inty),playersmile ()之类的东西),另一些则提供了例如 lua 和 rubby 等的脚本语言来访问游戏引擎。由于其虚拟机特性, Java 本身就可以用来编写游戏脚本,目前也有例如beanshell 、gr

23、oovy 等脚本语言可以方便的无缝的和Java 语言进行交互,这些都极大的方便了Java 游戏编程。这款小游戏就验证了这个道理!5.2项目模块游戏模块boss主程序我军用的子弹背景、按键监听、重绘敌机机飞军我5.3技术实现背景移动与闪烁消除,使用双缓冲技术使用矩形重叠判断方法intersects实现5.4项目演示5.5飞机大战的所需素材1 背景图1 我军飞机2 敌军飞机4 我军飞机发射子弹5 敌军飞机发射子弹6 开始截面图7 我军子弹击中敌机时候的爆炸图8 游戏结束界面背景的移动与重绘使用线程技术多敌对角色实现使用 ArrayList集合实现敌对角色随机出现使用计时器和随机数5.6飞机大战的设

24、计代码展示import java.awt.Frame;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.util.ArrayList;import java.util.Random;* 这里是游戏启动类 用于启动游戏

25、* author 学生王凯阳编写于 2012 年 6 月 2 日*public class GameStart extends Frame public static Toolkit tk = Toolkit.getDefaultToolkit();public Image plane_img = tk.getImage(GameStart.class.getResource(image3.png);public Image bullet_img = tk.getImage(GameStart.class.getResource(image 我军子弹 .png);public Image En

26、emPlane_img = tk.getImage(GameStart.class.getResource(image5.png);public Image bg_imge = tk.getImage(GameStart.class.getResource(imagegamebegin1.gif);public Image bg_img = tk.getImage(GameStart.class.getResource(imagea6.png);public Image gameover_img = tk.getImage(GameStart.class.getResource(imagefa

27、ils2.png);public Image back_img = null;int gameState = 0;int x = 260;int y = 680;Random numran = new Random();int time=0;Myplane myplane = new Myplane(x, y, true, this); BackGroad bg=new BackGroad(bg_img,this);ArrayList bullet_list = new ArrayList();ArrayList enemPlane_list = new ArrayList();Bullet

28、bullet = new Bullet(400, 500, false, this);EnemPlane enemPlane = null;public Object expImgs;* 显示窗体*public void paint(Graphics g) * 第一个参数:要显示的图片* 第二个参数:图片显示的 x 位置* 第三个参数:图片显示的 y 位置* 第四个参数:图片的宽度* 第五个参数:图片的高度* 第六个参数:图片在什么地方显示*if(gameState=0) g.drawImage(bg_imge, 0, 0, 600, 800, this); if(gameState=1)bg

29、.drawMe(g);myplane.drawImag(g);for (int i = 0; i 2048)bg_y1=-2048+bg_y2;if(bg_y22048)bg_y2=-2048+bg_y1;import java.awt.Graphics;import java.awt.Rectangle;import java.util.List;public class Bullet int bullet_x;int bullet_y;int bullet_width = 20;int bullet_ bullet_live;GameStart sg;public Bullet(int b

30、ullet_x, int bullet_y, boolean bullet_live, GameStart sg) super();this.bullet_x = bullet_x;this.bullet_y = bullet_y;this.bullet_live = bullet_live;this.sg = sg;public void drawMe(Graphics g) if (!bullet_live) sg.bullet_list.remove(this);g.drawImage(sg.bullet_img, bullet_x + 35, bullet_y - 40, bullet

31、_width,bullet_ true;return false;public Rectangle getRectangle() Rectangle rectangle = new Rectangle(bullet_x, bullet_y, bullet_width,bullet_ rectangle;import java.awt.Graphics;import java.awt.event.KeyEvent;public class Myplane int plane_width = 100;int plane_ plane_live;GameStart sg = null;public

32、Myplane(int plane_x, int plane_y, boolean plane_live, GameStart sg) this.plane_x = plane_x;this.plane_y = plane_y;this.plane_live = plane_live;this.sg = sg;public void keymove(KeyEvent e) int index = e.getKeyCode();if (index = KeyEvent.VK_W)&(index = KeyEvent.VK_UP)plane_y -= 10; else if (index = Ke

33、yEvent.VK_S) plane_y += 10; else if (index = KeyEvent.VK_A) plane_x -= 10; else if (index = KeyEvent.VK_D) plane_x += 10; else if (index = KeyEvent.VK_SPACE) Bullet bullet = new Bullet(plane_x,plane_y,true,sg); sg.bullet_list.add(bullet);if (plane_x 0) plane_x = 0;if (plane_y 600) plane_x = 600;if (

34、plane_y 700) plane_y = 700;public Bullet fire() Bullet bullet = new Bullet(plane_x, plane_y, plane_live, sg); return bullet;public void drawImag(Graphics g) g.drawImage(sg.plane_img, plane_x, plane_y, plane_width, plane_ enPane_live;GameStart sg;public EnemPlane(int enPlane_x, int enPlane_y, boolean

35、 enPane_live, GameStart sg) super();this.enPlane_x = enPlane_x;this.enPlane_y = enPlane_y;this.enPane_live = enPane_live;this.sg = sg;public void drawMe(Graphics g)if(!enPane_live)sg.enemPlane_list.remove(this);g.drawImage(sg.EnemPlane_img, enPlane_x, enPlane_y, enPlane_width,enPlane_ rectangle;5.7飞

36、机大战的截面图组这是正在进行的游戏界面截面图,在条件允许的情况下, 还可以听到激情而动听的背景音乐,玩起来舒心而投机!第六章感 想这篇论文的主要构思是论述JAVA的一些理论知识及JAVA在现实生活中的应用,通过列举一个小游戏来述说JAVA的作用及意义。 在对这门语言的学习中,虽然谈不上什么研究之类的话,但是,对其有独到的见解也还可以说得上的。 Java 语言的语法与 C 语言和 C+语言很接近,使得大多数程序员很容易学习和使用 Java。另一方面, Java 丢弃了 C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java 语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担

温馨提示

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

评论

0/150

提交评论