基于JAVA实现的雷电飞机射击游戏

nomatter

发布日期: 2018-11-05 15:07:56 浏览量: 4366
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

一、简介

1.1 开发环境

本程序使用Myeclipse开发,编码为UTF-8。

1.2 功能简述

本程序实现的主要功能有玩家飞机的控制、玩家飞机子弹发射、敌机移动、敌机子弹发射、boss飞机的折线运动、boss飞机的子弹发射、玩家飞机和boss飞机的血量显示、游戏的暂停开始及重新开始、控制游戏音效的播放、玩家战机的选择(五种战机)、飞机与飞机、飞机与子弹之间的碰撞。

二、程序概要设计

2.1 程序流程

  1. 确定程序的功能 ---> 界面设计 ---> 寻找素材 ---> 开始编写程序 ---> 优化修改程序

2.2 程序简要分析

本程序包括十一个类和一个声音文件和图片文件,其中十一个类中包括:

主类(PanelFrame),里面的main方法是程序的入口

  • MainPanel类,功能是实现窗体主面板的界面布局,包括一个键盘监听方法

  • GamePanel类,是游戏的主要面板,有一个内部类(MapPanel)继承画布(Canvas)用于实现游戏地图的面板,内部类中包括paint方法绘制游戏飞机、子弹等,run方法用于启动线程,draw方法控制画布上的飞机、子弹等的变化,adapter用于键盘监听

  • 玩家飞机类(MyPlane)、敌机类(Enemy)、子弹类(Bullet)、boss飞机类(BossPlane)都是绘制飞机、子弹等的类,其中都有绘制的方法和移动的方法以及获取坐标的方法

  • 碰撞类(Collide),实现飞机与敌机、飞机与子弹等碰撞的判断和碰撞后的操作

  • Break类,包括实现玩家飞机、敌机、boss飞机爆炸的方法

  • Dialog类,有三个成员方法,分别描述挑战失败对话框、挑战成功对话框和设置对话框

  • PlaySound类,包括打开声音文件的方法(open)、建立音频行的方法(play)、暂停声音的方法(stop)、开始播放的方法(start)、回放背景音乐的方法(loop)

三、程序详细设计

3.1 程序具体分析

3.1.1 画布的绘制的实现

本程序通过另一个线程中的循环对游戏地图画布进行重绘,循环被一个布尔型的变量isRunning控制,可用于暂停、开始、重新开始游戏功能的实现;

3.1.2 玩家飞机斜飞的实现

用四个布尔型的变量记录四个方向键的状态,按下时置为true,松开是置为false,而当为true时玩家飞机进行移动;

3.1.3 敌机的实现

敌机以一个大小为八的一维数组存储,循环出现在地图视野中,每一架敌机的初始y坐标每一次循环都是一样的,x坐标每一次都是随机的,当敌机被打到或者超过地图下方时会重置坐标;

3.1.4 玩家飞机子弹的实现

玩家飞机子弹对象用一个ArrayList存储,在固定时间间隔后绘制一个子弹对象并加入数组,当子弹超过地图时从数组中移除子弹对象;

3.1.5 敌机子弹的实现

所有敌机子弹对象都是用一个ArrayList存储,但每一个子弹对象依赖于每一架敌机,在循环绘制敌机时绘制每一架敌机的子弹;

3.1.6 Boss的实现

在一定的时间过后,敌机由于不满足if语句的时间已经超过将不再出现,而会出现boss,boss的折线运动是通过一个switch语句块实现的,由一个int类型的position变量作为运动方向的判断;

3.1.7 Boss散射子弹的实现

用大小为五的子弹数组存储boss发射的五颗发散的子弹,再用ArrayList数组存储子弹数组对象,子弹发射方向用一个switch语句块根据子弹数组的角标0~4来确定;

3.1.8 血条的实现

玩家飞机和boss的生命用一个静态的int型变量记录,血条通过21张代表不同血量的图片根据记录生命的变量的大小绘制不同的图片,boss血条的绘制的坐标根据boss飞机的坐标确定,以保证血条在boss的上方;

3.1.9 暂停的实现

根据isRunning为true或者false,可判断另一个线程中的循环是否进行,如果不进行,那么游戏地图将不会重绘,达到暂停效果;

3.1.10 重新开始按钮的功能

当按下重新开始按钮,程序将会重新创建一个绘制地图的内部类(MapPanel)对象,同时置isRunning为false,并且还原一些参数,如:分数、血量等;

3.1.11 声音的实现

游戏声音的控制封装为一个PlaySound类,有根据传入的路径打开音频文件、建立音频行、通过调用音频行对象的start方法开始播放、通过调用音频行对象的stop方法暂停播放、通过调用音频行对象的loop方法重复播放等几个方法,当需要控制声音时调用相应方法。

四、程序测试

程序首界面,通过上下方向键控制小飞机上下移动,用回车键确定选择。

设置对话框,可以选择战机和各种音效是否播放。

游戏界面,有开始(暂停)、重新开始、返回主菜单三个按钮,和分数记录以及一个游戏地图。

boss飞机出现界面,以及boss子弹散射。

游戏挑战失败弹出对话框的界面。

游戏挑战成功弹出对话框的界面。

五、小结

5.1 程序优点

  • 内存有进行比较大限度的优化

  • 添加了战机选择和声音系统

  • 可以进行积分及boss的实现

  • 可以控制暂停与开始及重新开始

5.2 程序不足

  • 在boss的移动过程中有卡顿现象

  • 没有对界面设计进一步优化

5.3 问题及解决

开发本程序的过程中,遇到有血条的实现、飞机子弹发射、不同声音效果的控制等问题,我通过网上百度的结果再加上自己查看API以及逻辑的思考解决了这一系列的问题。

其中印象最深的是游戏地图出现卡顿和白色现象,最后通过查找资料发现需要使用双缓冲技术,经过几次试验和调整最终解决了这个问题。

5.4 收获

经过一个暑假的java大作业练习,让我学习到了更多课本上没有的编程知识。也让我在独立完成的过程中学会思考编程的逻辑问题,通过游戏的初步开发也让我对编程更有兴趣了。

上传的附件 cloud_download 基于JAVA实现的雷电飞机射击游戏.7z ( 35.98mb, 288次下载 )
error_outline 下载需要3点积分

发送私信

最好的人生状态,安于得失,淡于成败,依旧向前

7
文章数
16
评论数
最近文章
eject