我想设计一个打飞机的游戏
需要在一个界面上显示两个可视的坐标格,两个都是10*10 坐标号也要显示出来,界面下边是4种不同位置的飞机,相信很多人都知道是什么样的,我希望通过拖拽的方式将飞机放置到坐标格上,位置要对齐。
小弟第一次设计GUI程序,没有什么思路,希望各位帮我出出主意,都需要用到什么控件去实现这些功能,这个程序的难度又如何呢~

解决方案 »

  1.   

    哥还是多看看代码的好,不要让别人喂饭你吃吧!
    import javax.swing.SwingUtilities;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.BorderFactory;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics; 
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseMotionListener;
    import java.awt.event.MouseMotionAdapter;public class SwingPaintDemo {
        
        public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI(); 
                }
            });
        }    private static void createAndShowGUI() {
            System.out.println("Created GUI on EDT? "+
            SwingUtilities.isEventDispatchThread());
            JFrame f = new JFrame("Swing Paint Demo");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            f.add(new MyPanel());
            f.setSize(250,250);
            f.setVisible(true);
        } }class MyPanel extends JPanel {    RedSquare redSquare = new RedSquare();    public MyPanel() {        setBorder(BorderFactory.createLineBorder(Color.black));        addMouseListener(new MouseAdapter(){
                public void mousePressed(MouseEvent e){
                    moveSquare(e.getX(),e.getY());
                }
            });        addMouseMotionListener(new MouseAdapter(){
                public void mouseDragged(MouseEvent e){
                    moveSquare(e.getX(),e.getY());
                }
            });    }    private void moveSquare(int x, int y){        // Current square state, stored as final variables 
            // to avoid repeat invocations of the same methods.
            final int CURR_X = redSquare.getX();
            final int CURR_Y = redSquare.getY();
            final int CURR_W = redSquare.getWidth();
            final int CURR_H = redSquare.getHeight();
            final int OFFSET = 1;        if ((CURR_X!=x) || (CURR_Y!=y)) {            // The square is moving, repaint background 
                // over the old square location. 
                repaint(CURR_X,CURR_Y,CURR_W+OFFSET,CURR_H+OFFSET);            // Update coordinates.
                redSquare.setX(x);
                redSquare.setY(y);            // Repaint the square at the new location.
                repaint(redSquare.getX(), redSquare.getY(), 
                        redSquare.getWidth()+OFFSET, 
                        redSquare.getHeight()+OFFSET);
            }
        }    public Dimension getPreferredSize() {
            return new Dimension(250,200);
        }
        
        public void paintComponent(Graphics g) {
            super.paintComponent(g);       
            g.drawString("This is my custom Panel!",10,20);        redSquare.paintSquare(g);
        }  
    }class RedSquare{    private int xPos = 50;
        private int yPos = 50;
        private int width = 20;
        private int height = 20;    public void setX(int xPos){ 
            this.xPos = xPos;
        }    public int getX(){
            return xPos;
        }    public void setY(int yPos){
            this.yPos = yPos;
        }    public int getY(){
            return yPos;
        }    public int getWidth(){
            return width;
        }     public int getHeight(){
            return height;
        }    public void paintSquare(Graphics g){
            g.setColor(Color.RED);
            g.fillRect(xPos,yPos,width,height);
            g.setColor(Color.BLACK);
            g.drawRect(xPos,yPos,width,height);  
        }
    }
      

  2.   

    在JPanel上绘制,对JPanel对象添加鼠标事件监听器,获取鼠标的位置,并将飞机对象以及其坐标存到容器,调用repaint。重载paintComponent方法,绘制飞机,需要用到绘制Image(飞机的图标)。
      

  3.   

    在JPanel上绘制,对JPanel对象添加鼠标事件监听器,获取鼠标的位置,并将飞机对象以及其坐标存到容器,调用repaint。重载paintComponent方法,绘制飞机,需要用到绘制Image(飞机的图标)。 
     
    楼上的思路很清晰了,你要坐标格子干嘛?飞机游戏不需要格子吧