2010-04-07 8 views
2

Java에서 솔리테어 게임을 만드는 방법에 관해서 몇 가지 질문이 있습니다.Java Solitaire 게임을 만드는 방법에 관한 팁

스윙에서 카드를 다루는 가장 좋은 방법은 무엇입니까? 어떻게 그들을 드래그 할 수 있으며 올바른 위치에 스냅하는 가장 좋은 방법은 무엇입니까?

+1

팁 - 카드를 제대로 사용하면 다른 사람이 이미 당신을 위해 이것을 구현했습니다 :-) –

+0

스택에서 카드를 가져옵니다. CardLayout, omg how great =) – jonas

+0

Java로 솔리테어 게임을 만드는 가장 좋은 방법은 모든 것을 만들려고 시도하는 것이 아닙니다. 그네. 반대로 가능한 한 적은 스윙을 사용하십시오. 하나의 JFrame, ImageIcon이 BufferedImage 인 JLabel입니다. 자바 게임 프로그래머는 일반적으로 ** 사용하지 않습니다 ** 스윙 : Java 3D 게임에 대해 알고 있습니다. Java 모바일 게임에 대해 알고 있습니다. Java 2D 게임에 대해 알고 있습니다 ... 그러나 Java Swing 게임에 대해서는 알지 못합니다.) – SyntaxT3rr0r

답변

1

올바른 위치에 스냅하는 가장 좋은 방법은 무엇입니까?

Overlap Layout이 도움이 될 수 있습니다.

+0

서버 내려왔다. 그래서 나는 그것을 조사 할 수 없다 ... – jonas

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); 
    } 

} 
} 
관련 문제