[JAVA] kontrollmetod i yatzee spel?

Permalänk

[JAVA] kontrollmetod i yatzee spel?

tjo, sitter med en polare o pillar med ett yatzee-spel i java. Nu när det väl kommer till kritan så verkar det som det blir svårt att göra en metod som kontrollerar vad för utfall tärningarna ger (om det är kåk, par i tvåor etc etc).
Detta kan iofs vara brist på logiskt tänkande från vår sida, men vi kan verkligen inte komma på något simpelt sätt att utföra kontrollen utan att använda hundratals if-satser, och med ett så pass utvecklat språk som java så borde det finnas ett enklare sätt.
Så, finns det någon med kunskaper som kan ge en kvick vägledning in i rätt tankebanor? eventuella snutta pseudokod hade kunnat hjälpa, men vi försöker undvika att kolla på färdig källkod, detta är i inlärningssyfte

//Kalle

Visa signatur

[AMD Athlon64 4400+ ][Geforce 8800GTS][ASUS M4N-SLI]
[3x300gb i RAID0, 500 gig och en 74gb raptor = 1474 GB]

Permalänk
Medlem

Hmm, antingen tänker ni helt galet (100tals if satser är ju löjligt mycket för en sån här sak), eller så har jag misförstått vad ni vill göra...

Snabbskrev iaf ihop en liten implementation som klarar av att känna igen alla typer av poänggivande tärningskombinationer från den nedre sektionen av yatzy blocket (http://en.wikipedia.org/wiki/Yahtzee#Lower_section), och det blev 100rader, varav 30rader är för testkörningar (och resten av koden innehåller en hel del formateringar såsom blanka rader osv. för läsbarhetens skull).
Ni ville ju dock inte ha ren källkod, så jag get er väl helt enkelt tipset att implementera några grundläggande metoder:

1) Implementera en funktion som räknar antalet förekomster för varje tärningsvärde, spara i en array med 6 platser (om tärningsvärdet 5 förekommer 2 ggr, spara värde 2 i position 4 (array index börjar från 0..))

2) implementera max/min funktioner som fungerar på arrayer.

3) Implementera en funktion som kollar om ett angivet tal finns i en array.

Ovanstående 4 methoder (punkt 2 är 2 methoder) är triviala att implementera, och med dem så blir alla isYatzee/isThreeOfAKind/.. funktioner också triviala.

Ex:

public boolean isLargeStraight(int dices[]) { int reps[] = getCount(dices); return max(reps)==1 && (min(dices)!=1 || max(dices)!=6); }

I exemplet är dices[] en array som innehåller 5 heltal mellan 1 och 6, getCount är den funktion som jag tidigare nämnt som beräknar förekomster av tärningsvärden.

Om ni vill se resten av källkoden så är det bara att säga till, dock bör ni inte ha några som helst problem att implementera samtliga isThreeOfAKind/isYatzee/.. funktioner på 2-3 rader kod per metod om ni först implementerar de 4 triviala funktionerna som jag nämnde tidigare, så gissningsvis lär ni knappast behöva se min kod för att kunna återskapa den.

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk
Medlem

En sak som nog kan underlätta är, att förutom själva arrayen med tärningsvärden, som {6, 3, 6, 1, 2}, så håller man också reda på ett histogram med tärningsvärdena - dvs något som explicit har koll på hur många 1or, 2or osv vi har. I ovanstående fall skulle histogrammet bli {1, 1, 1, 0, 0, 2}. För att då ta reda på om vi har en kåk, titta i histogrammet - finns där en 3:a och en 2:a?

Sedan är det lättare att göra vissa kontroller om man arbetar på en sorterad utfallsarray (obs! sortera inte histogrammet! ) - framför allt när det gäller stegar.