基于java语言的网络聊天系统开发与实现

基于java语言的网络聊天系统开发与实现

ID:12815015

大小:534.25 KB

页数:26页

时间:2018-07-19

上传者:U-10243
基于java语言的网络聊天系统开发与实现_第1页
基于java语言的网络聊天系统开发与实现_第2页
基于java语言的网络聊天系统开发与实现_第3页
基于java语言的网络聊天系统开发与实现_第4页
基于java语言的网络聊天系统开发与实现_第5页
资源描述:

《基于java语言的网络聊天系统开发与实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

摘要编程语言从机器语言,汇编语言,再到现在的高级语言,一步步发展到现在已经形成了一个完善语言的体系。就像是各个国家都有自己的语言一样,编程语言也有许多不同的语言,而每种语言的出现都是为了迎合不同的需求,也都有自己独特的语言魅力,Java也不例外,它的出现迎合了人们对应用程序跨平台运行的需求。而且Java现在是全球流行的开发工具之一,它拥有了一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机。本文在开始先对Java语言做了初步的介绍,即针对Java的特点做了详细的描述,同时也针对Java程序的运行机制做了描述;开发环境做了简单的介绍。接下来是对编写的软件的描述,对JavaAPI的应用,对Java语言的继承、方法的重写、接口和抽象类的使用。 绪论第一章系统开发环境1.1开发工具1.2应用环境第二章系统需求分析2.1需求分析2.2可行性分析第三章系统概要设计3.1设计目标3.2系统功能模块第四章系统详细设计4.1程序设计4.2各功能界面截图第五章系统测试5.1测试的意义5.2测试过程5.3测试结果第六章总结参考文献绪论Java语言简介 Java的发展和历史Java的诞生得益于对家用电器的芯片的研制,开始时,开发者想用C++语言来开发电器的芯片,但是,由于芯片的种类各不相同,因此,程序要进行多次编译。尤其是C++中的指针操作,稍有不慎,就会出现问题。程序可以出错,但是家用电器不能出错误,为此,开发者将C++语言进行简化,去掉指针操作,去掉运算符重载,去掉C++中的多继承,得到了Java语言,将它变成了一种解释执行的语言,并在每个芯片上装上一个Java虚拟机。刚开始时,Java语言被称为Oak语言(橡树语言)Java语言现在逐渐成熟起来,它的类也已经进千个了,而且还可以通过第三方购买中间件,为Java语言的发展提供了良好的发展前景,同时它也是跨平台的语言,因此许多软件开发商及硬件开发商也争先恐后地想搭上Java语言的快车,都声称支持Java语言,它对微软发起了有力的挑战,而且Sun公司正努力开发Java芯片Java语言的特点Java是一种简单的,面向对象的,分布式的,健壮的,安全的,与平台无关的,多线程的,高性能的,动态程序设计语言。1.简单易学Java语言虽起源于C++,但是去掉了C++语言中难于掌握的指针操作,内存管理非常简单,如果要释放内存资源,你仅需要让其对象的引用等于null,这样就使操作变得异常简单2.面向对象Java语言是面向对象的编程语言。面向对象技术很好的解决了当今软件开发过程中新出现的种种传统的面向过程语言所不能处理的问题,包括软件开发的规模扩大,升级加快,维护量增大以及开发分工日益细化,专业化和标准化等。面向对象技术的核心是以更接近于人类思维的方式建立计算机模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,是反映现实世界实体的个各类在程序中能够独立、自治和继承。3.分布式Java包括一个支持HTTP(超文本传输协议)和FTP(文件传输协议)等基于TCP/IP协议的子库,因此,Java应用程序可凭借URL(统一资源定位符)打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。为分布式环境尤其是Internet提供了动态内容,无疑是一项非常宏达的工程,但是Java的语法特性可以很容易实现这项目标。4.健壮性Java致力于检查程序在编译和运行时的错误。类型检查可以检查出许多开发早期出现的错误。Java自行操作内存,减少了内存错误的可能性。Java还实 现了真数组,避免了覆盖数据的可能。这些功能特征大大缩短了开发Java应用程序的周期。Java提供null指针检测数组边界,进行异常出口字节代码校验。1.安全稳定对网络上应用程序的另一个要求是较高的安全可靠性。用户通过网络获取并在本地运行的应用程序必须是可信赖的,不会充当病毒或者其他恶意操作的传播者而攻击本地的资源,同时它还应该是稳定的,轻易不会产生死机等错误,使得用户乐意使用。2.平台无关Java语言独特的运行机制使得它具有良好的二进制的可移植性,利用Java,开发人员可以编写出与具体平台无关,普遍适用的应用程序,大大降低了开发、维护和管理的开销,也就是一次编译,随处运行。3.支持多线程多线程是当今软件开发技术的又一重要成果,已成功应用在操作系统和应用开发等多个领域。多线程技术允许同一个进程有两个或两个以上的执行线索,即同时做两件或多件事情,满足了一些复杂软件的需求。Java不但内置多线程功能,而且定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。4.高性能如果解释器的速度快,Java可以在运行时直接将目标代码翻译成机器指令。Sun用直接解释器一秒钟内可调用300000个过程。翻译目标代码的速度与C++的性能没什么区别。5.动态性Java的动态性是其面向对象设计方法的扩展,它允许程序动态地装入运行过程中所需要的类。Java编译器将符号引用信息在字节码中保存下来并传递给解释器吗,再由解释器完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程中决定,而是延迟到运行时有解释器确定,这样对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号信息的查找和转换过程进在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。Java平台简介1998年12月,Sun发布了Java2平台—JDK1.2,这时Java发展是上的里程碑。1999年6月,Sun公司重新组织Java平台的集成方法,并将Java企业级应用平台作为发展方向。2004年,Sun发布JDK1.5更名为JDK5.0.2006年底,Sun再度推出JDK1.6(JDK6.0)。如今,Java家族也已经有四个主要成员:J2SE(Java2StandardEdition)用于工作站、PC机的Java标准平台,现改名为JavaSE;J2EE(Java2EnterpriseEdition)可扩展的企业级应用平台, 现改名为JavaEE;J2ME(Java2MicroEdition)嵌入式电子设备Java应用平台,现改名为JavaME;JavaFX是一种声明式的静态类型编程语言,专为喜欢在可视化编程中的Web脚本人员和应用程序开发人员量身定做,是Java新成员Java程序的运行机制和Java虚拟机(JVM)Java语言比较特殊,由Java语言编写的程序需要经过编译步骤,但是这个编译步骤并不会生成特定平台的机器码,而是生成一种与平台无关的字节码文件(也就是.class文件)。当然,这种字节码文件不是可执行的,必须使用Java解释器来解释执行。因此,我们可以认为:Java语言既是编译型语言,也是解释型语言。或者说,Java语言既不是纯粹的编译型语言,也不是纯粹的解释型语言。Java程序的执行过程必须经过先编译,后解释两个步骤,Java语言里负责解释执行字节码文件的是Java虚拟机,即JVM(JavaVirtualMachine)。JVM是可运行JAVA字节码文件的虚拟计算机。所有平台的JVM向编译器提供相同的编译接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来解释执行。在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行,从而提高执行效率。JVM是一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。它负责执行指令,还要管理数据、内存和寄存器Java开发环境搭建 首先进行JDK的安装,下载JDK安装包解压后进行环境变量的配置,配置步骤如下:右击桌面上“我的电脑”图标,出现右键菜单;单击“属性”菜单项,出现“系统属性”或“高级系统设置”对话框;单击该对话框的“高级”选项,出现如图2所示的对话框。单击“环境变量”按钮,将看到如图3所示的“环境变量”的对话框,通过该对话框可以修改或添加环境变量。图2图3第一章系统开发环境1.1开发环境SunMicrosystems公司在推出Java语句的同时,推出了一套开发工具JDK。Sun提供的基于字符模式的Java开发工具包JDK:Java开发工具(JDK)是许多Java专家最初使用的开发环境。Java是平台无关的语言是指用Java写的应用程序不用修改就可以在不同的软硬件平台上运行。Java源程序编写可以借助于记事本,Editplus,UltraEdit等第三方编辑工具。所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。JDK由一个标准库和一组建立、测试及建立文档的Java实用程序组成。其核心JavaAPI是一些预定义的类库,开发人员需要使用这些类来访问Java语言的功能。JDK是整个Java的核心,包括了Java运行环境,一堆Java工具和Java基础的类库。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。 JDK里面是Java类库和Java的语言规范,它提供的是无论是用何种开发软件写java程序都必须用到类库和java语言规范,没有JDK,你的java程序根本就不能用。最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等待,其中IBM的JDK包含的JVM运行效率要比Sun的JDK包含的JVM高出许多。而专门运行在X86平台的Jrocket在服务端运行效率也要比Sun的JDK好很多。但是不管怎么说,还是需要把Sun的JDK掌握好。但是在这里我借助的是一个编程软件MyEclipse来完成程序的编写与调试的1.2应用环境操作系统:Windows7应用环境:JDK1.6应用软件:Myeclipse第二章系统需求分析2.1需求分析游戏简介:游戏中玩家通过鼠标来移动自己的飞机,打掉飞机或蜜蜂会获得分数和奖励,打掉一架飞机获得5分,打掉一只蜜蜂获得随机奖励:一条命或者40次双倍火力,如果撞上敌机或蜜蜂,则会失去生命,同时双倍火力清零。每撞到一次就生命值减1,当生命值为0时,游戏结束shoots要满足以下几点要求:1.鼠标点击界面游戏开始2.鼠标移出界面游戏暂停再次移入继续开始3.飞机跟随鼠标指针移动4.打掉飞机就分值增加,打掉蜜蜂就奖励生命值或者双倍火力2.2可行性分析Shoots游戏是一种简单的大众游戏,在实现游戏的过程中你需要对子弹与敌机或蜜蜂的碰撞做出判断,判断的处理可以由坐标的范围来完成;如果碰撞就要做删除处理,通过记录碰撞的对象(对象是存放在数组中的)的下标可以对它进行删除操作;以及在它们越界(超出画板范围的那些敌机和蜜蜂)后对它们要删除;因为敌机和蜜蜂是不断生成的,会越来越多,而存放它们的是一个数组,这个数组不是固定的长度,会随着敌机和蜜蜂的数量的增加而进行扩容,所以如果不对越界的敌机和蜜蜂进行处理,数组会越来越大,从而占有更多的存储空间,而游戏运行也越来越慢;另外实现子弹、敌机和蜜蜂的自动 移动,需要对存放它们的数组遍历然后对每一个存放的对象的坐标属性进行加减操作;而用鼠标来操作飞机就需要用到与鼠标移动相关的触发事件,在鼠标的点击,滑动,移出面板,移入面板同样都有与之相关的鼠标事件,通过这些事件来实现暂停,运行。选择使用Java语言,一方面是接触的多,另一方面是Java是一种跨平台的,适合于分布式计算机环境的面向对象编程语言,用Java写的应用程序不用修改就可在不同的软硬件平台上运行。第三章系统概要设计3.1设计目标可以利用鼠标移动战机,鼠标移出游戏面板游戏暂停,鼠标再次移入游戏面板游戏开始,还要随机的产生敌机和蜜蜂,生命值为零结束游戏。3.2系统功能模块1.类与类之间的关系包括一个源文件,五个类和两个接口 图3.12.java源文件及其功能编号文件名功能1ShootGame该文件是程序入口,包含main方法和实现各种具体操作的方法2FlyingObject抽象父类,将Hero、Airplane、Bee、Bullet中共有的属性抽出来放在里面3Hero4Airplane表示敌机,继承FlyingObject类,实现Enemy接口,提供移动的属性与方法5Bee表示蜜蜂,继承FlyingObject类,同时实现Award接口,提供蜜蜂移动的方法6Bullet表示子弹,继承FlyingObject类,提供移动的方法 7Enemy表示敌人的接口,提供获取分数方法8Award表示奖励的接口,提供获取奖励类型(双倍活力或生命值)的方法3.数据建模:使用一个数据模型,描述对象的关系,使用绘图坐标系作为参考模型,英雄机、敌机、蜜蜂以及子弹都是矩形区域,如下图所示:以英雄机为例标示出数据x、y、width以及height所表示的位置。敌机、蜜蜂、子弹以及英雄机的这四个属性类似的第四章系统详细设计4.1程序设计1.主类ShootGame(1)成员变量 成员变量描述变量类型变量名称面板宽面板高启动状态运行状态暂停状态游戏结束状态记录当前状态背景图片开始图片暂停图片游戏结束图片敌机图片蜜蜂图片子弹图片英雄机图片0英雄机图片1英雄机对象敌人数组(敌机+小蜜蜂)子弹数组定时器时间间隔(毫秒)敌人入场计数子弹入场计数得分intintintintintintintBufferedImageBufferedImageBufferedImageBufferedImageBufferedImageBufferedImageBufferedImageBufferedImageBufferedImageHeroFlyingObject[]Bullet[]TimerintintintintWIDTHHEIGHTSTARTRUNNINGPAUSEGAME_OVERstatebackgroundstartpausegameoverairplanebeebullethero0hero1heroflyingsbulletstimer;intervelflyEnteredIndexshootIndexintscore(2)方法 方法描述方法名称随机生成敌人对象敌人入场飞行物走一步子弹入场(英雄机发射子弹)所有子弹和所有敌人碰撞一颗子弹和所有敌人碰撞删除越界的敌人和子弹检查游戏结束启动执行重写paint()g:画笔画状态画分和画命画英雄机对象画敌人对象画子弹对象nextOne()enterAction()stepAction()shootAction()bangAction()bang(Bulletb)outOfBoundsAction()checkGameOverAction()action()paint(Graphicsg)paintState(Graphicsg)paintScore(Graphicsg)paintHero(Graphicsg)paintFlyingObjects(Graphicsg)paintBullets(Graphicsg)2.主类ShootGame中的main方法(1).主类的main为程序入口,定义了游戏窗口的的大小、居中,点击右上角“x”关闭窗口以及设置窗口的可见性还调用了启动游戏的方法action()3.抽象父类FlyingObject由图3.1可以分析出英雄机、敌机、子弹以及蜜蜂都有x、y、width以及height属性,因此,将这些属性抽象到父类FlyingObject中。另外,它们在界面上都是以图片的形式显示,因此在父类FlyingObject中,添加image属性,表示它们的贴图;由于蜜蜂和敌机都可以被子弹击中,因此在FlyingObject类 中添加shootBy方法,该方法的参数为子弹类型。下图是以蜜蜂为例,说明子弹被击中的算法。代码如下:/**敌人被子弹打,this:敌人;bullet:子弹*/publicbooleanshootBy(Bulletbullet){//找出敌机的四个角的坐标intx1=this.x;intx2=this.x+this.width;inty1=this.y;inty2=this.y+this.height;//找出子弹坐标intx=bullet.x;inty=bullet.y;returnx>x1&&xy1&&yShootGame.HEIGHT;} }7.类Bee,表示蜜蜂继承FlyingObject,重写了Step方法,实现Award接口,蜜蜂可以左右和向下移动,故含有移动速度的属性和越界的判断,代码如下:packageshoots;importjava.util.Random;publicclassBeeextendsFlyingObjectimplementsAward{privateintxSpeed=1;privateintySpeed=2;privateintawardType;publicBee(){image=ShootGame.bee;width=image.getWidth();height=image.getHeight();Randomrand=newRandom();x=rand.nextInt(ShootGame.WIDTH-this.width);y=-this.height;awardType=rand.nextInt(2);}publicintgetType(){returnawardType;}publicvoidstep(){x+=xSpeed;y+=ySpeed;if(x>=ShootGame.WIDTH-this.width){xSpeed=-1;}if(x<=0){xSpeed=1;}}publicbooleanoutOfBounds(){returny>ShootGame.HEIGHT;}}8.类Bullet,表示子弹继承FlyingObject,重写了step方法,定义了越界的判断方法,代码如下:packageshoots;publicclassBulletextendsFlyingObject{privateintspeed=3;publicBullet(intx,inty){ image=ShootGame.bullet;width=image.getWidth();height=image.getHeight();this.x=x;this.y=y;}publicvoidstep(){y-=speed;}publicbooleanoutOfBounds(){returny<-this.height;}}9.类Hero,表示英雄机继承FlyingObject类,重写step方法,实现动态的飞行;由于会发射子弹击中蜜蜂,所以可以获取双倍火力或生命值,因此该类含有双倍子弹的具体数量,生命值的数量;另外该类代表的对象会和其他对象相碰撞,所以该类中定义了一个判断撞击的方法hit()来实现对撞击范围的判断;还对越界的判断返回值固定为false,是一个boolean的值,表示永不越界;在该类中含有一个构造方法用于初始化数据;moveTo方法用于处理鼠标位置:英雄机的中心点;关键代码是实现飞机动态效果和撞击的判断:图示:撞击的判断/**重写step()*/publicvoidstep(){//10毫秒走一次 image=images[index++/10%images.length];//10*10=100毫秒}/**英雄机与敌人碰撞检查this:英雄机other:敌人*/publicbooleanhit(FlyingObjectother){intx1=other.x-this.width/2;//x1:蜜蜂的x-1/2英雄机的宽intx2=other.x+other.width+this.width/2;//x2:蜜蜂的x+蜜蜂的宽+1/2英雄机的宽inty1=other.y-this.height/2;//y1:蜜蜂的y-1/2英雄机的高inty2=other.y+other.height+this.height/2;//y2:蜜蜂的y+蜜蜂的高+1/2英雄机的高inthx=this.x+this.width/2;//hx:英雄机的x+1/2英雄机的宽inthy=this.y+this.height/2;//hy:英雄机的y+1/2英雄机的高returnhx>x1&&hxy1&&hy0){//双倍火力Bullet[]bullets=newBullet[2];bullets[0]=newBullet(this.x+xstep,this.y-ystep);bullets[1]=newBullet(this.x+3*xstep,this.y-ystep);doubleFire-=2;//火力减2returnbullets;}else{//单倍火力Bullet[]bullets=newBullet[1];bullets[0]=newBullet(this.x+2*xstep,this.y-ystep);returnbullets;}}10.主类ShootGame由于主类要实现画板的功能,所以继承了JPanel,在该类中,使用静态常量定义面板的宽和高,并使用ImageIO的read方法加载图片;界面绘制过程如下:(1).在该类中添加FlyingObject[]类型的属性flyings,用于存储射击游戏 的所有敌机和蜜蜂;(2).添加Bullet[]类型的属性bullet,用于存储射击游戏中的所有子弹;(3).添加Hero类型的属性hero,表示英雄机;(4).添加paintHero方法、paintBullets方法、paintFlyingObject方法,分别用于实现在面板上画英雄机、子弹、敌机、蜜蜂;并重写paint方法,在该方法中调用上述三个方法;(5).添加构造初始化属性flyings、bullets以及hero;(6).重构Airplane类Bee类,设置固定的x、y坐标位置,以便显示查看。另外在该类中定义了许多的方法,关键方法的详细功能及实现如下:1).shootAction()方法,实现每次调用20次该方法发射一次子弹,并将发射的子弹存储到bullets数组中2).bangAction方法和bang方法,这两个方法实现了子弹与飞行物(蜜蜂或敌机)的碰撞检测,详细过程如下:(1).循环遍历存储所有子弹的数组bullets;(2).在上述循环中,再次使用循环,遍历存储所有飞行物的数组flyings,在该循环中判断当前子弹是否击中某个飞行物,如果击中则退出循环,记录被击中的飞行物在flyings数组中的索引index;(3).在flyings数据中找到该飞行物,并将其移除;(4).判断该飞行物的类型是Emeny还是Award,如果是Enemy类型,则获取加分;如果是Award类型,则获取奖励(5).获取奖励的类型,如果是奖励的类型为DOUBLE_FIRE,则获得40次双倍活力;如果奖励类型是LIFE,则奖励生命值,3).outOfBoundsAction方法,该方法用于删除越界飞行物以及子弹,详细实现过程如下:(1).创建FlyingObject类型的数组flyingLives,用于存储所有活着的飞行物(蜜蜂和敌机),即没有越界的飞行物;(2).循环遍历存储所有飞行物的数组flyings,并判断每一个飞行物是否越界,将没有越界的飞行物放入flyingLives数组中存储,并记录不越界飞行物的个数index;(3).将flyingLives数组中的元素,复制到flyings数组中,并重新指定flyings数组的长度index; (4).删除子弹与删除飞行物的过程类似。4).isGameOver方法,该方法用于判断游戏是否结束,方法实现的详细过程如下:(1).循环遍历存储所有飞行物(蜜蜂和敌机)的数组flyings(2).在循环中,判断英雄机是否与飞行物发生碰撞,如果发生碰撞,则减生命值、双倍火力清零,记录被撞飞行物在flyings数组中的索引index,该索引默认是-1,即没有发生碰撞;(3).判断index是否为-1,如果不为-1,将该索引位置的元素从flyings数组中清除;(4).判断生命值是否小于等于0,并返回比较结果4.2各功能界面截图1.Shoots游戏的基本运行界面(1)初始界面 (2).程序开始运行界面鼠标点击游戏界面,游戏开始;移动鼠标可以操作英雄机 (3).鼠标移出游戏界面,出现暂停 (4).游戏结束界面 第五章系统测试5.1测试的意义系统测试时为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各个阶段的需求、设计等文档或程序的内容结构精心设计测试用例,并利用这些实例来运行程序,一边发现错误。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。 5.2测试过程(1).拟定测试计划。在指定测试计划时,要充分考虑整个项目的开发时间和卡法进度以及一些人为因素和客观条件等,使得测试计划是可行的。测试计划的内容主要有测试的内容、进度安排、测试所需要的环境和条件、测试培训安排等。(2).编制测试大纲。测试大纲是测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。(3).根据测试大纲设计和生成测试用例。在设计测试用例的时候,可综合利用前面介绍的测试用例设计技术,生成测试设计说明文档,其内容主要有被测项目、输入数据、测试过程、预期输出结果等。(4).实施测试。测试的实施阶段是由一系列的测试周期组成的,。在每个测试周期中,测试人员和开发人员将依据预先编制好的测试大纲和准备好的测试用例,对被测试软件或设备进行完整的测试。(5).生成测试报告。测试完成后,要形成相应的测试报告,主要对测试进行概要说明,列出测试的结论,指出缺陷和错误,另外,给出一些建议,如可采用的修改方法,各项修改预计的工作量及修改的负责人员。5.3测试结果程序在运行状态下,通过实际的操作测试了各个方法实现的功能:鼠标的滑动、越界的判断是否实现,子弹是否击中目标、英雄机与飞行物撞击是否实现。测试结果:程序运行正常,各个功能都有实现,没出现什么错误第六章总结通过这次设计让我对java语言有了更深的认识,同时深刻的体会到了程序设计的不易和它的魅力。编程就是把需要做的事情用程序语言描述出来;就像作家用文字描述自己的世界,程序员通过程序语言来描述他眼中的世界,而这次的毕业设计让我明白了我的许多不足:对于语言的学习还不到位,忽视了许多基础性的东西;发现在以往学习过程中犯了眼高手低的毛病,以至于在程序初始阶段不断翻阅相关书籍,对java语言的各种API的使用和方法的使用不 熟练。同时对于这个小游戏还存在许多的缺陷,例如没有实现玩游戏过程中对游戏的暂停、没有体现游戏等级难度的操作、游戏的可玩性不强等。附录:完整代码

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭