2010-04-07 38 views
2

我對使用java創建紙牌遊戲的方法有一些疑問。有關如何創建Java紙牌遊戲的提示

在Swing中處理卡片的最佳方式是什麼?我怎樣才能拖動它們,將它們對準正確位置的最佳方法是什麼?

+1

提示 - 如果你打你的卡,你會發現,有人已經爲你實現了這一點:-) – 2010-04-07 07:42:46

+0

我從堆棧中繪製一張卡片,它是... CardLayout,omg有多麼偉大=) – jonas 2010-04-07 08:01:12

+0

在Java中創建紙牌遊戲的最佳方式可能是*不*嘗試使所有內容搖擺。相反:儘可能少地使用Swing。一個JFrame,一個JLabel,它的ImageIcon是一個BufferedImage,你很好走。 Java遊戲程序員通常不會**使用Swing:我瞭解Java 3D遊戲,瞭解Java手機遊戲,瞭解Java 2D遊戲......但我不介紹Java Swing遊戲;) – SyntaxT3rr0r 2010-04-07 08:14:00

回答

1

將他們對齊到 他們的正確位置的最佳方法是什麼?

Overlap Layout可能會幫助你。

+0

服務器正在下降。所以我無法檢查出來... – jonas 2010-04-08 11:00:11

1

什麼是拖動多個圖像的最佳方法?我已經使用Java2D將兩個圖像繪製到JPanel,但我只能拖動它們中的一個。我會附上我的源代碼。我的解決方案的問題是我需要重新繪製整個窗口,即使我只是操縱一個元素。是否可以處理卡片的對象,而不是它們的圖像?所以,當我移動一卡,我會移動對象的視覺呈現,而不是像(像現在這樣)。

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionAdapter; 
import java.awt.image.BufferedImage; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Java2d_MainPanel extends JPanel{ 
    private static BufferedImage img = new logic.GetBufferedImage().getImage(); 
    private JButton knapp = new JButton("Nytt bilde"); 
    private JButton knapp2 = new JButton("Nytt bilde2"); 
    private static BufferedImage img2 = new logic.GetBufferedImage().getImage2(); 
    //coordinates for image 1 
    private int x1 = 0; 
    private int y1 = 0; 
    //coordinates for image 2 
    private int x2 = 50; 
    private int y2 = 50; 

public Java2d_MainPanel(){ 
    add(knapp); 
    add(knapp2); 
    knapp.addActionListener(new ButtonHandler()); 
    knapp2.addActionListener(new ButtonHandler2()); 
    addMouseMotionListener(new MouseMotionHandler()); 
} 

public void newImage(ActionEvent e){ 
    if(e.getSource().equals(knapp)){ 
    img = new logic.GetBufferedImage().getImage(); 
    repaint(); 
    } 
    else if(e.getSource().equals(knapp2)){ 
    img2 = new logic.GetBufferedImage().getImage2(); 
    repaint(); 
    } 
} 
@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g; 
    newPaint(g2d); 
} 
public void newPaint(Graphics2D g2d){ 
    g2d.drawImage(img, x1, y1, null); 
    g2d.drawImage(img2, x2, y2,null); 
} 

public static void main(String[] args) { 

    JFrame frame = new JFrame("Rabbits"); 
    frame.add(new Java2d_MainPanel()); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(800, 640); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 
} 
class MouseMotionHandler extends MouseMotionAdapter { 
    @Override 
public void mouseDragged(MouseEvent e) { 

    x1 = e.getX()-(img.getWidth()/2); 
    y1 = e.getY()-(img.getHeight()/2); 
    repaint(); 
} 
} 
class ButtonHandler implements ActionListener{ 

    public void actionPerformed(ActionEvent e) { 
     newImage(e); 
    } 

    } 
class ButtonHandler2 implements ActionListener{ 

    public void actionPerformed(ActionEvent e) { 
     newImage(e); 
    } 

} 
}