Avatar billede slinky Nybegynder
17. november 2006 - 10:20 Der er 2 kommentarer

Poker - find vinderen

Hej!
sidder og roder med et lille pokerspil.TexasHoldEm, og skal til at finde ud af hvilken spiller der har vundet. Som det ser ud nu har hver spiller en Vector<Kort> indeholdende de 7 kort der skal ses på. De 5 på bordet, og de 2 spilleren fik i hånden til at starte med. Et kort har en farve String Color (heart, spade...) og en værdi int value (1=es).
Ethvert kort har også et unikt ID, starter ved 1 ved ruder1, og slutter ved 52 ved spar konge.

Hvordan tjekker jeg nemmest hvem der vinder? skal jeg virkelig undersøge alle muligheder for at trække 5 kort ud af de 7, og ved hver af dem undersøge om der er tale om flush, straigt....
hvis ja, hvordan trækker jeg nemmest 5 kort ud af de 7


Kristian
Avatar billede winners79 Nybegynder
17. november 2006 - 11:08 #1
jamen du må jo lave nogle løkker der kører dine kort igennem, foreksempel checke om 5 af kortene er en flush

int antalKortISammeFarve = 0;
boolean flushMedRuder = false;

for (Kort k : spillerKort)
if (k.getUniktID <=13)
antalKortISammeFarve++;
else if(k.getUniktID <=26)
.........;

if (antalKortISammeFarve >=5)
flushMedRuder=true;


sådan ville jeg gøre det, men der er sikkert en bedre måde, jeg kan bare ikke umiddelbart se den, men der er nok andre der kan:)
Avatar billede vedikkebedre Nybegynder
21. november 2006 - 13:01 #2
Jeg tror også jeg vil opbygge det via disse løkker ... og så afvikle dem søgende efter det størst mulige og nedaf.

F.eks.
int value = 0;
for spiller 1:
if(CheckRoyleFlush()){
value = "1";
break;
}
else if(checkFourOfaKind()  .....

Du tildeler alle mulige hænder en value baseret på grupper -
f.eks.
RoyleFlush = 1;
Straight Flush = 2;
4 ens = 3;
etc.

så får spillerens hånd en værdi.

Du kan så sige at spilleren med lavest værdi vinder.

Efterfølgende hvis flere har FullHouse må du have en:
CheckforBiggestHouse();
Hvor du så igen differentierer på først hvor store de 3 ens kort er og giver det en værdi.
Er der igen flere spillere med lavest værdi - må du spørge ind på de 2 kort det udgør huset - hvor store er de .....

Du kan også vælge den "hårde" vej og tildele alle mulige hænder en værdi med det samme:
Royle flush = 1;
Straight Flush til konge = 2;
Straight Flush til Dame = 3;
etc.

Så skal du kun gennemløbe det en gang for at have en vinder. Men du vil bruge meget CPU-tid på at undersøge alle disse kombinationer uden det er nødvendigt. Der er jo ingen grund til at vide om det er en straight flush til Damen - hvis alle andre kun har fullhouse.
Endvidere er der jo heller ingen grund til at søge dybere end den højeste værdi, med mindre du kan have split pots....
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester