资源描述
四 川 理 工 学 院
课 程 设 计 书
学院 计算机学院
专业 计算机科学和技术
班级 计科级
题目 打飞机小游戏
老师 王非
学生 雷元刚 张柯
摘 要
伴随Java语言兴起,越来越多平台开始使用java语言编写程序,即使不及C语言高效,不过Java拥有平台无关性是其它平台所不能企及。几乎全部银行系统全部是利用Java来编写,关键是因为其安全性较高。Java 技术含有卓越通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大开发者专业社群。
而利用Java编写图形化界面也是比较轻易,因为其有专门框架和界面,这么使得几行代码就能够创建一个图形化界面了。而此次要编写打飞机小游戏,反复利用了图形化界面知识,多线程,重画,添加监听器等。锻炼了我们实践编写界面代码能力,提升了我们对于图形化界面编程了解和利用多种容器和组件来实现我们所需要界面。
关键词:打飞机,多线程,重画,图形化
目 录
第一章 前言 1
1.1开发背景 1
1.1.1开发环境 2
第二章 需求分析 2
2.1 开发目的 2
2.2 系统需求分析 2
2.3 系统性能分析 2
2.4 系统模块分析 3
第三章 数据库设计 4
3.1 数据库概述 4
3.2数据库设计 4
第四章 详细设计 6
4.1 游戏概要 6
4.2类的详细设计 6
4.2.1 MyPlane类 6
4.2.2 Bullet 7
4.2.3 EnemyBullet 8
4.2.4 EnemyPlane 8
4.2.5 Explode 10
4.2.6 PlayMusic 11
4.2.7 GameBox 11
4.2.8 DB 13
4.2.9 StartFrame 13
第五章 测试 15
第六章 小结 19
致 谢 20
参考文献 21
附 录 22
第一章 序言
伴随网络不停发展,在中国网民数量越来越多。大家也对于互联网所能提供功效有了一定要求,比如能够在线观看视频,在线游戏,大数据服务。互联网经过短短几十年发展,相比起当初,已经发生了翻天覆地改变。而游对于互联网发展也有着一定推进作用。
SQL Server是现在应用比较广泛关系型数据库标准语言之一。现在,SQL已成为国际标准语言,多种类型计算机和DBS全部采取SQL作为其存取语言和标准接口,从而使数据库世界有可能链接为一个统一整体。
Microsoft Office Access是由微软公布关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 系统程序之一。对于广大用户而言,Access数据库操作简便,和Office一起安装,所以也有广泛通用性。
以数据库技术作为后台可视化应用也越来越受到大家喜爱,Java是现在应用比较流行可视化编程软件之一。它功效强大,系统自带代码较为齐,轻易操作,受到很多用户喜爱。
Java开发游戏也是比较轻易,对于广大网民和学生,在工作之余能够玩玩游戏也是一个不错选择休闲方法,而且伴伴随网络普及化,越来越多大家开始加入到游戏大军中来,所以开发一款适合游戏显尤为关键。
1.1开发背景
游戏自古以来就有,以前象棋,围棋,到现在军旗,跳跳棋。毫不夸张说,游戏是人类智慧结晶,是我们休闲娱乐一个方法。
数据库技术产生于20世纪60年代末70年代初,其关键目标是有效地管理和存取大量数据资源.数据库技术关键研究怎样存放,使用和管理数据. 数年来,数据库技术和计算机网络技术发展相互渗透,相互促进,已成为当今计算机领域发展快速,应用广泛两大领域.数据库技术不仅应用于事务处理,而且深入应用到情报检索,人工智能,教授系统,计算机辅助设计等领域.
游戏加入数据库技术,能够在一定程度上减轻服务器负担,提升服务器负载能力。有利用实现愈加好用户体验和数据离线保留,有利于对于游戏数据分析和处理。在大数据时代,对于数据分析和处理显愈加关键。
1.1.1开发环境
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) 用来管理自己飞机所需要发出子弹,放在BulletlistList类型数组中。并提供了draw()函数,用来画出不一样位置子弹并利用重画功效,实现子弹移动。
(2) 敌机子弹功效,也是对应重画功效,并能够经过EnemyBullet()功效初始化敌机子弹位置。经过isLive()判读子弹是否有效。getY(),getX()获取子弹横坐标和纵坐标,为碰撞检测提供依据。
2、飞机模块:
(1)敌机管理
拥有1号级和2号级,并经过随机函数来调用不一样敌机出现在画面中。draw()能够实现对于飞机重画,实现敌机下落功效。
(2)我机管理
我机也包含初始化X方向和Y方向上速度,并设置dl,du,dr,dd为false。并添加了键盘监听器,能够对键盘按钮做出响应,按下w,a,s,d分别对应是飞机向上左下右移动。
(3)数据管理
对用户信息和数据进行存入数据库操作,和经过数据库调用用户数据。
第三章 数据库设计
3.1 数据库概述
数据库是整个系统关键,它设计直接关系系统实施效率和系统稳定性。所以在软件系统开发中,数据库设计应遵照必需数据库范式理论,以降低冗余、确保数据完整性和正确性。只有在适宜数据库产品上设计出合理数据库模型,才能降低整个系统编程和维护难度,提升系统实际运行效率。
3.2数据库设计
(1)分数数据表 如表3.1
表3.1分数数据表
字段名
数据类型
宽度
是否为空
说明
User_Name
varchar
10
不许可为空
统计者ID
User_Score
varchar
10
不许可为空
统计者成绩
(2)数据库管理软件采取Mysql或Acess,经过这两款软件来管理程序中需要存放管理数据,而且能够加强我们数据库思维,为以后开发打好基础。数据库具体代码设计以下:
package Tools;
public class DB {
private String url="jdbc:mysql://localhost:3306/plane";
private String driver="com.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 (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public boolean excuteWrite(String name,String score){
String sql="insert into score values('"+name+"','"+score+"')";
try {
int result=stmt.executeUpdate(sql);
System.out.println("Insert:"+result);
return true;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public String excuteRead(){
String sql="select * from score";
String name="",score="";
StringBuffer end=new StringBuffer();
try {
ResultSet result=stmt.executeQuery(sql);
while(result.next()){
name=result.getString(1);
score=result.getString(2);
end.append(name+"\t"+score+"\n");
}
} catch (SQLException 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类
1.UML类图
2. 具体分析
(1) 组员变量
l x,y是int类型变量,用来统计我方战机目前位置,进行位图绘制。
l du,dd,dr,dl是boolean类型变量,用来判定我方战机正在向那一个方向行进,一直按下某一个方向,将会向那个方向一直行进,直到边界。
l MYPLANE_XSPEED, MYPLANE_YSPEED是int类型变量,作用是控制我方战机横向和纵向运行速度,确保一定速率移动。
l live是boolean类型变量,作用是判定我方战机是否死亡。
(2) 组员方法
l MyPlane(int x,int y)结构函数,初始化我方战位置,使之居于中央。
l draw(Graphics g)绘图方法,我方战机位置改变时重新绘制。
l keyPressed(KeyEvent e)按键方法,键盘上按下对应键码进行对应移动。
l keyReleased(KeyEvent e)按键释放方法,按键释放使之不再移动。
l move()战机移动方法,键按下后进行移动。
l getX()取得战机横向位置。
l getY()取得战机纵向位置。
l isLive()战机是否存活。
l setLive(boolean live)设置飞机存活状态。
4.2.2 Bullet
1.UML类图
2. 具体分析
(1) 组员变量
l BULLET_SPEED为int类型变量,初始为15.战机发射子弹速率。
l x,y为int类型变量,统计子弹位置。
l live为boolean类型变量,判定子弹是否为有效状态。
l bullet为Image类型变量,加载子弹类图。
(2) 组员方法
l Bullet(int x,int y)结构方法,子弹位图绘制位置。
l draw(Graphics g)绘制子弹位图方法。
l isLive()判定子弹是否为有效状态。
l setLive(boolean live)设置子弹是否有效。
l getX(),getY()取得子弹位置坐标。
4.2.3 EnemyBullet
1.UML类图
2. 具体分析
(1) 组员变量
l x,y为int类型变量,统计敌机位置坐标。
l bulletspeed为int类型变量,初始值为15,用来设置子弹速度变量。
l live为boolean类型变量,判定子弹是否为有效状态。
l enemyplanebullet为Image类型变量,敌机子弹所加载位图。
(2) 组员方法
l EnemyBullet(int x,int y)结构方法,初始敌机子弹位置。
l draw(Graphics g)绘制敌机子弹方法,用来重新绘制。
l isLive()敌机子弹是否为存活状态。
l setLive(boolean live)设置子弹状态。
l getX(),getY()获取敌机子弹坐标,用来重新绘制。
4.2.4 EnemyPlane
1.UML类图
2. 具体分析
(1) 组员变量
l xpeed为敌机横向运动速度。
l yspeed这敌机纵向运动速度。
l live为boolean类型变量,用来设置和判定敌机是否存活。
l fired 为boolean类型变量,判定敌机是否为开火状态。
l x,y为int类型变量,用来统计敌机位置。
l enemy为 Image类型变量,用来加载敌机位图。
l rand 为Random类型对象,用来产生随机数。
(2) 组员方法
l EnemyPlane(StartFrame sf)结构方法,用来初始化敌机。
l draw(Graphics g)方法用来重新绘制敌机,重绘方法。
l move()方法用来对敌机进行移动,移动方法。
l getx(),getY()方法用来获取敌机位置。
l isLive()判定敌机是否为存活状态。
l setLive(boolean live)设置敌机是否为存活。
l getXpeed()得到敌机横向运动速度。
l setXpeed(int xpeed)设置横向运动速度。
l getYspeed()得到纵向运动速度。
l setYspeed(int yspeed)设置纵向运动速度。
l isFired()是否为开火状态。
l setFired(boolean fired)设置开火状态。
4.2.5 Explode
1.UML类图
2. 具体分析
(1) 组员变量
l x,y为int类型变量,统计爆炸位置。
l live 为boolean类型变量,判定爆炸状态。
l Explode1为Image类型对象,用来加载爆炸位图。
(2) 组员方法
l Explode(int x,int y)结构方法,初始化爆炸位置及位图。
l draw(Graphics g)绘制方法,用来绘制爆炸位图。
l isLive()是否为存活状态。
l setLive(boolean live)设置是否为存活状态。
l getCount()得到爆炸次数。
l setCount()设置爆炸次数。
4.2.6 PlayMusic
1.UML类图
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 GameBox
1.UML类图
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 Explode1 Image类型对象。用来加载爆炸图片。
l EXPLODE1_WIDTH int类型变量,用来设置爆炸范围高度。
l EXPLODE1_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 DB
1.UML类图
2. 具体分析
(1) 组员变量
l url为String类型对象,数据库URL路径。用来连接数据库。
l driver为String类型对象,加载数据库驱动。
l conn为Connection类型对象,用来和数据库进行连接。
l stmt为Statement类型对象,用来操作Sql语句从而操纵数据库。
(2) 组员方法
l DB()结构方法,加载数据库驱动,实现数据库连接。
l excuteWrite(String name,String score)将数据写入数据库方法。
l excuteRead()从数据库中读取数据方法。
4.2.9 StartFrame
1.UML类图
2. 具体分析
(1) 组员变量
l bk为Image类型对象,用来加载游戏背景位图。
l myplane为MyPlane类型对象,建立我方战机。
l sourse 为float类型变量,存放分数。
l death, life为我方战机死亡次数和生命值。
l bulletlist为 ArrayList<Bullet>对象,用来存放子弹线性表。
l explodelist 为ArrayList<Explode>对象,用来存放爆炸对象线性表。
l enemybulletlist为 ArrayList<EnemyBullet>对象,用来存放敌机子弹对象线性表。
l exItem,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 clearExplode()清除爆炸状态为False对象。
l hitPlane()攻击敌机方法。
l impactMyplane()判定是否碰撞。
l hitMyplane()我方战机被攻击方法。
l endGame()结束游戏,扫尾方法。
l recored()统计成绩方法。
l ifEnd()判定是否结束。
l actionPerformed(ActionEvent e)菜单条目标动作事件实现方法。
第五章 测试
5.1 测试方案
本游戏测试方法采取检验各个功效,各个模块是否实现方法。测试能否正常运行,游戏是否流畅,是否会卡顿等一系列体验为测试关键原因。
5.2 测试人员及目标
测试人员:雷元刚 张柯
测试目标:游戏功效实现、流畅度和体验感。
5.3 测试项目及功效
5.3.1控制区功效测试
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.3.2菜单区功效测试
分数菜单选项:查看游戏中保留分数统计
设置菜单选项:设置游戏中背景音乐
退出菜单选项:退出游戏
5.3.3游戏区功效测试:敌机正常行进和我方战机正常显示。
5.3.4子弹测试:敌机子弹正常发射,我方战机子弹正常发射。
5.4 测试结果及分析
测试1:控制区功效测试
测试内容: 我方战机向上移动、向下移动、向左移动、向右移动、向左上移动、向左下移动、向右下移动、向右上移动功效实现。
测试目标:VK_UP、VK_DOWN、VK_LEFT、VK_RIGHT等四个功效按键。
测试图:图5. 4.1
图5. 4.1 控制区功效测试
测试结果及分析:能够正确经过WASD和方向键控制飞机运动。
测试2:菜单项功效测试。
测试内容:对菜单项各个菜单条目进行功效测试。点击对应菜单条目,功效能否实现。
测试目标:菜单项各个功效实现。
测试图图5.4.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]. 北京:清华大学出版社,.
[2] 钱慎一. Java程序设计教程实用教程[M]. 北京:科学出版社,.
[3] 陈明. 软件工程[M]. 北京:中国铁道出版社,.
[4] Ian Sommerville. Software Engineering, Ninth Editi [M]. 北京:机械工业出版社,.
[5] Eric Freeman,ElElisabeth Freeman. HeadFirst设计模式[M]. 北京:中国电力出版社,.
[6] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社,.
[7] 邓俊辉. 数据结构(C++语言版) [M]. 北京:清华大学出版社,.
[8] 王珊,陈红. 数据库系统原理教程[M]. 北京:清华大学出版社,1998.
附 录
类StartFrame源代码以下:
public class StartFrame extends JFrame implements Runnable,ActionListener{
Image bk=GameBox.backgroundimage;/////加载游戏背景
MyPlane myplane;/////实例化自己飞机对象
List<EnemyPlane> enemyplanelist=new ArrayList<EnemyPlane>();/////敌机线性表
private int count=0;
private float sourse=0;
private int life=3,death=0;/////自己子弹线性表
List<Bullet> bulletlist=new ArrayList<Bullet>();/////爆炸线性表
List<Explode> explodelist=new ArrayList<Explode>();/////敌机子弹线性表
List<EnemyBullet> enemybulletlist=new ArrayList<EnemyBullet>();
JPanel jp;
JMenu exItem,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(GameBox.back_music);
menuBar=new JMenuBar();
score=new JMenu("分数");
score.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e){
queryRecord();
}
});
menuBar.add(score);
exItem=new JMenu("退出");
exItem.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e){
musicBackground.stop();
System.exit(0);
}
});
menuBar.add(exItem);
setJMenuBar(menuBar);
/////设置构架大小
this.setSize(GameBox.GAME_WIDTH,GameBox.GAME_HEIGHT+30);
//窗口居中
int width=Toolkit.getDefaultToolkit().getScreenSize().width;
int height=Toolkit.getDefaultToolkit().getScreenSize().height;
setLocation(width/2-GameBox.GAME_WIDTH/2, /////设置构架位置
height/2-GameBox.GAME_HEIGHT/2);
setResizable(false); /////大小固定
/////设置飞机在框架位置
myplane=new MyPlane(GameBox.GAME_WIDTH/2,GameBox.GAME_HEIGHT-GameBox.PLANE_HEIGHT*2);
/////增加敌机线程开启
new Thread(new AddEnemy()).start();
/////为框架添加按键监听
this.addKeyListener(new KeyMonitor());
/////框架添加游戏面板
this.add(new GameJPanel());
/////设置框架名称
setTitle("打飞机小游戏");
addWindowListener(new WindowAdapter(){
@Override
public void windowOpened(WindowEvent arg0) {
musicBackground=new PlayMusic(GameBox.back_music);
musicBackground.loop();
}
@Override
public void windowClosing(WindowEvent arg0) {
musicBackground.stop();
}
});
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void queryRecord() {
String score=db.excuteRead();
JFrame scoreFrame=new JFrame("--排行榜--");
JTextArea scoreArea=new JTextArea();
JScrollPane scoreScroll=new JScrollPane(scoreArea);
scoreArea.setText("用户名: \t 最高分:\n");
scoreArea.setEditable(false);
scoreArea.append(score);
scoreFrame.add(scoreScroll);
scoreFrame.setSize(200, 100);
scoreFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
scoreFrame.setVisible(true);
}
@Override
public void run() {
while(true){
repaint();/////Repaints this component.
try {
Thread.sleep(48);/////线程睡眠50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private class KeyMonitor extends KeyAdapter {
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()
展开阅读全文