Salve a tutti,
sto sviluppando un programmino per giocare a carte. Stando ad implementare l'interfaccia grafica con Javafx non riesco a capire come, in base al turno di gioco, si possa scegliere una carta e restituirne il valore.
A linea di comando è semplice perché il programma attende fino a che il buffer ( BufferedReader(new InputStreamReader(System.in)) ) non riceve qualcosa, sto trovando difficoltà con la Gui.
Cioè, quando è il turno del giocatore non posso mettere un while(true) aspettando che accada un evento (pressione di un tasto(una carta) sulla gui) perché il programma va in attesa attiva e non risponde più.
Vorrei sapere se debbo implementare un meccanismo usando i thread e se potete indirizzarmi verso qualche sito idoneo.
Grazie
Qualche linea di codice:
@Override
public Entry<Integer,CardInterface> chooseCard() {
Entry<Integer,CardInterface> card=null;
//se viene usata la Gui java fx
if(Coordinator.getInstance().getGuiOrNot()) {
Coordinator.getInstance().getTurno().showCardsInHand();
//si deve ritornare un valore preso da una tasto dalla gui
//TODO
}
//altrimenti a linea di comando
else {
System.out.println("/*---turno del realplayer---*/\n");
Coordinator.getInstance().getTurno().showCardsInHand().showDeck().entrySet().parallelStream().forEach(cards->
System.out.print(cards.getKey()+")"+cards.getValue().printCard()+"\n"));
System.out.println("\n/*---carte in tavola---*/\n");
Dealer.getInstance().getCardTable().showDeck().entrySet().parallelStream().forEach(cards->
System.out.print(cards.getValue().printCard() ));
System.out.println("\nScegliere una carta\n");
while(card==null) {
card=cardExists();
}
}
return card;
}
/**Viene controllato se il dato inserito da tastiera é valido<br>
* e se la carta esiste nella mano del giocatore
* @return La carta scelta dal giocatore
* @throws IOException
* @see {@link CardInterface}
* @see {@link Player}
* @see {@link StrategyInterface}
*/
private Entry<Integer,CardInterface> cardExists(){
Entry<Integer,CardInterface> card=null;
BufferedReader tastiera=null;
while(card==null) {
try {
tastiera=new BufferedReader(new InputStreamReader(System.in));
card=Coordinator.getInstance().getTurno().getCardFromHand(Integer.parseInt(tastiera.readLine()));
if(card==null)System.out.println("Elemento non presente,ricontrolla");
} catch (IndexOutOfBoundsException | IOException | NumberFormatException e) {
System.out.println("Elemento non presente,ricontrolla");
}
}
return card;
}