Ciao a tutti ragazzi, sono nuovo
Sto realizzando un progetto personale, per la precisione il gioco di carte Briscola. Mi sto focalizzando sul single player (umano vs computer), per poi aggiungere in futuro un comparto multiplayer.
Spero possiate aiutarmi perché sono decisamente bloccato. Ho programmato un po a "naso" e probabilmente mi sono complicato la vita (o forse no dai). Intanto vi accenno a com'è strutturato il programma.
Classi fondamentali:
1) Giocatore: Rappresenta l'utente umano con campi nome, le tre carte che possiede, metodi
get/set.
2) GiocatoreElettronico: Rappresenta il computer, carte che possiede, metodi get/set.
3) Carta: Rappresenta una generica carta da gioco, con campi Seme e Valore, metodi get/set tra cui specifico la presenza di metodi che dati il seme ed il valore mi ritornano l'immagine rappresentativa della carta.
4) Mazzo: Rappresenza un mazzo di carte tramite ArrayList. Metodi per estrarre una carta, mischiare il mazzo e altri metodi get/set di base.
5) Seme: Autoesplicativa.
6) Tavolo: Rappresenta il tavolo da gioco dove appunto vengono giocate le carte dai giocatori. Metodi get/set per permettere l'effettiva giocata delle carte. Questi sono i suoi campi:
private Carta pcTavolo; //Carta giocata dal pc
private Carta oldPcTavolo; //Carta precedente giocata dal pc
private Carta userTavolo; //Carta giocata dall'utente
private Carta briscolaTavolo; //Briscola
private Carta briscolaUltimaCarta; //Briscola scoperta sul tavolo che viene pescata alla fine
private Mazzo mazzo; //Nel tavolo è presente anche il mazzo di carte
7) GuiPartita: JFrame lanciato dalla finestra principale di avvio del gioco dove il gioco si svolge in maniera interattiva. Nel costruttore prende un riferimento alla classe Partita che ora vado ad introdurre.
Partita: Il cuore di tutto il gioco. Al costruttore passo un Giocatore, un GiocatoreElettronico
e un RecordClassifica). Non consideriamo il record classifica per adesso. Qui è presente tutta la logica del gioco. Mostro il metodo start():
private void start() {
/* Controlla turno e stato del gioco dell'utente
* e si ramifica in 4 possibili situazioni
*/
/* turno PC */
if(isTurnoPc()) {
System.out.println("E' il turno del pc.");
/* user non ha giocato (inizio della mano) */
if(!userHavePlayed) {
giocoPcScarta();
}
/*user ha già risposto al gioco pc: calcolo punti e vincitore*/
else {
fineMano();
}
}
/* turno user */
else {
System.out.println("E' il turno del giocatore.");
/* user non ha giocato (inizio della mano) */
if(!userHavePlayed) {
/* non accade nulla
* serve il gioco dell'utente
*/
System.out.println("Il computer sta attendendo la mossa del giocatore...");
}
/* user ha giocato e attende risposta pc */
else {
System.out.println("Il giocatore ha giocato, il computer sta rispondendo...");
giocoPcRisposta(); /* risposta pc */
fineMano(); /* punti e vincitore */
}
}
}
Ora il mio problema è che non so come collegare la logica (che sembra funzionare) e la grafica. L'utente deve cliccare sulla carta che vuole giocare, essa deve quindi sparire e comparire nel tavolo ecc.. ecc. Girovagando in rete l'unica cosa che ho potuto intuire è che dovrei utilizzare
dei Thread all'interno di GuiPartita per far funzionare il tutto. Mi servono dei consigli più pratici, grazie
Ho verificato il funzionamento della logica implementando un semplice ascoltatore per le carte
del giocatore. La pressione di una carta (un JButton) avvia l'ascoltatore che comunica con
un metodo della classe Partita per fargli capire quale carta il Giocatore ha scelto di giocare.