模拟雷神飞机游戏(简易版)
2015-06-10 21:32
681 查看
import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; /** * 飞机类 * @author Administrator * */ public abstract class Airplane implements Drawable ,Runnable{ protected int x,y;//位置坐标 protected Direction dir;//方向属性 protected ImageIcon airplaneImage;//图片名 public Airplane(){ this.x = 230; this.y = 400; } public abstract void move(Direction newDir); public abstract void draw(Graphics g); public abstract void fire(); public void setDir(Direction newdir) { this.dir = newdir; } public Direction getDir(){ return dir; } }
import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.security.Key; import java.util.ArrayList; import java.util.List; import javax.swing.ImageIcon; /** * 轰炸机 * @author Administrator * */ public class Battleplane extends Airplane { List<Shot> list = new ArrayList<Shot>();//子弹 public Battleplane() { this.airplaneImage = new ImageIcon("01.png"); } @Override public void draw(Graphics g) { g.drawImage(this.airplaneImage.getImage(), x, y, null); if (list != null) { for (Shot temp : list) { temp.draw(g); } } } @Override public void move(Direction newDir) { switch (newDir) { case UP:this.y -=10;break; case DOWN:this.y +=10;break; case LEFT:this.x -=10;break; case RIGHT:this.x +=10;break; } } public void fire() { } private class Shot implements Drawable{ private int x,y; public Shot(int begin,int end) { this.x = begin -2; this.y = end - 5; } @Override public void draw(Graphics g) { g.fillRect(x, y, 4, 10); } public void move(){ this.y -=10; } } /** * 自动发射子弹 */ @Override public void run() { list.add(new Shot(x+22, y)); for(Shot temp : list){ temp.move(); } if (list.size() > 100 ) { list.remove(0); } } }
import java.awt.Graphics; import javax.swing.ImageIcon; public class Biuplane extends Airplane{ public Biuplane() { this.airplaneImage = new ImageIcon("03.png"); } @Override public void draw(Graphics g) { g.drawImage(this.airplaneImage.getImage(), x, y, null); } @Override public void move(Direction newDir) { switch (newDir) { case UP:this.y -=8;break; case DOWN:this.y +=8;break; case LEFT:this.x -=8;break; case RIGHT:this.x +=8;break; } } public Direction getDir(){ return dir; } public void setDir(Direction dir) { this.dir = dir; } @Override public void fire() { } @Override public void run() { } }
import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import javax.swing.ImageIcon; public class Bomberplane extends Airplane { public Bomberplane() { this.airplaneImage = new ImageIcon("02.png"); } @Override public void draw(Graphics g) { g.drawImage(this.airplaneImage.getImage(), x, y, null); } @Override public void move(Direction newDir) { this.dir = newDir; switch (newDir) { case UP:this.y -=6;break; case DOWN:this.y +=6;break; case LEFT:this.x -=6;break; case RIGHT:this.x +=6;break; } } public Direction getDir(){ return dir; } public void setDir(Direction dir) { this.dir = dir; } @Override public void fire() { } @Override public void run() { } }
import java.awt.Graphics; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; /** * 画板画布界面 * @author Administrator * */ public class CorintFrame extends JPanel{ public class MouseHandler extends MouseAdapter{//添加鼠标点击事件 @Override public void mousePressed(MouseEvent e) { if (e.getSource()==labels[0]) { air = new Bomberplane(); repaint(); } else if (e.getSource() ==labels[1]) { air = new Battleplane(); repaint(); } else if (e.getSource() == labels[2]) { air = new Biuplane(); repaint(); } } } private Image offImage = new BufferedImage(600, 650, 1);//缓存图片 private ImageIcon bgImage = new ImageIcon("bg.jpg");//背景图片 private Airplane air = new Battleplane(); private JLabel[] labels = new JLabel[3]; private Timer timer = null; private ExecutorService ex = Executors.newFixedThreadPool(2); private String[] labelsImageNames = {"02.png","01.png","03.png"}; public CorintFrame(){ this.setSize(450,670); this.setLayout(null); this.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { } }); for (int i = 0; i < labels.length; i++) { labels[i] = new JLabel("i"); labels[i] = new JLabel(new ImageIcon(labelsImageNames[i]));//添加图标 labels[i].setBounds(500, 50+60*i, 60, 60); labels[i].addMouseListener(new MouseHandler()); this.add(labels[i]); } timer = new Timer(50, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { ex.execute(air); repaint(); } }); timer.start(); } public void setKeyCode(int keyCode){//方向 Direction newDir =null; switch (keyCode) { case 38: newDir = Direction.UP;break; case 40: newDir = Direction.DOWN;break; case 37: newDir = Direction.LEFT;break; case 39: newDir = Direction.RIGHT;break; } if (newDir != null) { air.move(newDir); repaint(); } } @Override public void paint(Graphics g) { Graphics g2 = offImage.getGraphics(); super.paint(g2); g2.drawImage(bgImage.getImage(), 0, 0, null); air.draw(g2); g.drawImage(offImage, 0, 0, null); } }
/**方向 */ public enum Direction { UP,DOWN,LEFT,RIGHT }
import java.awt.Graphics; /** * 绘画接口 * @author Administrator * */ public interface Drawable { public void draw(Graphics g); }
import java.awt.Graphics; import java.awt.RenderingHints.Key; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.Timer; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.xml.crypto.dsig.keyinfo.KeyValue; /** * 弹窗界面 * @author Administrator * */ public class GameDialog extends JDialog { private CorintFrame frame =new CorintFrame(); private ImageIcon bgImage = new ImageIcon("bg.JPG"); public GameDialog(){ this.setTitle("雷神"); this.setSize(600, 650); this.setResizable(false); this.setLocationRelativeTo(null); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); this.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { int keyCode =e.getKeyCode(); if (keyCode == 37||keyCode == 38||keyCode == 39||keyCode == 40||keyCode == 32) { frame.setKeyCode(keyCode); repaint(); } } }); this.add(frame); } // @Override // public void paintComponents(Graphics g) { // super.paintComponents(g); // g.drawImage(bgImage.getImage(), 0, 0, null); // } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); new GameDialog().setVisible(true); } }
import java.awt.Graphics; /** * 图形类 * @author Administrator * */ public abstract class Shape implements Drawable{ protected int x,y; protected String name; public Shape() { } @Override public abstract void draw(Graphics g); }
import java.awt.Graphics; import java.awt.Image; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JPanel; /** * 用户界面工具类 * @author jackfrued * */ public final class UIUtil { private UIUtil() { } @SuppressWarnings("serial") public static void setBackgroundImage(final JFrame frame, final Image bgImage) { frame.setContentPane(new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(bgImage, 0, 0, frame.getWidth(), frame.getHeight(), null); } }); } @SuppressWarnings("serial") public static void setBackgroundImage(final JDialog dialog, final Image bgImage) { dialog.setContentPane(new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(bgImage, 0, 0, dialog.getWidth(), dialog.getHeight(), null); } }); } }
相关文章推荐
- HDU 2196 Computer( 树上节点的最远距离 )
- 黑马程序员——Java基础——File、Properties类
- JQuery上传插件Uploadify使用详解
- Android中的线程通讯类Handler
- 在Fedora 18中将普通用户设置为sudo权限
- POJ 1028
- Training:母函数
- [容斥原理] zoj 3556 How Many Sets I
- Hadoop日志以及日志的格式和命名组成
- 【PHP学习】PHP 简介
- 清除缓存功能的实现代码
- C++常见错误总结(不定时更新版~)
- 实现一个通讯录并将信息保存到文本中
- Adobe Flash Player ActiveX 不能安装的解决方法
- 【MATLAB 从零到进阶】day2 矩阵 数组
- WEBSHELL跳板REDUH使用说明
- uitableview持续练习
- 关于druid数据连接池抛出的 connection holder is null 异常
- Linux(CentOS)SSH无密码验证登陆
- Action的执行