2025-06-09 11:23:39 +02:00
import java.util.ArrayDeque ;
import java.util.ArrayList ;
import java.util.Deque ;
2025-06-09 14:44:23 +02:00
import it.kibo.fp.lib.Menu ;
2025-06-09 12:59:11 +02:00
import it.kibo.fp.lib.RandomDraws ;
2025-06-09 10:44:26 +02:00
public class Partita {
2025-06-09 14:44:23 +02:00
private static String titolo = " seleziona la scelta " ;
private static String [ ] selezioni = { " Lancia il dado " , " usa la tessera tifo o inveimento " , " scommetti su un cavallo " , " giocati la casa " , " visualizza la mappa " , " visualizza i soldi di tutti " } ;
2025-06-09 16:26:50 +02:00
private static String titolo2 = " seleziona il cavallo su cui scommettere " ;
private static String [ ] selezioniCavalli = { " Nawt, Rosso " , " Blanco, Blu " , " Pound, Giallo " , " Bang, Verde " , " Bupkus, Viola " } ;
2025-06-09 12:29:29 +02:00
private Deque < Giocatore > giocatori = new ArrayDeque < > ( ) ;
private ArrayList < Cavallo > cavalli = new ArrayList < > ( ) ;
2025-06-09 11:23:39 +02:00
private Mappa mappa ;
private Pila pila ;
2025-06-09 14:44:23 +02:00
private Menu menu = new Menu ( titolo , selezioni , true , true , true ) ;
2025-06-09 16:26:50 +02:00
private Menu menu2 = new Menu ( titolo2 , selezioniCavalli , true , true , true ) ;
2025-06-09 14:44:23 +02:00
2025-06-09 10:44:26 +02:00
2025-06-09 11:23:39 +02:00
public Partita ( Deque < Giocatore > giocatori , ArrayList < Cavallo > cavalli , Mappa mappa , Pila pila ) {
this . giocatori = giocatori ;
this . cavalli = cavalli ;
this . mappa = mappa ;
this . pila = pila ;
}
2025-06-09 12:59:11 +02:00
public void sceltaCavaliere ( ) {
int i = RandomDraws . drawInteger ( 0 , giocatori . size ( ) - 1 ) ;
for ( int j = 0 ; j < i ; j + + ) {
giocatori . addLast ( giocatori . getFirst ( ) ) ;
giocatori . removeFirst ( ) ;
}
giocatori . getFirst ( ) . setCavaliere ( true ) ;
}
public void inizioTappa ( ) {
2025-06-09 15:39:10 +02:00
int dado = 0 ;
2025-06-09 14:44:23 +02:00
do {
new Output ( ) . annuncioTurno ( giocatori . getFirst ( ) ) ;
int s = menu . choose ( ) ;
switch ( s ) {
case 1 :
2025-06-09 15:39:10 +02:00
giocatori . getFirst ( ) . lanciaDado ( cavalli , mappa ) ;
2025-06-09 14:44:23 +02:00
giocatori . addLast ( giocatori . getFirst ( ) ) ;
giocatori . removeFirst ( ) ;
2025-06-09 15:39:10 +02:00
dado + + ;
2025-06-09 17:16:23 +02:00
2025-06-09 14:44:23 +02:00
break ;
case 2 :
2025-06-09 17:16:23 +02:00
int x = giocatori . getFirst ( ) . posizionaTesseraTifoInveimento ( mappa ) ;
mappa . getCasella ( x ) . setGiocatoreTessera ( giocatori . getFirst ( ) ) ;
2025-06-09 14:44:23 +02:00
giocatori . addLast ( giocatori . getFirst ( ) ) ;
giocatori . removeFirst ( ) ;
break ;
case 3 :
2025-06-09 16:26:50 +02:00
boolean checkTesserePiene = false ;
int cavalloScelto = 0 ;
do {
cavalloScelto = menu2 . choose ( ) ;
if ( cavalli . get ( cavalloScelto - 1 ) . getTessereSize ( ) > = 4 ) {
checkTesserePiene = true ;
new Output ( ) . erroreTesserePiene ( ) ;
}
} while ( checkTesserePiene = = true ) ;
2025-06-09 17:16:23 +02:00
giocatori . getFirst ( ) . scommettiCavallo ( cavalli . get ( cavalloScelto - 1 ) ) ;
2025-06-09 14:44:23 +02:00
break ;
case 4 :
2025-06-09 17:16:23 +02:00
int cartaCavallo = 0 ;
boolean checkCartaUsata = false ;
do {
cartaCavallo = menu2 . choose ( ) ;
for ( int i = 0 ; i < pila . vincitoriSize ( ) ; i + + ) {
if ( pila . getCartaVincitore ( i ) . equals ( giocatori . getFirst ( ) . getCarta ( cartaCavallo ) ) ) {
checkCartaUsata = true ;
System . out . println ( " seleziona una carta che non hai mai usato " ) ;
break ;
}
}
if ( checkCartaUsata = = false ) {
for ( int i = 0 ; i < pila . perdentiSize ( ) ; i + + ) {
if ( pila . getCartaPerdente ( i ) . equals ( giocatori . getFirst ( ) . getCarta ( cartaCavallo ) ) ) {
checkCartaUsata = true ;
System . out . println ( " seleziona una carta che non hai mai usato " ) ;
break ;
}
}
}
giocatori . getFirst ( ) . giocaCasa ( cartaCavallo , pila ) ;
} while ( checkCartaUsata = = true ) ;
2025-06-09 14:44:23 +02:00
break ;
case 5 :
new Output ( ) . mostraMappa ( mappa ) ;
break ;
case 6 :
new Output ( ) . visualizzaSoldi ( giocatori ) ;
break ;
2025-06-09 17:16:23 +02:00
2025-06-09 14:44:23 +02:00
}
2025-06-09 17:16:23 +02:00
for ( int i = 0 ; i < cavalli . size ( ) ; i + + ) {
if ( cavalli . get ( i ) . getPosizione ( ) > = 17 ) {
finePartita ( ) ;
}
}
2025-06-09 14:44:23 +02:00
2025-06-09 15:39:10 +02:00
} while ( dado < 5 ) ;
2025-06-09 12:59:11 +02:00
}
2025-06-09 17:16:23 +02:00
public void fineTappa ( ) {
}
public void finePartita ( ) {
}
2025-06-09 10:44:26 +02:00
}