Si, la carta ha valore e seme. Il seme è anch'esso un int, per evitare complessità con il tipo String.
Ho fatto vari tentativi, in uno di questi creavo un "valorewin" ed un "semewin" dandogli i valori della prima carta sul tavolo.
Successivamente, in un if(briscola) facevo partire un ciclo, dove controllavo ogni altra carta sul tavolo, e se fosse stata briscola procedeva con il controllo del valore. Se il valore era maggiore, il turno sarebbe cambiato in "i" e valorewin sarebbe diventato il valore della carta "i"
Se la prima carta non era briscola, facevo partire un ciclo dove controllavo innanzitutto se la carta
fosse briscola, in tal caso semewin sarebbe diventato il seme della briscola, valorewin il valore di carta e il turno "i". Se la carta non era briscola, controllava se il seme fosse uguale a semewin, in tal caso procedeva ancora con il controllo del valore e le istruzioni successive.
Bene, concettualmente sembra funzionare, ma in pratica no.
Questo è uno dei codici che ho provato:
public int DecretaVincitore(carta[] Tavolo, Giocatore[] Players)
{
if(Tavolo[0].briscola == false)
{
int semewin = Tavolo[0].seme;
int valorewin = Tavolo[0].GetValore();
boolean briscolatmp = false;
if(Tavolo[1].briscola == true)
{turno = 1; semewin = Tavolo[1].seme; valorewin = Tavolo[1].GetValore(); briscolatmp = true;}
else if(Tavolo[1].briscola == false && Tavolo[1].seme == semewin && Tavolo[1].GetValore() > valorewin)
{turno = 1; valorewin = Tavolo[1].GetValore();}
if(briscolatmp == false)
{
if(Tavolo[2].briscola == false && Tavolo[2].seme == semewin && Tavolo[2].GetValore() > valorewin)
{turno = 2; valorewin = Tavolo[2].GetValore();}
else if(Tavolo[2].briscola == true)
{briscolatmp = true; valorewin = Tavolo[2].GetValore(); semewin = Tavolo[2].seme; turno = 2;}
}
else if(briscolatmp == true)
{
if(Tavolo[2].briscola == true && Tavolo[2].GetValore() > valorewin)
{turno = 2; valorewin = Tavolo[2].GetValore();}
}
if(briscolatmp == false)
{
if(Tavolo[3].briscola == true)
{briscolatmp = true; valorewin = Tavolo[3].GetValore(); turno = 3; semewin = Tavolo[3].seme;}
else if(Tavolo[3].briscola == false && Tavolo[3].seme == semewin && Tavolo[3].GetValore() > valorewin)
{turno = 3; valorewin = Tavolo[3].GetValore();}
}
else if(briscolatmp == true)
{
if(Tavolo[3].briscola == true && Tavolo[3].GetValore() > valorewin)
{turno = 3; valorewin = Tavolo[3].GetValore();}
}
}
else if(Tavolo[0].briscola == true)
{
int valorewin = Tavolo[0].GetValore();
if(Tavolo[1].briscola == true && Tavolo[1].GetValore() > valorewin)
{turno = 1; valorewin = Tavolo[1].GetValore();}
if(Tavolo[2].briscola == true && Tavolo[2].GetValore() > valorewin)
{turno = 2; valorewin = Tavolo[2].GetValore();}
if(Tavolo[3].briscola == true && Tavolo[3].GetValore() > valorewin)
{turno = 3; valorewin = Tavolo[3].GetValore();}
}Tavolo[0] = null; Tavolo[1] = null; Tavolo[2] = null; Tavolo[3] = null; return turno;
}
Il GetValore() restituisce il "peso" effettivo di quella carta, quindi un asso restituirà 12, un 4 restituisce un 4, e così via.
Ovviamente all'inizio l'avevo fatto con dei cicli, non di certo così. Ma visto che non funzionava, ho provato a descrivere il comportamente caso per caso, ma anche in questo caso non funziona.