package plane;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*
* @author 鏂归摱鍩?
* 鏈被鎻忚堪娓告垙寮?濮嬬晫闈?
*
*/
public class GamePanel extends JPanel {
private Image bg1, bg2;//鍥剧墖
private final int SCREEN_WIDTH = 800;//灞忓箷瀹?
private final int SCREEN_HEIGHT = 600;//灞忓箷楂?
static final int MAP_WIDTH = 600;//鍦板浘闈㈡澘瀹?
static final int MAP_HEIGHT = 600;//鍦板浘闈㈡澘楂?
static final int BULLET_WIDTH = 15;//瀛愬脊瀹?
static final int BULLET_HEIGHT = 30;//瀛愬脊楂?
static final int PLANE_SIZE = 100;//鐜╁椋炴満杈归暱
static final int ENEMY_SIZE = 80;//鏁屾満杈归暱
static final int BOSS_WIDTH = 250;//boss瀹?
static final int BOSS_HEIGHT = 180;//boss楂?
private int bg1_y;//bg1鍥剧墖鐨剏鍧愭爣
private int bg2_y;//bg2鍥剧墖鐨剏鍧愭爣
private boolean isRunning = false;//绾跨▼鏄惁寰幆鐨勬爣璁?
private Canvas jp;//鍦板浘闈㈡澘
private JButton jb1, jb2, jb3;//鎸夐挳
private JLabel jl;//鏍囩
private MainPanel m;//涓婚潰鏉垮璞?
static long sum;//鍒嗘暟
static int live;//鐜╁椋炴満鐢熷懡
static int live1;//boss椋炴満鐢熷懡
static int time;//璁℃椂
static long before_time2 = System.currentTimeMillis();//杩囧幓缁樺埗boss瀛愬脊鏃堕棿
//鍙岀紦鍐?
private Image iBuffer;
private Graphics gBuffer;
public GamePanel(MainPanel m) {
bg1_y = 0;//bg1鍥剧墖鐨剏鍧愭爣
bg2_y = -SCREEN_HEIGHT;//bg2鍥剧墖鐨剏鍧愭爣
setLayout(null);//娓呴櫎甯冨眬绠$悊鍣?
setBackground(new Color(83, 163, 238));
showPanel();//璁剧疆鐣岄潰
this.m = m;//涓婚潰鏉垮璞″皢鍦板潃浼犺繃鏉?
live = 100;//鐢熷懡鍒濆鍖?
live1 = 2000;//boss鐢熷懡鍒濆鍖?
}
/**
* 姝ゆ柟娉曚綔鐢ㄦ槸鏄剧ず鐣岄潰
*/
private void showPanel() {
sum = 0;//璁剧疆鍒嗘暟鏄剧ず涓?0
//璁剧疆鍦板浘闈㈡澘
jp = new MapPanel();
jp.setBounds(200, 0, 600, 600);
add(jp);
//璁剧疆鎸夐挳
jb1 = new JButton("寮?濮?(P)");
jb1.setBounds(50, 60, 100, 50);
add(jb1);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
stop_start();//鏆傚仠鍜屽紑濮嬬洃鍚?
}
});
jb2 = new JButton("閲嶆柊寮?濮?");
jb2.setBounds(50, 140, 100, 50);
add(jb2);
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//鍒锋柊娓告垙鐣岄潰
remove(jp);
jp = new MapPanel();
jp.setBounds(200, 0, 600, 600);
add(jp);
//璁╂父鎴忔殏鍋?
isRunning = false;
jb1.setText("寮?濮?(P)");//鏀瑰彉鎸夐挳鏂囧瓧
Bullet.before_time = System.currentTimeMillis();
jb1.setEnabled(true);//璁剧疆鏆傚仠\寮?濮嬫寜閽负鍙寜
sum = 0;//璁剧疆鍒嗘暟鏄剧ず涓?0
live = 100;//璁剧疆鐢熷懡涓?100
live1 = 2000;//璁剧疆boss鐢熷懡涓?2000
time = 0;//璧嬩簣鏃堕棿
}
});
jb3 = new JButton("杩斿洖涓昏彍鍗?");
jb3.setBounds(50, 220, 100, 50);
add(jb3);
jb3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//杩斿洖涓昏彍鍗曠殑璁剧疆
Point p = PanelFrame.e1.getLocation();
PanelFrame.e1.dispose();
isRunning = false;
PanelFrame.main(null);
PanelFrame.e1.setLocation(p);
}
});
//璁剧疆鏍囩锛岀敤浜庡瓨鏀惧垎鏁?
jl = new JLabel("0", JLabel.CENTER);
jl.setBounds(40, 300, 120, 50);
jl.setFont(new Font("acefont-family", Font.BOLD, 30));
jl.setForeground(Color.red);
add(jl);
}
/**
*
* @author 鏂归摱鍩?
* 鏈唴閮ㄧ被鎻忚堪鍦板浘闈㈡澘
*
*/
private class MapPanel extends Canvas implements Runnable {
private MyPlane mp ;//鐜╁椋炴満瀵硅薄
private BossPlane bp;//boss椋炴満瀵硅薄
private Bullet b;//瀛愬脊瀵硅薄
private Thread th;//绾跨▼瀵硅薄
private ArrayList<Bullet> array;//鐜╁椋炴満瀛愬脊鏁扮粍
private ArrayList<Bullet> array1;//鏁屾満瀛愬脊鏁扮粍
private Enemy[] e_array;//鏁屾満鏁扮粍
private Collide c;//纰版挒鍒ゆ柇鐨勫璞?
private Image x;//琛?鏉″浘鐗囧璞?
private ArrayList<Bullet[]> arr;//boss瀛愬瓙寮规暟缁?
MapPanel() {
requestFocusInWindow();//璁剧疆璇锋眰鐒︾偣
bg1 = bg2 = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/mapback.png"));
//鍒涘缓鐜╁椋炴満瀵硅薄
mp = new MyPlane();
mp.adapter(this);
//鍒涘缓boss椋炴満瀵硅薄
bp = new BossPlane();
array = new ArrayList<Bullet>();//鍒濆鍖栫帺瀹堕鏈哄瓙寮规暟缁?
array1 = new ArrayList<Bullet>();//鍒濆鍖栨晫鏈哄瓙寮规暟缁?
arr = new ArrayList<Bullet[]>();//鍒濆鍖朾oss瀛愬脊鏁扮粍
e_array = new Enemy[8];//鍒涘缓鏁屾満鏁扮粍
c = new Collide();
adapter();//鏆傚仠蹇嵎閿?淧鈥濈洃鍚?
//鍒濆鍖栨晫鏈烘暟缁?
for(int i = 0; i < e_array.length; i++)
e_array[i] = new Enemy((-i-1)*ENEMY_SIZE-BULLET_HEIGHT);
th = new Thread(this);//鍒涘缓绾跨▼
th.start();//寮?鍚嚎绋?
}
/**
* 姝ゆ柟娉曟槸鍥炶皟鍑芥暟paint锛岀敤浜庣粯鍒剁晫闈?
*/
public void paint(Graphics g) {
jl.setText("" + sum);//鏄剧ず鍒嗘暟
// if(sum == 30000) {
// jb1.setEnabled(false);//璁剧疆鏆傚仠\寮?濮嬫寜閽负涓嶅彲鎸?
// isRunning = false;//璁剧疆绾跨▼涓嶅惊鐜?
// new Dialog(m, 2);//鎸戞垬鎴愬姛瀵硅瘽妗?
// }
if(iBuffer == null)
{
iBuffer = createImage(MAP_WIDTH, MAP_HEIGHT);
gBuffer = iBuffer.getGraphics();
}
gBuffer.fillRect(0, 0, MAP_WIDTH, MAP_HEIGHT);//娓呴櫎鐢荤瑪
//缁樺埗鑳屾櫙鍦板浘杩涚紦鍐茬殑鐢荤瑪
gBuffer.drawImage(bg1, 0, bg1_y, 600, 600, this);
gBuffer.drawImage(bg2, 0, bg2_y, 600, 600, this);
mp.drawMyPlane(gBuffer, this);//缁樺埗鐜╁椋炴満
//boss瀛愬脊寰幆缁樺埗
for(int i = 0; i < arr.size()&&arr.size()>0; i++)
for(int j = 0; j < 5; j++)
if(arr.get(i)[j]!=null)
arr.get(i)[j].drawBullet(gBuffer, this, 2);
if(time >= 2500) {//50绉掑悗鍑虹幇boss
if(bp.getX_Y().getY() >= 80 && System.currentTimeMillis()-before_time2 >= 2500 && bp.stayed) {//boss鍙戝皠瀛愬脊鏃堕棿闄愬埗
//缁樺埗boss瀛愬脊
Bullet[] bt = new Bullet[5];
for(int i = 0; i < 5; i++) {
bt[i] = new Bullet((int)(bp.getX_Y().getX())+BOSS_WIDTH/2-5, (int)(bp.getX_Y().getY())+BOSS_HEIGHT-30);
bt[i].drawBullet_3(gBuffer, this);
}
arr.add(bt);
before_time2 = System.currentTimeMillis();
}
if(!bp.stayed && bp.id == 30) {
jb1.setEnabled(false);//璁剧疆鏆傚仠\寮?濮嬫寜閽负涓嶅彲鎸?
isRunning = false;//璁剧疆绾跨▼涓嶅惊鐜?
new Dialog(m, 2);//鎸戞垬鎴愬姛瀵硅瘽妗?
}
bp.drawBoss(gBuffer, this);//缁樺埗boss椋炴満
}
if(mp.stayed) {
//鍒涘缓鐜╁椋炴満瀛愬脊瀵硅薄
b = new Bullet((int)(mp.getX_Y().getX())+PLANE_SIZE/2-BULLET_WIDTH/2, (int)(mp.getX_Y().getY())-BULLET_HEIGHT);
b.drawBullet_1(array, gBuffer, this);//瀛愬脊缁樺埗
for(int i = 0; i<array.size() && array.size()>1; i++) {
array.get(i).drawBullet(gBuffer, this, 1);//瀛愬脊缁樺埗
}
} else if(mp.id == 30){
jb1.setEnabled(false);//璁剧疆鏆傚仠\寮?濮嬫寜閽负涓嶅彲鎸?
isRunning = false;//璁剧疆绾跨▼涓嶅惊鐜?
new Dialog(m, 1);//鎵撳紑瀵硅瘽妗?
}
//缁樺埗鏁屾満銆佹晫鏈哄瓙寮?
for(int i = 0; i < e_array.length; i++)
{
e_array[i].drawEnemy(gBuffer, this, i%5);
if(e_array[i].stayed && e_array[i].getX_Y().getY()>0) {
int t = (int)(e_array[i].getX_Y().getY())+ENEMY_SIZE;
if(t < MAP_HEIGHT) {
//鍒涘缓鏁屾満瀛愬脊瀵硅薄
b = new Bullet((int)(e_array[i].getX_Y().getX())+ENEMY_SIZE/2-BULLET_
没有合适的资源?快使用搜索试试~ 我知道了~
【Java课程设计大作业】雷电飞机射击游戏(附源代码+设计说明书)
共134个文件
png:86个
class:27个
java:11个
0 下载量 85 浏览量
2023-11-20
20:52:56
上传
评论
收藏 4.96MB ZIP 举报
温馨提示
一、概述 1、开发环境 本程序使用Myeclipse开发,编码为UTF-8。 2、功能简述 本程序实现的主要功能有玩家飞机的控制、玩家飞机子弹发射、敌机移动、敌机子弹发射、boss飞机的折线运动、boss飞机的子弹发射、玩家飞机和boss飞机的血量显示、游戏的暂停开始及重新开始、控制游戏音效的播放、玩家战机的选择(五种战机)、飞机与飞机、飞机与子弹之间的碰撞。 二、程序概要设计 1、程序流程 确定程序的功能 ---> 界面设计 ---> 寻找素材 ---> 开始编写程序 ---> 优化修改程序。 2、程序简要分析 本程序包括十一个类和一个声音文件和图片文件,其中十一个类中包括:主类(PanelFrame),里面的main方法是程序的入口;MainPanel类,功能是实现窗体主面板的界面布局,包括一个键盘监听方法;GamePanel类,是游戏的主要面板,有一个内部类(MapPanel)继承画布(Canvas)用于实现游戏地图的面板,内部类中包括paint方法绘制游戏飞机、子弹等,run方法用于启动线程,draw方法控制画布上的飞机、子弹等的变化,adapter用于
资源推荐
资源详情
资源评论
收起资源包目录
【Java课程设计大作业】雷电飞机射击游戏(附源代码+设计说明书) (134个子文件)
GamePanel$MapPanel.class 8KB
Dialog.class 6KB
GamePanel.class 5KB
Bullet.class 4KB
MainPanel.class 3KB
MyPlane.class 3KB
Collide.class 3KB
PlaySound.class 2KB
Enemy.class 2KB
MainPanel$1.class 2KB
BossPlane.class 2KB
Break.class 2KB
GamePanel$2.class 2KB
MyPlane$1.class 1KB
GamePanel$3.class 997B
Dialog$6.class 926B
GamePanel$MapPanel$1.class 903B
PanelFrame.class 878B
Dialog$9.class 794B
Dialog$8.class 794B
Dialog$7.class 794B
Dialog$1.class 696B
Dialog$5.class 696B
Dialog$4.class 696B
Dialog$3.class 696B
Dialog$2.class 696B
GamePanel$1.class 668B
.classpath 295B
Java面向对象程序设计大作业说明书-雷电飞机射击游戏.docx 1.66MB
GamePanel.java 11KB
Dialog.java 7KB
Collide.java 4KB
Bullet.java 4KB
MainPanel.java 4KB
MyPlane.java 3KB
BossPlane.java 2KB
PlaySound.java 2KB
Enemy.java 2KB
Break.java 1KB
PanelFrame.java 866B
OPSound.mid 23KB
mapback.png 574KB
mapback.png 574KB
mainback.png 315KB
mainback.png 315KB
boss.png 250KB
boss.png 250KB
bullet02.png 35KB
bullet02.png 35KB
bullet01.png 35KB
bullet01.png 35KB
bullet05.png 33KB
bullet05.png 33KB
bullet03.png 33KB
bullet03.png 33KB
bullet04.png 33KB
bullet04.png 33KB
point.png 32KB
point.png 32KB
Plane02.png 26KB
Plane02.png 26KB
Plane03.png 25KB
Plane03.png 25KB
bullet_01.png 23KB
bullet_01.png 23KB
Plane01.png 22KB
Plane01.png 22KB
xue_19.png 21KB
xue_19.png 21KB
xue_20.png 21KB
xue_20.png 21KB
xue_21.png 21KB
xue_21.png 21KB
bullet_02.png 21KB
bullet_02.png 21KB
xue_18.png 21KB
xue_18.png 21KB
xue_17.png 21KB
xue_17.png 21KB
xue_16.png 21KB
xue_16.png 21KB
xue_15.png 21KB
xue_15.png 21KB
xue_14.png 21KB
xue_14.png 21KB
xue_13.png 21KB
xue_13.png 21KB
xue_12.png 20KB
xue_12.png 20KB
xue_11.png 20KB
xue_11.png 20KB
xue_10.png 20KB
xue_10.png 20KB
xue_9.png 20KB
xue_9.png 20KB
xue_8.png 20KB
xue_8.png 20KB
xue_7.png 20KB
xue_7.png 20KB
Plane04.png 20KB
共 134 条
- 1
- 2
资源评论
西江茶客
- 粉丝: 130
- 资源: 1184
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功