基本信息
源码名称:Java飞机大战(射击类小游戏源码,带声音效果)
源码大小:43.30M
文件格式:.zip
开发语言:Java
更新时间:2019-10-21
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
Java小游戏的代码,图片都有啦,shoot game
Java小游戏的代码,图片都有啦,shoot game
package shoot;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
/*
*
* 游戏面板类
*/
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.sun.media.jfxmedia.AudioClip;
import com.sun.org.apache.xerces.internal.impl.xpath.XPath.Step;
import com.sun.org.apache.xml.internal.security.utils.IgnoreAllErrorHandler;
import shoot.Bee;
import shoot.FlyingObject;
import javafx.beans.binding.When;
import javazoom.jl.player.Player;
public class Gamepanel extends JPanel implements Runnable,MouseMotionListener,MouseListener{
public static final int PANEL_WIDTH=GameFrame.FRAME_WIDTH-7;
public static final int PANEL_HEIGHT=GameFrame.FRAME_HEIGHT-30;
public static final int MAX_EPLANE_NUMBER=6;
private Background background;//天空背景对象
private HeroPlane heroPlane;//英雄机对象
private ArrayList<EnemyPlane> ePlanes;//敌机对象
private ArrayList<Enemybullet>enemybullets;//敌机子弹类对象
private ArrayList<HeroBullet> heroBullets;//英雄机子弹对象
private ArrayList<Boom> booms;//爆破对象
private Bee bee;//小蜜蜂对象
private int total_score=0;//游戏总得分
//AudioClip对象提供 play loop(循环) stop
java.applet.AudioClip all_bomb,enemy_bomb,bg,hero_bomb,hero_bullet;
public Gamepanel() {
// Image img=Toolkit.getDefaultToolkit().getImage("fish08_01.png");
//初始化音乐
try {
all_bomb=Applet.newAudioClip(new File("music/all_bomb.wav").toURI().toURL());
enemy_bomb=Applet.newAudioClip(new File("music/enemy_bomb.wav").toURI().toURL());
bg=Applet.newAudioClip(new File("music/bg.wav").toURI().toURL());
hero_bomb=Applet.newAudioClip(new File("music/hero_bomb.wav").toURI().toURL());
hero_bullet=Applet.newAudioClip(new File("music/hero_bullet.wav").toURI().toURL());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//初始化背景
background=new Background();
//初始化敌机
ePlanes=new ArrayList<EnemyPlane>();
for(int i=0;i<MAX_EPLANE_NUMBER;i ) {
ePlanes.add(new EnemyPlane());
}
//初始化英雄机
heroPlane=new HeroPlane();
//初始化敌机 子弹
enemybullets=new ArrayList<Enemybullet>();
//初始化英雄机子弹
heroBullets=new ArrayList<HeroBullet>();
//初始化爆破效果
booms=new ArrayList<Boom>();
//初始化小蜜蜂
bee=new Bee();
//添加鼠标监听器
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
@Override//重写有两种重写,一个是全部重写,一个是追加式的重写,就像super。
protected void paintComponent(Graphics g) {
// TODO Auto-generated method stub
super.paintComponent(g);
//画天空
background.draw(g);
//画敌机
for (int i = 0; i <ePlanes.size(); i ) {
EnemyPlane enemyPlane=ePlanes.get(i);
enemyPlane.draw(g);
}
//画英雄机
heroPlane.draw(g);
//画敌机子弹
for (int i=0;i<enemybullets.size();i ) {
Enemybullet enemybullet=enemybullets.get(i);
enemybullet.draw(g);
}
//画英雄机子弹
for (int i = 0; i < heroBullets.size(); i ) {
HeroBullet heroBullet=heroBullets.get(i);
heroBullet.draw(g);
}
//画爆破效果
for(int i=0;i<booms.size();i ) {
Boom boom=booms.get(i);
boom.draw(g);
}
//画小蜜蜂
bee.draw(g);
//画分和命
g.setColor(Color.blue);
g.setFont(new Font("微软雅黑",Font.BOLD,30));
g.drawString("命数:" heroPlane.getLife(), 10, 30);
g.drawString("得分:" total_score, 10, 80);
if (heroPlane.getLife()==0) {
g.setColor(Color.red);
g.setFont(new Font("微软雅黑",Font.BOLD,50));
g.drawString("Game over!", PANEL_WIDTH/3-40, PANEL_HEIGHT/2);
}
}
@Override
public void run() {
bg.play();
// while (true) {
//
// for(int i=1;i<=10;i ) {
// x =3;
// img=Toolkit.getDefaultToolkit().getImage("fish08_0" i ".png");
// repaint();//重画,自动调用paint
// while(x==350) {
//
// x=-100;
// y=(int)(Math.random()*250);
// }
// try {
// Thread.sleep(50);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }}
while(true) {
//1背景图移动
background.move();
//2对敌机的处理
for (int i = 0; i < ePlanes.size(); i ) {
EnemyPlane enemyPlane=ePlanes.get(i);
//2.1敌机移动
enemyPlane.move(heroPlane);
//2.2敌机发射子弹
Enemybullet enemybullet=enemyPlane.shoot();
if (enemybullet!=null) {
enemybullets.add(enemybullet);
}
}
//3对敌机子弹的处理
for (int i=0;i<enemybullets.size();i ) {
Enemybullet enemybullet=enemybullets.get(i);
//3.1移动
enemybullet.move();
//3.2是否出界
if (enemybullet.outOfBounds()) {
enemybullets.remove(i);
i--;
}
}
//对蜜蜂处理
bee.move();
if (bee.outofBounds()) {
bee.y=-4000;
Random rand = new Random();
bee.x=rand.nextInt(PANEL_WIDTH - this.WIDTH);
}
//4对英雄机子弹的处理
//4.1移动
for (int i = 0; i < heroBullets.size(); i ) {
HeroBullet heroBullet=heroBullets.get(i);
heroBullet.move();
//4.2是否越界
if (heroBullet.outOfBounds()) {
heroBullets.remove(i);
i--;
}
}
//5.碰撞检测
//5.1 检测敌机与英雄机,英雄机子弹的碰撞情况
boolean heroPlane_ishitted=false;//记录英雄机被撞
for (int i = 0; i < ePlanes.size(); i ) {
EnemyPlane enemyPlane=ePlanes.get(i);
boolean ePlane_isHitted=false;//记录敌机被撞
//5.1.1跟英雄机撞
if (enemyPlane.isHitted(heroPlane)) {
ePlane_isHitted=true;
Boom boom1=new Boom(heroPlane.x,heroPlane.y,heroPlane.width,heroPlane.height,heroPlane.xStep,heroPlane.yStep);
booms.add(boom1);
heroPlane.setLife(heroPlane.getLife()-1);//生命数-1
//加上heroplane的高,为了防止出界后的敌机与英雄机相撞
heroPlane.move(0,Gamepanel.PANEL_HEIGHT heroPlane.height);
//移除鼠标监听器,暂时无法移动
this.removeMouseListener(this);
this.removeMouseMotionListener(this);
heroPlane.setRestatrt_delay_count(40);//设置英雄机重启,需要延迟40个50ms(参见thread.sleep)
heroPlane.setCurrent_live(false);
}
//5.1.2跟英雄机子弹是否相撞
for(int j=0;j<heroBullets.size();j ) {
HeroBullet heroBullet=heroBullets.get(j);
if (enemyPlane.isHitted(heroBullet)) {
ePlane_isHitted=true;
heroBullets.remove(j);//移除英雄机子弹
j--;
}
//蜜蜂撞上了
if (bee.isHitted(heroBullet)) {
Random random=new Random();
bee.y=-2000;
bee.x=random.nextInt(PANEL_WIDTH)-80;
heroBullets.remove(j);
i--;
heroPlane.setLife(heroPlane.getLife() 1);
}
}
if (ePlane_isHitted) {//若敌机被撞
total_score =enemyPlane.getScore();
hero_bullet.play();
ePlanes.remove(i);//移除该敌机
i--;
Boom boom=new Boom(enemyPlane.x,enemyPlane.y,enemyPlane.width,enemyPlane.height,enemyPlane.xStep,enemyPlane.yStep);
booms.add(boom);
}
}
//5.2检测英雄机和敌机子弹的碰撞情况
//关于英雄机和敌机碰撞,见5.1
for( int i=0; i<enemybullets.size();i ) {
Enemybullet enemybullet=enemybullets.get(i);
if (heroPlane.isHitted(enemybullet)) {
heroPlane_ishitted=true;
enemybullets.remove(i);//移除该子弹
i--;
}
}
if (heroPlane_ishitted) {//如果英雄机被撞了
hero_bomb.play();
Boom boom=new Boom(heroPlane.x,heroPlane.y, heroPlane.width,heroPlane.height,heroPlane.xStep,heroPlane.yStep);
booms.add(boom);
heroPlane.setLife(heroPlane.getLife()-1);//生命数-1
//加上heroplane的高,为了防止出界后的敌机与英雄机相撞
heroPlane.move(0,Gamepanel.PANEL_HEIGHT heroPlane.height);
//移除鼠标监听器,暂时无法移动
this.removeMouseListener(this);
this.removeMouseMotionListener(this);
heroPlane.setRestatrt_delay_count(40);//设置英雄机重启,需要延迟40个50ms(参见thread.sleep)
heroPlane.setCurrent_live(false);
}
//6对爆破对象进行处理
for (int i = 0; i < booms.size(); i ) {
Boom boom=booms.get(i);
boom.move();
if (boom.booms_end()) {//该爆破结束
booms.remove(i);
}
}
//7对英雄机状态处理
if (heroPlane.getLife()>0) {
if (heroPlane.getRestatrt_delay_count()>0) {
heroPlane.setRestatrt_delay_count(heroPlane.getRestatrt_delay_count()-1);
}
//如果英雄机当前死亡,且重启延时已经为0
if ( heroPlane.isCurrent_live()==false && heroPlane.getRestatrt_delay_count()==0) {
heroPlane.move(Gamepanel.PANEL_WIDTH/2-35, Gamepanel.PANEL_HEIGHT-70);
heroPlane.setCurrent_live(true);
addMouseListener(this);
addMouseMotionListener(this);
//添加一个全屏爆炸
all_bomb.play();
Boom boom=new Boom(0, 0, PANEL_WIDTH, PANEL_HEIGHT, 0, 0);
booms.add(boom);
for(int i =0;i<ePlanes.size();i ) {//清除屏幕得分
EnemyPlane ePlane=ePlanes.get(i);
total_score =ePlane.getScore();
}
ePlanes.clear();//清空所有敌机
enemybullets.clear();//清空所有子弹
}
}
//逐渐补充敌机数到MAX_EPLAN_NUMBER
if (ePlanes.size()<MAX_EPLANE_NUMBER) {
ePlanes.add(new EnemyPlane());
}
if (heroPlane.getLife()==0) {
bg.stop();
}
repaint();
try {
Thread.sleep(30);//30ms
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void mouseDragged(MouseEvent e) {
heroPlane.move(e.getX(),e.getY());
}
@Override
public void mouseMoved(MouseEvent e) {
//System.out.println(e.getX() "," e.getY());
heroPlane.move(e.getX(),e.getY());
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
hero_bullet.play();
HeroBullet heroBullet=heroPlane.shoot();
heroBullets.add(heroBullet);
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}