您的位置:首页 > 其它

模拟雷神飞机游戏(简易版)

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);
}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: