Hallo,
ich schreibe an einem Pokerspiel mit GUI. Ein menschlicher spieler und eine Ai spielen. Am Ende jeder hand fragt di logik bei den clients eine "continue-action" ab. Der computer schickt automatisch ein continue zurück, der client zeigt einen jbutton der gedrückt werden muss. Ich zeige den button an und warte mit einem monitor bis der button gedrückt wird. Komischerweise blockiert di gui bei einem ganz bestimmten szenario (spieler wird zuerst gefragt dann pc). in dem blockierszenario wird also kein button angezeigt bevor monitor.wait aufgerufen wird. ich hoffe ich habe das gut genug erklärt. ich habe mir die invokeandwait methode angesehen und die add() und repaint() methoden darin ausgeführt und dachte die wäre ideal, hat leider nichts geholfen.
ich schreibe an einem Pokerspiel mit GUI. Ein menschlicher spieler und eine Ai spielen. Am Ende jeder hand fragt di logik bei den clients eine "continue-action" ab. Der computer schickt automatisch ein continue zurück, der client zeigt einen jbutton der gedrückt werden muss. Ich zeige den button an und warte mit einem monitor bis der button gedrückt wird. Komischerweise blockiert di gui bei einem ganz bestimmten szenario (spieler wird zuerst gefragt dann pc). in dem blockierszenario wird also kein button angezeigt bevor monitor.wait aufgerufen wird. ich hoffe ich habe das gut genug erklärt. ich habe mir die invokeandwait methode angesehen und die add() und repaint() methoden darin ausgeführt und dachte die wäre ideal, hat leider nichts geholfen.
Java:
public PokerAction getUserAction(ArrayList<PokerAction> possibleActions){
if(possibleActions.size()>3){
throw new IllegalArgumentException("Invalid amout of actions");
}
for(PokerAction a: possibleActions){
if(a instanceof Continue) {
buttonsPanel.add(continueButton);
}
else if (a instanceof Fold) buttonsPanel.add(foldButton);
else if (a instanceof Check) buttonsPanel.add(checkButton);
else if (a instanceof Call) buttonsPanel.add(callButton);
else if (a instanceof Raise) {
buttonsPanel.add(raiseButton);
setSliderMin(a.getAmount());
sliderPanel.setVisible(true);
}
else if (a instanceof Bet) {
buttonsPanel.add(betButton);
setSliderMin(a.getAmount());
sliderPanel.setVisible(true);
}
}
repaint();
synchronized (monitor) {
try {
System.out.println("waiting ...");
monitor.wait();
} catch (Exception e) {
}
}
removeElements();
return selectedAction;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
Object source = e.getSource();
if(source == continueButton) selectedAction = new Continue();
...
...
synchronized(monitor){
System.out.println("notifing");
monitor.notifyAll();
}
}