实例介绍
【实例简介】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 } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论