Hallo Leute,
ich arbeite an einem Kartenspiel. Nun suche ich nach einer Möglichkeit folgendes umzusetzen.
Ich habe eine Angriffskarte welche es erlaubt einen bestimmten Gegenspieler anzugreifen. Also habe ich ein Auswahlfenster in welchem die anderen Spieler als Buttons(Spieler 2, Spieler 3 usw.) angezeigt werden. Ich möchte NACH der Auswahl welcher Spieler angegriffen wird überprüfen ob der angegriffene Spieler sich verteidigen kann.
An den Buttons hängen Actionlistener dran, welche ja autmatisch eine Daemon Thread erzeugen.
Gibt es eine Möglichkeit, daß die main wie mit join() auf den Buttonclick (und damit das der Thread stirbt) wartet?
Hier noch ein bisschen Code
Ist ein eigener Thread sinnvoll oder sollte man darauf verzichten und auf den Daemon Thread warten??
Hängen schon 2 Wochen dran
Gruß gambreiti
ich arbeite an einem Kartenspiel. Nun suche ich nach einer Möglichkeit folgendes umzusetzen.
Ich habe eine Angriffskarte welche es erlaubt einen bestimmten Gegenspieler anzugreifen. Also habe ich ein Auswahlfenster in welchem die anderen Spieler als Buttons(Spieler 2, Spieler 3 usw.) angezeigt werden. Ich möchte NACH der Auswahl welcher Spieler angegriffen wird überprüfen ob der angegriffene Spieler sich verteidigen kann.
An den Buttons hängen Actionlistener dran, welche ja autmatisch eine Daemon Thread erzeugen.
Gibt es eine Möglichkeit, daß die main wie mit join() auf den Buttonclick (und damit das der Thread stirbt) wartet?
Hier noch ein bisschen Code
Java:
public static void getAktion(int i) {
//Angriffsaktion
zug--;
angreifenThread.start();
try {
angreifenThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (choose == true)
if(erfolg == true)
Aktion.karteZiehen(1);
zug++;
aktionPanelUpdate(geld, zug, muenzen, kauf);
Handkarten.Refresh(listnz,handk,listGespielteKarte,listabl);
}
@Override
public void run() {
Aktion.angreifenSolo(1, KNUEPPEL);
}
}
Java:
public static void angreifenSolo(int angriffswert, String karte) {
trefferPunktAngriff = angriffswert;
//MouseListenerobjekt
AttSPML attSpML = new AttSPML();
//oeffne Auswahlfenster, welcher Spieler angegriffen werden soll
angriffsMenu = new JFrame("Spieler: " + spieleranzahl);
angriffsMenu.setBounds(250,338,500,700);
angriffsMenu.setUndecorated(true);
angriffsMenu.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE );
angriffsMenu.setLayout(null);
angriffsMenu.setBackground(new Color(0,0,0,1));
infoUpdate("Wähle einen Mitspieler aus");
// Panel fuer Hintergrundfarbe
JPanel back = new JPanel();
back.setSize(150,180);
back.setBackground(new Color(0,0,0,0));
// Bilder fuer Button erzeugen
JLabel bild6 = new JLabel(pos2 + " Spieler");
bild6.setFont(new Font("Papyrus", Font.BOLD,18));
bild6.setForeground(Color.WHITE);
JLabel bild7 = new JLabel(pos3 + " Spieler");
bild7.setFont(new Font("Papyrus", Font.BOLD,18));
bild7.setForeground(Color.WHITE);
JLabel bild8 = new JLabel(pos4 + " Spieler");
bild8.setFont(new Font("Papyrus", Font.BOLD,18));
bild8.setForeground(Color.WHITE);
// Buttons erzeugen
for(int count = 1; count < spieleranzahl; count++){
attSp[count] = new JButton();
attSp[count].setIcon(bilder[48]);
attSp[count].addActionListener(attSpML);
attSp[count].setBounds(200,(5 + count*60),128,50);
//Elemente einbinden
angriffsMenu.add(attSp[count]);
if(count == 1)
attSp[count].add(bild6);
if (count == 2)
attSp[count].add(bild7);
if (count == 3)
attSp[count].add(bild8);
}
angriffsMenu.add(back);
angriffsMenu.setVisible(true);
}
public static void trefferpunkteAbwehren(int x, int y,int kraftVerteidiger,int Verteidiger) {
int angriffswert = y;
int absorbtionswert = x;
if (angriffswert - absorbtionswert <= 0)
erfolg = false;
if (erfolg == true){
kraftVerteidiger = kraftVerteidiger - y;
schreibeKraft(Verteidiger, kraftVerteidiger);
}
erfolg = true;
}
private static class AttSPML implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
int verteidiger = 0;
// loesche Pruefen
pruefen.clear();
// Hole Handkarten des ausgewählen Spielers und Kraftanzeige
if((e.getSource() == attSp[1])){
if (pos2 == 1)
pruefen.addAll(Spieler1.holeHand());
if (pos2 == 2)
pruefen.addAll(Spieler2.holeHand());
if (pos2 == 3)
pruefen.addAll(Spieler3.holeHand());
if (pos2 == 4)
pruefen.addAll(Spieler4.holeHand());
verteidiger = pos2;
choose = true;
}
if(spieleranzahl > 2){
if((e.getSource() == attSp[2])){
if (pos3 == 1)
pruefen.addAll(Spieler1.holeHand());
if (pos3 == 2)
pruefen.addAll(Spieler2.holeHand());
if (pos3 == 3)
pruefen.addAll(Spieler3.holeHand());
if (pos3 == 4)
pruefen.addAll(Spieler4.holeHand());
verteidiger = pos3;
choose = true;
}
}
if(spieleranzahl > 3){
if((e.getSource() == attSp[3])){
if (pos4 == 1)
pruefen.addAll(Spieler1.holeHand());
if (pos4 == 2)
pruefen.addAll(Spieler2.holeHand());
if (pos4 == 3)
pruefen.addAll(Spieler3.holeHand());
if (pos4 == 4)
pruefen.addAll(Spieler4.holeHand());
verteidiger = pos4;
choose = true;
}
}
bannreifAktivFuerDefense(verteidiger);
handkartenAufRuestungPruefen(trefferPunktAngriff,verteidiger);
angriffsMenu.dispose();
}
}
Ist ein eigener Thread sinnvoll oder sollte man darauf verzichten und auf den Daemon Thread warten??
Hängen schon 2 Wochen dran
Gruß gambreiti
Zuletzt bearbeitet: