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