Bullet.java
package GameSubstance; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import Tools.GameBox; import View.StartFrame; public class Bullet{ public static final int BULLET_SPEED=15; private int x,y; private boolean live=true; Image bullet=GameBox.bullet; public Bullet(int x,int y){ this.x=x; this.y=y; } public void draw(Graphics g){ if(!live){ return; } g.drawImage(bullet,x,y,GameBox.BULLET_WIDTH,GameBox.BULLET_HEIGHT,null); y=y-BULLET_SPEED; if(y<-30){ live=false; } } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public int getX() { return x; } public int getY() { return y; } }
EnemyBullet.java
package GameSubstance; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import Tools.GameBox; public class EnemyBullet { private int x,y; private int bulletspeed=15; private boolean live=true; Image enemyplanebullet=GameBox.enemybullet; public EnemyBullet(int x,int y){ this.x=x; this.y=y; } public void draw(Graphics g){ if(!live){ return; } y=y+bulletspeed; g.drawImage(enemyplanebullet,x,y,GameBox.ENEMYBULLET_WIDTH,GameBox.ENEMYBULLET_HEIGHT,null); if(y>GameBox.GAME_HEIGHT+GameBox.ENEMYBULLET_HEIGHT){ live=false; } } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public int getX() { return x; } public int getY() { return y; } }
EnemyPlane.java
package GameSubstance; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.util.ArrayList; import java.util.List; import java.util.Random; import Tools.GameBox; import View.StartFrame; public class EnemyPlane { StartFrame sf; private int xpeed=8; private int yspeed=5; private boolean live=true; private boolean fired=true; private int x,y=0; private static int i=0; private String dir; Image enemy; Random rand=new Random(); public EnemyPlane(StartFrame sf){ this.sf=sf; if(i==0){ enemy=GameBox.enemy1; i=1; }else{ enemy=GameBox.enemy2; i=0; } x=rand.nextInt(GameBox.GAME_WIDTH); if(x%2==0){ dir="left"; }else{ dir="right"; } if(x<0){ x=0; } if(x+GameBox.ENEMY_WIDTH>GameBox.GAME_WIDTH){ x=GameBox.GAME_WIDTH-GameBox.ENEMY_WIDTH; } } public void draw(Graphics g){ if(live){ g.drawImage(enemy,x,y,GameBox.ENEMY_WIDTH,GameBox.ENEMY_HEIGHT,null); move(); } } private void move(){ y=y+xpeed; int i=rand.nextInt(5)+2; if(dir=="left"){ x=x-i; }else{ x=x+i; } if(y>GameBox.GAME_HEIGHT+GameBox.ENEMY_HEIGHT){ live=false; } if(x<0){ x=0; dir="right"; } if(x+GameBox.ENEMY_WIDTH>GameBox.GAME_WIDTH){ x=GameBox.GAME_WIDTH-GameBox.ENEMY_WIDTH; dir="left"; } } public int getX() { return x; } public int getY() { return y; } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public int getXpeed() { return xpeed; } public void setXpeed(int xpeed) { this.xpeed = xpeed; } public int getYspeed() { return yspeed; } public void setYspeed(int yspeed) { this.yspeed = yspeed; } public boolean isFired() { return fired; } public void setFired(boolean fired) { this.fired = fired; } }
Explode.java ~ 724B
package GameSubstance; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import Tools.GameBox; public class Explode { private int x,y; private boolean live=true; private int count; Image Explode1=GameBox.Explode1; public Explode(int x,int y){ this.x=x; this.y=y; } public void draw(Graphics g){ if(!live){ return; } g.drawImage(Explode1,x,y,GameBox.EXPLODE1_WIDTH,GameBox.EXPLODE1_HEIGHT,null); if(count==8){ live=false; } } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } }
[文件] MyPlane.java ~ 2KB
package GameSubstance; import Tools.GameBox; import View.StartFrame; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; public class MyPlane { private int x,y; private static Image plane; private Bullet bullet; private boolean dl=false,du=false,dr=false,dd=false; public static final int MYPLANE_XSPEED=10; public static final int MYPLANE_YSPEED=10; private boolean live=true; public MyPlane(int x,int y){ this.x=x; this.y=y; } public void draw(Graphics g){ if(!live){ return; } g.drawImage(GameBox.plane,x,y,GameBox.PLANE_WIDTH,GameBox.PLANE_HEIGHT,null); move(); } public void keyPressed(KeyEvent e) { int key=e.getKeyCode(); switch(key){ case KeyEvent.VK_UP: du=true; break; case KeyEvent.VK_DOWN: dd=true; break; case KeyEvent.VK_LEFT: dl=true; break; case KeyEvent.VK_RIGHT: dr=true; break; } } public void keyReleased(KeyEvent e) { int key=e.getKeyCode(); switch(key){ case KeyEvent.VK_UP: du=false; break; case KeyEvent.VK_DOWN: dd=false; break; case KeyEvent.VK_LEFT: dl=false; break; case KeyEvent.VK_RIGHT: dr=false; } } private void move(){ if(du&&!dl&&!dd&&!dr){ y=y-MYPLANE_YSPEED;//上 }else if(dd&&!du&&!dl&&!dr){ y=y+MYPLANE_YSPEED;//下 }else if(!dd&&!du&&dl&&!dr){ x=x-MYPLANE_XSPEED;//左 }else if(!dd&&!du&&!dl&&dr){ x=x+MYPLANE_XSPEED;//右 }else if(!dd&&du&&dl&&!dr){ y=y-MYPLANE_YSPEED;//左上 x=x-MYPLANE_XSPEED; }else if(du&&!dl&&!dd&&dr){ y=y-MYPLANE_YSPEED;//右上 x=x+MYPLANE_XSPEED; }else if(dd&&!du&&dl&&!dr){ x=x-MYPLANE_XSPEED;//左下 y=y+MYPLANE_YSPEED; }else if(dd&&!du&&!dl&&dr){ x=x+MYPLANE_XSPEED;//右下 y=y+MYPLANE_YSPEED; } if(x+GameBox.PLANE_WIDTH>GameBox.GAME_WIDTH){ x=GameBox.GAME_WIDTH-GameBox.PLANE_WIDTH; } if(x<0){ x=0; } if(y+GameBox.PLANE_HEIGHT*2>GameBox.GAME_HEIGHT){ y=GameBox.GAME_HEIGHT-GameBox.PLANE_HEIGHT*2; } if(y<30){ y=30; } } public int getX() { return x; } public int getY() { return y; } public boolean isLive() { return live; } public void setLive(boolean live) { this.live = live; } }
GameBox.java
package Tools; import java.awt.Font; import java.awt.Image; import java.awt.Toolkit; import java.util.ArrayList; import java.util.List; import GameSubstance.EnemyBullet; import GameSubstance.Explode; public class GameBox { public static int GAME_WIDTH=800; public static int GAME_HEIGHT=600; public static Font f1=new Font("ºÚÌå",3,20); public static Toolkit tk = Toolkit.getDefaultToolkit(); public static Image backgroundimage=tk.createImage("images//±³¾°.jpg"); public static Image plane=tk.createImage("images//ÎÒ·½·É»ú.gif"); public static int PLANE_WIDTH=30; public static int PLANE_HEIGHT=30; public static Image Explode1=tk.createImage("images/±¬Õ¨.gif"); public static int EXPLODE1_WIDTH=30; public static int EXPLODE1_HEIGHT=30; public static Image bullet=tk.createImage("images//×Óµ¯.gif"); public static int BULLET_WIDTH=18; public static int BULLET_HEIGHT=35; public static Image enemy1=tk.createImage("images//µÐ»ú1.gif"); public static Image enemy2=tk.createImage("images//µÐ»ú2.gif"); public static int ENEMY_WIDTH=30; public static int ENEMY_HEIGHT=30; public static Image enemybullet=tk.createImage("images//·ßŵÄ×Óµ¯.gif"); public static int ENEMYBULLET_WIDTH=15; public static int ENEMYBULLET_HEIGHT=30; }
StartFrame.java
package View; import GameSubstance.*; import Tools.*; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.image.ImageObserver; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JPanel; public class StartFrame extends JFrame implements Runnable{ //游戏组件 Image bk=GameBox.backgroundimage; MyPlane myplane; List<EnemyPlane> enemyplanelist=new ArrayList<EnemyPlane>(); private int count=0; private float sourse=0; List<Bullet> bulletlist=new ArrayList<Bullet>(); List<Explode> explodelist=new ArrayList<Explode>(); List<EnemyBullet> enemybulletlist=new ArrayList<EnemyBullet>(); JPanel jp; public static void main(String[] args) { new Thread(new StartFrame()).start(); } public StartFrame(){ this.setSize(GameBox.GAME_WIDTH,GameBox.GAME_HEIGHT); //窗口居中 int width=Toolkit.getDefaultToolkit().getScreenSize().width; int height=Toolkit.getDefaultToolkit().getScreenSize().height; setLocation(width/2-GameBox.GAME_WIDTH/2, height/2-GameBox.GAME_HEIGHT/2); setResizable(false); myplane=new MyPlane(GameBox.GAME_WIDTH/2,GameBox.GAME_HEIGHT-GameBox.PLANE_HEIGHT*2); new Thread(new AddEnemy()).start(); this.addKeyListener(new KeyMonitor()); this.add(new GameJPanel()); setTitle("打飞机小游戏"); this.setDefaultCloseOperation(this.EXIT_ON_CLOSE); setVisible(true); } @Override public void run() { while(true){ repaint(); Random rand=new Random(); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } private class KeyMonitor extends KeyAdapter { public void keyReleased(KeyEvent e) { if(e.getKeyCode()==KeyEvent.VK_F2){ myplane.setLive(true); } myplane.keyReleased(e); } public void keyPressed(KeyEvent e) { myplane.keyPressed(e); } } private class AddEnemy implements Runnable{ @Override public void run() { while(true){ try { Thread.sleep(500); addEnemyPlane(); } catch (InterruptedException e) { e.printStackTrace(); } } } private void addEnemyPlane(){ EnemyPlane enemyplane=new EnemyPlane(StartFrame.this); enemybulletlist.add(new EnemyBullet(enemyplane.getX(),enemyplane.getY())); enemyplanelist.add(enemyplane); } } private class GameJPanel extends JPanel{ public void paint(Graphics g){ super.paint(g); g.drawImage(bk,0,0,GameBox.GAME_WIDTH,GameBox.GAME_HEIGHT,null); myplane.draw(g); if (count==0){ if(myplane.isLive()){ createBullet(); }else{ for(int i=0;i<bulletlist.size();i++){ bulletlist.remove(i); } } } count++; if(count==2){ count=0; } for(int i=0;i<bulletlist.size();i++){ Bullet bullet=bulletlist.get(i); bullet.draw(g); clearBullet(); } for(int i=0;i<enemyplanelist.size();i++){ EnemyPlane enemyplane=enemyplanelist.get(i); enemyplane.draw(g); clearEnemyplane(); Random rand=new Random(); if(rand.nextInt(100)>93&&enemyplane.isLive()){ enemybulletlist.add(new EnemyBullet(enemyplane.getX(),enemyplane.getY())); } //如果敌机面对我方飞机时发射一枚子弹 if(enemyplane.getX()>=myplane.getX()&&enemyplane.getX()<=myplane.getX()+GameBox.PLANE_WIDTH&&enemyplane.isFired()&&enemyplane.isLive()){ enemybulletlist.add(new EnemyBullet(enemyplane.getX(),enemyplane.getY())); enemyplane.setFired(false); } } for(int i=0;i<enemybulletlist.size();i++){ EnemyBullet eb=enemybulletlist.get(i); eb.draw(g); clearEnemyBullet(); } hitPlane();//攻击敌机 impactMyplane();//敌机与我方飞机发生碰撞 if(enemybulletlist.size()>=1)hitMyplane();// for(int i=0;i<explodelist.size();i++){ Explode exp=explodelist.get(i); exp.draw(g); exp.setCount(exp.getCount()+1); clearExplode(); } g.setColor(Color.RED); // g.setFont(GameBox.f1);//设置字体之后加载窗口会卡2秒钟 if(sourse!=0){ g.drawString("您的得分:"+(int)sourse+"0", 50, 50); }else{ g.drawString("您的得分:0", 50, 50); } } private void clearEnemyBullet() { for(int i=0;i<enemybulletlist.size();i++){ if(!(enemybulletlist.get(i).isLive())){ enemybulletlist.remove(i); } } } private void createBullet(){ Bullet bullet=new Bullet((myplane.getX()+5),(myplane.getY()-30)); bulletlist.add(bullet); } private void clearBullet(){ for(int i=0;i<bulletlist.size();i++){ if(!(bulletlist.get(i).isLive())){ bulletlist.remove(i); } } } private void clearEnemyplane() { for(int i=0;i<enemyplanelist.size();i++){ if(!(enemyplanelist.get(i).isLive())){ enemyplanelist.remove(i); } } } private void clearExplode() { for(int i=0;i<explodelist.size();i++){ if(!(explodelist.get(i).isLive())){ explodelist.remove(i); } } } private void hitPlane(){ int bx,ex,by,ey; for(int i=0;i<bulletlist.size();i++){ Bullet bullet=bulletlist.get(i); bx=bullet.getX(); by=bullet.getY(); for(int j=0;j<enemyplanelist.size();j++){ EnemyPlane enemyplane=enemyplanelist.get(j); ex=enemyplane.getX(); ey=enemyplane.getY(); if(bx>=ex&&bx<=ex+GameBox.ENEMY_WIDTH&&by>=ey&&by<=ey+GameBox.ENEMY_HEIGHT&&enemyplane.isLive()&&bullet.isLive()){ bullet.setLive(false); enemyplane.setLive(false); explodelist.add(new Explode(bx,by)); sourse=sourse+1.168320194f;//防止CE恶意修改分数(我的QQ号码) } } } } private void impactMyplane(){ int mx,my,ex,ey; mx=myplane.getX(); my=myplane.getY(); for(int i=0;i<enemyplanelist.size();i++){ EnemyPlane enemyplane=enemyplanelist.get(i); ex=enemyplane.getX(); ey=enemyplane.getY(); if(mx>=ex&&mx<=ex+GameBox.ENEMY_WIDTH&&my>=ey&&my<=ey+GameBox.ENEMY_HEIGHT&&myplane.isLive()&&enemyplane.isLive()){ myplane.setLive(false); enemyplane.setLive(false); explodelist.add(new Explode(mx,my)); explodelist.add(new Explode(ex,ey)); } } } private void hitMyplane() { int mx,my,ex,ey; mx=myplane.getX(); my=myplane.getY(); for(int i=0;i<enemyplanelist.size();i++){ EnemyBullet eb=enemybulletlist.get(i); ex=eb.getX(); ey=eb.getY(); if(ex+GameBox.ENEMYBULLET_WIDTH>=mx&&ex+GameBox.ENEMYBULLET_WIDTH<=mx+GameBox.PLANE_WIDTH&&ey+GameBox.ENEMYBULLET_HEIGHT>=my&&ey+GameBox.ENEMYBULLET_HEIGHT<=my+GameBox.PLANE_HEIGHT&&myplane.isLive()&&eb.isLive()){ myplane.setLive(false); eb.setLive(false); explodelist.add(new Explode(mx,my)); } } } } }
爆炸.gif
背景.jpg
[图片] 敌机1.gif
[图片] 敌机2.gif
[图片] 愤怒的子弹.gif
[图片] 子弹.gif
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/10126.html