私はカードゲームを持っており、これは ArrayLists を使用してカードを人々の手に保存することに基づいています。メインクラスでInvokeLaterを使用して呼び出されたスレッドを使用して、ゲームをプレイし、GUIクラスを更新するメインメソッドがあります
現時点では、コンソールでゲームをプレイし、スキャナーに int を入力して、プレーヤーの手からカードを選択しています。私がやりたいことは、プレーヤーが選択をしなければならないときに実行されるスレッドを、おそらく呼び出しと待機で実行することです。次に、プレーヤーが GUI で対応するカードをクリックし、カードの場所の適切な int を返すのを待ちます。この選択は、ゲームによって処理されます。
現時点で GUI をどのように更新しているか。
public static void Play(ArrayList<Card> ...){
UpdateHand(player1, deck, deckused);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GUI.getInstance().UpdateHand();
}
});
リスナーをカードにアタッチし、その名前を手札の対応する場所の int に設定します。
public void PlayerSelection()
{
selection = -1;
Information = new JLabel("Please Select Your Card");
ButtonDisplay.add(Information);
ButtonDisplay.updateUI();
for (int i = 0; i < (HumanHand.size()); i++)
{
Card card = HumanHand.get(i);
BufferedImage cardImage = null;
try {
cardImage = ImageIO.read(new File("card/" + card + ".jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JLabel picLabel = new JLabel(new ImageIcon( cardImage ));
String name = "" + i;
picLabel.setName(name);
picLabel.addMouseListener((MouseListener) this);
HumanHandDisplay.add(picLabel);
}
}
マウスがクリックされたときの選択のためにintを保存します。
public void mouseClicked(MouseEvent e) {
String name = ((JLabel)e.getSource()).getName();
System.out.println("Working " + name);
selection = Integer.parseInt(name);
}
この int をメイン クラスの Play() メソッドに戻し、残りの計算で使用したいと考えています。これを行う方法がわかりません。具体的には、選択が行われるのを待っています。これができると聞いたことがありますが、これを自分の仕事に実装する方法がわかりません。誰かがそれを助けることができれば、それは素晴らしいことです.