打飞机小游戏Java课程设计报告

上传人:无*** 文档编号:89257929 上传时间:2022-05-12 格式:DOC 页数:33 大小:159.50KB
返回 下载 相关 举报
打飞机小游戏Java课程设计报告_第1页
第1页 / 共33页
打飞机小游戏Java课程设计报告_第2页
第2页 / 共33页
打飞机小游戏Java课程设计报告_第3页
第3页 / 共33页
点击查看更多>>
资源描述
-*理工学院课程设计书学院计算机学院专业计算机科学与技术班级计科2014级题目打飞机小游戏教师王非学生雷元刚柯摘要随着Java语言的兴起,越来越多的平台开场使用java语言编写的程序,虽然不及C语言的高效,但是Java拥有的平台无关性是其他平台所不能企及的。几乎所有的银行系统都是运用Java来编写的,主要是因为其平安性较高。Java技术具有卓越的通用性、高效性、平台移植性和平安性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动和互联网,同时拥有全球最大的开发者专业社群。而运用Java编写图形化界面也是比拟容易的,因为其有专门的框架和界面,这样使得几行代码就可以创立一个图形化界面了。而本次要编写的打飞机小游戏,重复运用了图形化界面的知识,多线程,重画,添加监听器等。锻炼了我们实践编写界面代码的能力,提高了我们对于图形化界面编程的理解和运用各种容器和组件来实现我们所需要的界面。关键词:打飞机,多线程,重画,图形化目录第一章前言31.1开发背景3开发环境3第二章需求分析32.1 开发目的32.2 系统需求分析32.3 系统性能分析32.4 系统模块分析3第三章数据库设计33.1 数据库概述33.2数据库设计3第四章详细设计34.1 游戏概要34.2类的详细设计34.2.1 MyPlane类34.2.2 Bullet34.2.3 EnemyBullet34.2.4 EnemyPlane34.2.5 E*plode34.2.6 PlayMusic34.2.7 GameBo*34.2.8 DB34.2.9 StartFrame3第五章测试3第六章小结3致3参考文献3附录3. z-第一章前言随着网络的不断开展,在中国网民的数量越来越多。人们也对于互联网所能提供的功能有了一定的要求,比方能够在线观看视频,在线游戏,大数据效劳。互联网经过短短几十年的开展,相比起当初,已经发生了翻天覆地的变化。而游对于互联网的开展也有着一定的推动作用。SQL Server是目前应用比拟广泛的关系型数据库标准语言之一。现在,SQL已成为国际标准语言,各种类型的计算机和DBS都采用SQL作为其存取语言和标准接口,从而使数据库世界有可能为一个统一的整体。Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和图形用户界面两项特点,是 Microsoft Office 的系统程序之一。对于广阔用户而言,Access数据库的操作简便,和Office一起安装的,所以也有广泛的通用性。以数据库技术作为后台的可视化应用也越来越受到人们的喜爱,Java是目前应用比拟流行的可视化编程软件之一。它的功能强大,系统自带的代码较为齐,容易操作,受到很多用户的喜欢。Java开发游戏也是比拟容易的,对于广阔的网民和学生,在工作之余能够玩玩游戏也是一种不错的选择的休闲的方式,并且伴随着网络的普及化,越来越多的人们开场参加到游戏的大军中来,所以开发一款适合的游戏显的尤为重要。1.1开发背景游戏自古以来就有,以前的象棋,围棋,到现在的军旗,跳跳棋。毫不夸的说,游戏是人类智慧的结晶,是我们休闲娱乐的一种方式。数据库技术产生于20世纪60年代末70年代初,其主要目的是有效地管理和存取大量的数据资源.数据库技术主要研究如何存储,使用和管理数据. 数年来,数据库技术和计算机网络技术的开展相互渗透,相互促进,已成为当今计算机领域开展迅速,应用广泛的两大领域.数据库技术不仅应用于事务处理,并且进一步应用到情报检索,人工智能,专家系统,计算机辅助设计等领域.游戏参加数据库技术,能够在一定程度上减轻效劳器的负担,提高效劳器的负载能力。有利用实现更好的用户体验和数据的离线保存,有助于对于游戏数据的分析和处理。在大数据时代,对于数据的分析和处理显的更加重要。开发环境Windos系统,JDK1.8,jre7,Access数据库,Mysql数据库,Eclipse MARS软件一套。1.2游戏功能简介本游戏能够实现游戏和音乐同步播放,当飞机被摧毁是还有特殊音效。参加了游戏数据保存到本地数据库的功能,能够保存在MYSQL以及ACCESS中,满足各种环境下的需求。第二章需求分析2.1 开发目的打飞机游戏,是我们儿时在游戏厅中经常玩的游戏。它能勾起我们对于儿时的种种美好的回忆,而游戏本身难度适中,能够提升我们对于这种游戏的编写能力和逻辑思维能力。打飞机游戏也需要多线程的支持,而Java对于多线程的支持程度是比拟好的的。2.2 系统需求分析1、功能需求对于游戏结果的记录,判断是否有子弹击中飞机,判断是否2架飞机相撞。2、可靠性可用性需求能够在在程序异常的时候提示,在断电的情况下自动保存游戏数据。3、出错处理需求当游戏出错是,能够弹出一个对话框来提醒用户。4、游戏数据的处理对于生成的游戏数据,能够存入数据库的不同字段中。能够记录游戏数据插入数据库中的时间。2.3 系统性能分析为了保证系统能够长期、平安、稳定、可靠、高效地运行,本系统应该满足以下的性能需求。(1) 准确性和及时性程序采用的是坐标定位的方式,对于碰撞检测还是比拟全面,能够在一定的围检测,并提供了飞机碰撞检测和子弹碰撞检测这2种不同的检测方式。(2) 易用性由于采用的2套数据库,能够保证数据局部的通用性,而java又是与平台无关性的,所有能够保证程序的易用性。(3)平安性将游戏的数据放入数据库中,能够增加数据的平安性,需要程序在连接数据库的时候输入密码。2.4 系统模块分析1、子弹模块:(1) 用来管理自己的飞机所需要发出的子弹,放在Bulletlist的List类型的数组中。并提供了draw()函数,用来画出不同位置的子弹并利用重画功能,实现子弹的移动。(2) 敌机子弹功能,也是相应的重画功能,并能够通过EnemyBullet()功能初始化敌机子弹的位置。通过isLive()判读子弹是否有效。getY(),get*()获取子弹的横坐标和纵坐标,为碰撞检测提供依据。2、飞机模块:(1)敌机管理拥有1号级和2号级,并通过随机函数来调用不同的敌机出现在画面中。draw()能够实现对于飞机的重画,实现敌机的下落功能。(2)我机管理我机也包含初始化的*方向和Y方向上的速度,并设置dl,du,dr,dd为false。并添加了键盘监听器,能够对键盘的按钮做出响应,按下w,a,s,d分别对应的是飞机向上左下右移动。(3)数据管理对用户的信息和数据进展存入数据库的操作,和通过数据库调用用户数据。第三章数据库设计3.1 数据库概述数据库是整个系统的核心,它的设计直接关系系统执行的效率和系统的稳定性。因此在软件系统开发中,数据库设计应遵循必要的数据库式理论,以减少冗余、保证数据的完整性与正确性。只有在适宜的数据库产品上设计出合理的数据库模型,才能降低整个系统的编程和维护难度,提高系统的实际运行效率。3.2数据库设计1分数数据表如表3.1表3.1分数数据表字段名数据类型宽度是否为空说明User_Namevarchar10不允许为空记录者IDUser_Scorevarchar10不允许为空记录者成绩(2)数据库管理软件采用Mysql或者Acess,通过这两款软件来管理程序中需要存储管理的数据,并且能够加强我们的数据库思维,为以后的开发打好根底。数据库的详细代码设计如下:package Tools;public class DB private String url=jdbc:mysql:/localhost:3306/plane;private String driver=.mysql.jdbc.Driver;private Connection conn;private Statement stmt;public DB()try Class.forName(driver);conn=DriverManager.getConnection(url,root,123);stmt=conn.createStatement();System.out.println(数据库连接成功.); catch (ClassNotFoundE*ception e) e.printStackTrace(); catch (SQLE*ception e) e.printStackTrace();public boolean e*cuteWrite(String name,String score)String sql=insert into score values(+name+,+score+);try int result=stmt.e*ecuteUpdate(sql);System.out.println(Insert:+result);return true; catch (SQLE*ception e) e.printStackTrace();return false;public String e*cuteRead()String sql=select * from score;String name=,score=;StringBuffer end=new StringBuffer();try ResultSet result=stmt.e*ecuteQuery(sql);while(result.ne*t()name=result.getString(1);score=result.getString(2);end.append(name+t+score+n); catch (SQLE*ception e) e.printStackTrace();return (null=end) -: end.toString();第四章详细设计4.1 游戏概要程序启动后,进入游戏界面,用户就可以进展游戏了。本游戏采用的简便的操作,保存了大局部人的按键习惯。不仅可以用VK_UP、VK_DOWN、VK_RIGHT、VK_LEFT等按键来进展操作,还可以使用游戏中惯用的W、A、S、D等按键来进展上下左右操作。并且采用的数据库MySql和Acess能够对用户的成绩进展保存,方便用户查看成绩记录。4.1.1 游戏运行界面4.1.2 分数查看界面4.2类的详细设计4.2.1 MyPlane类1UML类图2. 详细分析(1) 成员变量l *,y是int类型的变量,用来记录我方战机的当前位置,进展位图绘制。l du,dd,dr,dl是boolean类型的变量,用来判断我方战机正在向那一个方向行进,一直按下*一个方向,将会向那个方向一直行进,直到边界。l MYPLANE_*SPEED, MYPLANE_YSPEED是int类型的变量,作用是控制我方战机横向和纵向的运行速度,保证一定的速率移动。l live是boolean类型的变量,作用是判断我方战机是否死亡。(2) 成员方法l MyPlane(int *,int y)构造函数,初始化我方战的位置,使之居于中央。l draw(Graphics g)绘图方法,我方战机位置改变时重新绘制。l keyPressed(KeyEvent e)按键方法,键盘上按下相应的键码进展相应的移动。l keyReleased(KeyEvent e)按键释放方法,按键释放使之不再移动。l move()战机移动方法,键按下后进展移动。l get*()获得战机的横向位置。l getY()获得战机的纵向位置。l isLive()战机是否存活。l setLive(boolean live)设置飞机存活状态。4.2.2 Bullet1UML类图2. 详细分析(1) 成员变量l BULLET_SPEED为int类型变量,初始为15.战机发射子弹的速率。l *,y为int类型变量,记录子弹的位置。l live为boolean类型的变量,判断子弹是否为有效状态。l bullet为Image类型变量,加载的子弹类图。(2) 成员方法l Bullet(int *,int y)构造方法,子弹位图绘制的位置。l draw(Graphics g)绘制子弹位图的方法。l isLive()判断子弹是否为有效状态。l setLive(boolean live)设置子弹是否有效。l get*(),getY()获得子弹的位置坐标。4.2.3 EnemyBullet1UML类图2. 详细分析(1) 成员变量l *,y为int类型变量,记录敌机位置坐标。l bulletspeed为int类型变量,初始值为15,用来设置子弹速度的变量。l live为boolean类型变量,判断子弹是否为有效状态。l enemyplanebullet为Image类型变量,敌机子弹所加载的位图。(2) 成员方法l EnemyBullet(int *,int y)构造方法,初始敌机子弹的位置。l draw(Graphics g)绘制敌机子弹的方法,用来重新绘制。l isLive()敌机子弹是否为存活状态。l setLive(boolean live)设置子弹的状态。l get*(),getY()获取敌机子弹的坐标,用来重新绘制。4.2.4 EnemyPlane1UML类图2. 详细分析(1) 成员变量l *peed为敌机的横向运动速度。l yspeed这敌机的纵向运动速度。l live为boolean类型变量,用来设置和判断敌机是否存活。l fired 为boolean类型变量,判断敌机是否为开火状态。l *,y为int类型变量,用来记录敌机的位置。l enemy为Image类型变量,用来加载敌机位图。l rand 为Random类型对象,用来产生随机数。(2) 成员方法l EnemyPlane(StartFrame sf)构造方法,用来初始化敌机。l draw(Graphics g)方法用来重新绘制敌机,重绘方法。l move()方法用来对敌机进展移动,移动方法。l get*(),getY()方法用来获取敌机的位置。l isLive()判断敌机是否为存活状态。l setLive(boolean live)设置敌机是否为存活。l get*peed()得到敌机的横向运动速度。l set*peed(int *peed)设置横向运动速度。l getYspeed()得到纵向运动速度。l setYspeed(int yspeed)设置纵向运动速度。l isFired()是否为开火状态。l setFired(boolean fired)设置开火状态。4.2.5 E*plode1UML类图2. 详细分析(1) 成员变量l *,y为int类型变量,记录爆炸位置。l live 为boolean类型变量,判断爆炸状态。l E*plode1为Image类型对象,用来加载爆炸的位图。(2) 成员方法l E*plode(int *,int y)构造方法,初始化爆炸位置及位图。l draw(Graphics g)绘制方法,用来绘制爆炸位图。l isLive()是否为存活状态。l setLive(boolean live)设置是否为存活状态。l getCount()得到爆炸次数。l setCount()设置爆炸次数。4.2.6 PlayMusic1UML类图2. 详细分析(1) 成员变量l musicFile为File类型对象,用来播放的文件。l clip为 AudioClip类型对象,进展播放的对象。l fileURI 为URI类型对象,文件的URI路径。l fileURL 为URL类型对象,文件的URL路径。(2) 成员方法l PlayMusic(String music)构造方法,初始化播放的音频文件。l play()播放方法,进展音频播放。l stop()停顿方法,音频停顿方法。l loop()循环方法,使音频循环播放。4.2.7 GameBo*1UML类图2. 详细分析(1) 成员变量l GAME_WIDTH是int型变量设置游戏面板的宽度为800。l GAME_HEIGHT 是int型变量设置面板的高度为600。l f1I Image类型的对象,用来设置字体的颜色大小和行间距。l backgroundimage 用来加载背景图片。l plane Image类型变量,用来设置加载飞机的图片。l PLANE_WIDTH int类型变量,用来设置飞机的高度。l PLANE_HEIGHT int类型变量用来设置飞机的宽度。l E*plode1 Image类型的对象。用来加载爆炸的图片。l E*PLODE1_WIDTH int类型变量,用来设置爆炸的围的高度。l E*PLODE1_HEIGHT int类型变量,用来设置爆炸围的宽度。l Bullet Image类型的对象,用来设置子弹需要加载的图片。l BULLET_WIDTH int型变量,用来设置子弹的宽度。l BULLET_HEIGHT int 型变量,用来设置子弹的高度。l enemy1 Image类型的对象,用来设置敌机的宽度。l enemy2 Image类型的对象,用来设置敌机的高度。l enemybullet Image类型的对象,用来加载敌机发出的子弹。l ENEMYBULLET_WIDTH int类型的变量,用来设置子弹的大小。l ENEMYBULLET_HEIGHT int 类型的变量,用来设置子弹的大小。l back_music 字符串类型变量,加载背景音乐。l bomb_music字符串类型变量,加载子弹爆炸音乐。4.2.8 DB1UML类图2. 详细分析(1) 成员变量l url为String类型对象,数据库URL路径。用来连接数据库。l driver为String类型对象,加载数据库的驱动。l conn为Connection类型对象,用来与数据库进展连接。l stmt为Statement类型对象,用来操作Sql语句从而操纵数据库。(2) 成员方法l DB()构造方法,加载数据库驱动,实现数据库连接。l e*cuteWrite(String name,String score)将数据写入数据库方法。l e*cuteRead()从数据库中读取数据方法。4.2.9 StartFrame1UML类图2. 详细分析(1) 成员变量l bk为Image类型对象,用来加载游戏的背景位图。l myplane为MyPlane类型对象,建立我方战机。l sourse 为float类型变量,存储分数。l death, life为我方战机死亡次数和生命值。l bulletlist为 ArrayList对象,用来存储子弹的线性表。l e*plodelist 为ArrayList对象,用来存储爆炸对象的线性表。l enemybulletlist为 ArrayList对象,用来存储敌机子弹对象的线性表。l e*Item,score为Jmenu类型对象,菜单条目。l jp为Jpanel对象,框架类的面板对象。l db为DB对象,用来进展数据库操作。l musicBackground musicBomb为PlayMusic对象,用来播放背景音乐。(2) 成员方法l StartFrame()构造方法,初始化面板及位图。加载游戏界面。l queryRecord()查询分数记录方法。l void run()游戏进展线程方法,实现游戏的运行。l clearEnemyBullet()去除无效的敌机子弹。l clearBullet()去除无效的子弹。l createBullet()创立子弹。l clearEnemyplane()去除敌机状态为False的对象。l clearE*plode()去除爆炸状态为False的对象。l hitPlane()攻击敌机的方法。l impactMyplane()判断是否碰撞。l hitMyplane()我方战机被攻击的方法。l endGame()完毕游戏,扫尾方法。l recored()记录成绩方法。l ifEnd()判断是否完毕。l actionPerformed(ActionEvent e)菜单条目的动作事件实现方法。第五章测试5.1 测试方案本游戏的测试方法采用检查各个功能,各个模块是否实现的方法。测试能否正常的运行,游戏是否流畅,是否会卡顿等一系列体验为测试主要因素。5.2 测试人员及目的测试人员:雷元刚柯测试目的:游戏功能实现、流畅度以及体验感。5.3 测试工程及功能控制区功能测试VK_UP按键:实现飞机的向上运动VK_DOWN按键:实现飞机的向下运动VK_LFET按键:实现飞机的向左运动VK_RIGHT按键:实现飞机的向右移动VK_UP及VK_LFET按键:实现飞机的左上飞行VK_DOWN及VK_LFET按键:实现飞机的左下飞机VK_UP及VK_RIGHT按键:实现飞机的右上飞行VK_DOWN及VK_RIGHT按键:实现飞机的右下飞行菜单区功能测试分数菜单项选择项:查看游戏中保存的分数记录设置菜单项选择项:设置游戏中的背景音乐退出菜单项选择项:退出游戏游戏区功能测试:敌机的正常行进以及我方战机的正常显示。子弹的测试:敌机子弹的正常发射,我方战机的子弹正常发射。5.4 测试结果及分析测试1:控制区功能测试测试容:我方战机的向上移动、向下移动、向左移动、向右移动、向左上移动、向左下移动、向右下移动、向右上移动的功能实现。测试目的:VK_UP、VK_DOWN、VK_LEFT、VK_RIGHT等四个功能按键。测试图:如图图5.4.1 控制区功能测试测试结果及分析:能够正确的通过WASD和方向键控制飞机的运动。测试2:菜单项功能测试。测试容:对菜单项的各个菜单条目进展功能测试。点击相应的菜单条目,功能能否实现。测试目的:菜单项的各个功能实现。测试图如图:图5.4.2 数据保存测试结果及分析:能够正常显示分数,用户名。实现了该局部功能的需求测试3:显示区功能测试测试容:我方战机和敌机的正常显示以及敌我双方子弹的正常行进。测试目的:通过测试,判断程序的功能是否正常测试图如图5.4.3:图5.4.3 测试子弹功能测试结果及分析:通过测试,我方飞机和敌方飞机都能够正常发射子弹,子弹能够正确击中目标。第六章小结在本次课程设计中,我们小组采用分工合作方式。在程序代码和设计报告书写中,小组两人均分工占比到达的50%左右,在代码的设计以及调试中,互相学习交流,对程序代码中有迷糊时,通过讨论、查阅资料来解决这些问题,从而保证了进度。这次课程设计遇到了许多问题,这也充分暴露了Java知识存储量的不够,在一些Java根底知识上比拟薄弱,不明以。通过了课程设计的问题出现,重新学习了Java的根底知识,对Java知识又有了一个重新的理解。另外一个主要的问题就是在代码的书写中,有许多Java类以及函数不知道,以至于绕了很多弯路。在课程设计的代码书写过程中养成了查阅JavaAPI的好习惯,相信会在以后的程序设计中起到重要作用。针对这一次的课程设计,我做了以下总结:(1)Java是一门面向对象的语言,在程序设计中要有面向对象的思想,相比于代码。我认为面向对象的思想更加重要,在以后的学习中,要持续培养这种思维。(2)Java程序中查阅JavaAPI是一种比拟好的方法,通过不断的查阅学习过程,能够累积许多新知识,久而久之就是一份巨大的财富。(3)Java程序中要学会设计,最好是能够懂得设计模式的相关知识,这在程序各个方面都是比拟重要的。致经过两天的不懈努力,很兴奋能完成一个Java编程程序,紧的心终于可以平静了。从中体会到以及学习到很多关于Java的知识,使我更加了解Java,并更加熟练了Java。在此次设计中我也遇到了很多的问题,都是经过查询JavaAPI和询问教师来解决这些问题,更重要的是上课时教师的细心教学,使我们学会了许多关于Java的根底知识,为本次的课程设计打好了很好的根底。从而使我能够顺利完成这次课程设计。在本次做课程设计过程中,要感王非教师的悉心照顾,一直陪伴我们,并为我们讲解不懂的地方,很是辛苦,也很是忙碌。还要感学院为我们此次课程设计提供机房,让我们有了良好的学习环境可以利用做课程设计,从很大的程度上增强了我们对于Java学习的兴趣。和小组成员一块讨论,多听听别人的想法,想方法改良自己,这使我受益匪浅。只有比拟才能知道自己的缺乏。完毕课程设计时,明白了自己与实际所需的距离,因为现在毕业求职难,特别是对于像自己一般的人,更多的时侯是社会,职业选择自己,而不是更多的自己去选择职业,所以更应该把所学的知识灵活地用于实践,这次课程设计就是对自己一个很好的锻炼时机,无论任何的偿试,都是自己以后很珍贵的经历,更是对自己的一种充实。参考文献1 雍俊海. Java程序设计教程M. :清华大学,2014. 2 钱慎一. Java程序设计教程实用教程M. :科学,2011. 3 明. 软件工程M.:中国铁道,2011.4 Ian Sommerville. Software Engineering, Ninth Editi M. :机械工业,2011.5 Eric Freeman,ElElisabeth Freeman. HeadFirst设计模式M. :中国电力,2007.6 严蔚敏,吴伟民. 数据构造(C语言版)M. :清华大学,2015.7 邓俊辉. 数据构造(C+语言版) M. :清华大学,2010.8 王珊,红. 数据库系统原理教程M. :清华大学,1998.附录类StartFrame的源代码如下:public class StartFrame e*tends JFrame implements Runnable,ActionListenerImage bk=GameBo*.backgroundimage;/加载游戏背景MyPlane myplane;/实例化自己的飞机对象List enemyplanelist=new ArrayList();/敌机线性表private int count=0;private float sourse=0;private int life=3,death=0;/自己子弹线性表List bulletlist=new ArrayList();/爆炸线性表List e*plodelist=new ArrayList();/敌机子弹线性表List enemybulletlist=new ArrayList();JPanel jp;JMenu e*Item,score;JMenuBar menuBar;PlayMusic musicBackground,musicBomb;DB db;public static void main(String args) new Thread(new StartFrame().start();public StartFrame()/构造函数初始化db=new DB();musicBomb=new PlayMusic(GameBo*.back_music);menuBar=new JMenuBar();score=new JMenu(分数);score.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) queryRecord(););menuBar.add(score); e*Item=new JMenu(退出); e*Item.addMouseListener(new MouseAdapter() public void mousePressed(MouseEvent e) musicBackground.stop(); System.e*it(0););menuBar.add(e*Item);setJMenuBar(menuBar);/设置构架大小this.setSize(GameBo*.GAME_WIDTH,GameBo*.GAME_HEIGHT+30);/窗口居中int width=Toolkit.getDefaultToolkit().getScreenSize().width;int height=Toolkit.getDefaultToolkit().getScreenSize().height;setLocation(width/2-GameBo*.GAME_WIDTH/2, /设置构架位置height/2-GameBo*.GAME_HEIGHT/2);setResizable(false); /大小固定/设置飞机在框架的位置myplane=new MyPlane(GameBo*.GAME_WIDTH/2,GameBo*.GAME_HEIGHT-GameBo*.PLANE_HEIGHT*2);/增加敌机线程启动new Thread(new AddEnemy().start();/为框架添加按键监听this.addKeyListener(new KeyMonitor();/框架添加游戏面板this.add(new GameJPanel();/设置框架名称setTitle(打飞机小游戏);addWindowListener(new WindowAdapter()Overridepublic void windowOpened(WindowEvent arg0) musicBackground=new PlayMusic(GameBo*.back_music);musicBackground.loop();Overridepublic void windowClosing(WindowEvent arg0) musicBackground.stop(););this.setDefaultCloseOperation(JFrame.E*IT_ON_CLOSE);setVisible(true);private void queryRecord() String score=db.e*cuteRead();JFrame scoreFrame=new JFrame(-排行榜-);JTe*tArea scoreArea=new JTe*tArea();JScrollPane scoreScroll=new JScrollPane(scoreArea);scoreArea.setTe*t(用户名: t 最高分:n);scoreArea.setEditable(false);scoreArea.append(score);scoreFrame.add(scoreScroll);scoreFrame.setSize(200, 100);scoreFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);scoreFrame.setVisible(true);Overridepublic void run() while(true)repaint();/Repaints this ponent. try Thread.sleep(48);/线程睡眠50毫秒 catch (InterruptedE*ception e) e.printStackTrace();private class KeyMonitor e*tends KeyAdapter public void keyReleased(KeyEvent e) if(e.getKeyCode()=KeyEvent.VK_ENTER)/按下F2飞机重新活过来myplane.setLive(true);myplane.keyReleased(e);/传递按键释放对象public void keyPressed(KeyEvent e) myplane.keyPressed(e);/传递按键按下对象private class AddEnemy implements RunnableOverridepublic void run() while(true)try Thread.sleep(600);addEnemyPlane(); catch (InterruptedE*ception e) e.printStackTrace();private void addEnemyPlane()EnemyPlane enemyplane=new EnemyPlane(StartFrame.this);/为飞机添加子弹到子弹线性表中enemybulletlist.add(new EnemyBullet(enemyplane.get*(),enemyplane.getY(); /添加飞机到敌机线性表中enemyplanelist.add(enemyplane);/游戏面板private class GameJPanel e*tends JPanelprivate static final long serialVersionUID = 1L;public void paint(Graphics g)/super.paint(g)是方法的重写,super关键字是屏蔽父类paintg方法,执行子类paintg方法super.paint(g);/绘画背景层指定高度的宽度 g.drawImage(bk,0,0,GameBo*.GAME_WIDTH,GameBo*.GAME_HEIGHT,null);/绘出自己的飞机myplane.draw(g);if (count=0)if(myplane.isLive()/飞机存活创立子弹createBullet();else/否则移除所有子弹for(int i=0;ibulletlist.size();i+)bulletlist.remove(i);count+;/控制发子弹的速度if(count=2)count=0;for(int i=0;ibulletlist.size();i+)Bullet bullet=bulletlist.get(i);/得到第I个子弹并且重新画出bullet.draw(g);/清掉前面的子弹clearBullet();/敌机处理for(int i=0;i95&enemyplane.isLive()enemybulletlist.add(new EnemyBullet(enemyplane.get*(),enemyplane.getY();/如果敌机面对我方飞机时发射一枚子弹敌机存活并且开火if(enemyplane.get*()=myplane.get*()&enemyplane.get*()=myplane.get*()+GameBo*.PLANE_WIDTH&enemyplane.isFired()&enemyplane.isLive()enemybulletlist.add(new EnemyBullet(enemyplane.get*(),enemyplane.getY();/设置开火为falseenemyplane.setFired(false);for(int i=0;i=1)hitMyplane();/敌机子弹攻击我方战机for(int i=0;ie*plodelist.size();i+)E*plode e*p=e*plodelist.get(i);e*p.draw(g);e*p.setCount(e*p.getCount()+1);clearE*plode();g.setColor(Color.RED);/g.setFont(GameBo*.f1);/设置字体之后加载窗口会卡2秒钟if(sourse!=0)g.drawString(您的得分:+(int)sourse+0, 50, 50);g.drawString(您的生命:+life, 50, 70);g.drawString(死亡次数:+death, 50, 90);elseg.drawString(您的得分:0, 50, 50);g.drawString(您的生命:+life, 50, 70);g.drawString(死亡次数:+death, 50, 90);/敌机子弹不存活立即移除private void clearEnemyBullet() for(int i=0;ienemybulletlist.size();i+)if(!(enemybulletlist.get(i).isLive()enemybulletlist.remove(i);/创立子弹private void createBullet()/飞机高度为30宽度加5使子弹看起来是居中的Bullet bullet=new Bullet(myplane.get*()+5),(myplane.getY()-30);bulletlist.add(bullet);/去除不存活的子弹 Live状态为Falseprivate void clearBullet()for(int i=0;ibulletlist.size();i+)if(!(bulletlist.get(i).isLive()bulletlist.remove(i);/去除敌机不存活的子弹 Live状态为Falseprivate void clearEnemyplane() for(int i=0;ienemyplanelist.size();i+)if(!(enemyplanelist.get(i).isLive()enemyplanelist.remove(i);/爆炸状态为False去除爆炸private void clearE*plode() for(int i=0;ie*plodelist.size();i+)if(!(e*plodelist.get(i).isLive()e*plodelist.remove(i);/攻击private void hitPlane()int b*,e*,by,ey;Bullet bullet;EnemyPlane enemyplane;for(int i=0;ibulletlist.size();i+)bullet=bulletlist.get(i);b*=bullet.get*();by=bullet.getY();for(int j=0;j=e*&b*=ey&by=ey+GameBo*.ENEMY_HEIGHT&enemyplane.isLive()&bullet.isLive()bullet.setLive(false);enemyplane.setLive(false);e*plodelist.add(new E*plode(b*,by);/sourse=sourse+1.168320194f;/防止CE恶意修改分数我的QQsourse=sourse+100;private void impactMyplane()int m*,my,e*,ey;EnemyPlane enemyplane;/获得自己战机位置m*=myplane.get*();my=myplane.getY();for(int i=0;i=e*&m*=ey&my=ey+GameBo*.ENEMY_HEIGHT&myplane.isLive()&enemyplane.isLive()death+;life-;if(ifEnd()endGame()
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!