首页 > 代码库 > java之线程飞机大战制作

java之线程飞机大战制作

import java.awt.Graphics;import java.util.ArrayList;import javax.swing.JFrame;import javax.swing.JPanel;public class PlaneMain extends JPanel {    public static void main(String[] args) {        new PlaneMain();    }    private ArrayList<View> list;    public PlaneMain() {        list = new ArrayList<View>();        View background = new View("background.jpg", 0, -60, 700, 460, 2, this);        list.add(background);        initUI();    }    private void initUI() {        JFrame frame = new JFrame("飞机大战");        frame.setSize(700, 400);        frame.setDefaultCloseOperation(3);        frame.setLocationRelativeTo(null);        frame.setResizable(false);        frame.add(this);        frame.setVisible(true);        AddListener al = new AddListener(this, list);        this.addMouseListener(al);        Thread t = new Thread(al);        t.start();// 启动线程    }    /**     * 重写JPanel的重绘方法     */    public void paint(Graphics g) {        super.paint(g);        for (int i = 0; i < list.size(); i++) {            View v = list.get(i);            g.drawImage(v.getBackground(), v.getX(), v.getY(), v.getWidth(),                    v.getHeight(), this);        }    }}
import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.ArrayList;import javax.swing.JPanel;public class AddListener extends MouseAdapter implements Runnable {    private int count = 0;    private JPanel panel;    private ArrayList<View> list;    public AddListener(JPanel panel, ArrayList<View> list) {        this.panel = panel;        this.list = list;    }    public void mouseReleased(MouseEvent e) {        if (count % 2 == 0) {            View plane = new View("plane.jpg", e.getX(), e.getY(), 50, 50, 3,                    panel);            list.add(plane);            count++;        } else {            View bullet = new View("bullet.png", e.getX(), e.getY(), 10, 20, 5,                    panel);            list.add(bullet);            count++;        }    }    public void run() {        while (true) {            for (int i = 0; i < list.size(); i++) {                View v = list.get(i);                v.move();                if(i!=0)                    v.collisions(list);            }            panel.repaint();            try {                Thread.sleep(100);            } catch (InterruptedException e) {                e.printStackTrace();            }        }    }}
import java.awt.Image;import java.util.ArrayList;import javax.swing.ImageIcon;import javax.swing.JPanel;public class View {    private Image background;    private int x = 0, y = -60, moveY, width, height;    private JPanel panel;    private String imageName;    /**     * 构造方法     *      * @param background背景图片的对象     * @param x起始X坐标     * @param y起始Y坐标     */    public View(String imageName, int x, int y, int width, int height,            int moveY, JPanel panel) {        this.imageName = imageName;        this.background = new ImageIcon(this.getClass().getResource(imageName))                .getImage();        this.x = x;        this.y = y;        this.width = width;        this.height = height;        this.moveY = moveY;        this.panel = panel;    }    public int getWidth() {        return width;    }    public void setWidth(int width) {        this.width = width;    }    public int getHeight() {        return height;    }    public void setHeight(int height) {        this.height = height;    }    public Image getBackground() {        return background;    }    public void setBackground(Image background) {        this.background = background;    }    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    }    public void setY(int y) {        this.y = y;    }    public int getMoveY() {        return moveY;    }    public void setMoveY(int moveY) {        this.moveY = moveY;    }    public JPanel getPanel() {        return panel;    }    public void setPanel(JPanel panel) {        this.panel = panel;    }    public void move() {        if (imageName.equals("background.jpg")) {            y += moveY;            if (y == 0)                y = -60;        } else if (imageName.equals("bullet.png")) {            y += moveY;            if (y >= 400)                y = 0;        } else if (imageName.equals("plane.jpg")) {            y -= moveY;            if (y <= 0)                y = 400;        }    }    /**     * 碰撞方法     */    public void collisions(ArrayList<View> list) {        for (int i = 1; i < list.size(); i++) {            View v = list.get(i);            if (this != v) {                double distance = Math.sqrt((this.x - v.x) * (this.x - v.x)                        + Math.pow(this.y - v.y, 2));                if (distance <= this.height + v.height) {                    System.out.println(v.imageName + "和" + this.imageName                            + "发生了碰撞");                }            }        }    }}

 

java之线程飞机大战制作