基本信息
源码名称:Java飞机大战(射击类小游戏源码,带声音效果)
源码大小:43.30M
文件格式:.zip
开发语言:Java
更新时间:2019-10-21
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 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 } }