Permalänk

yatzy i c#

Hej,

Jag håller på att skapa ett yatzy i windows form med c#.

Och nu skulle jag vilja kolla om användaren har ett par och sen returnera poängen.

Arrayen dice är mina fem tärningar som man måste loppa igenon för att kolla vilka siffror tärningarna visar.
Här är koden jag har gjort men den ger konstiga värden i bland till poängen.

int have = 0; for(int i = 0; i < 6;i++) { for (int y = 1; y < 6; y++) { if (dice[y] == i) { have++; if (have == 2) { point = i * 2; break; } } } }

Tack för all hjälp i förväg/
Granskog

Permalänk
Medlem

Först så får du försöka förklara vad du får för konstiga värden.
Tänk på att en array alltid börja på index 0, dvs ditt y alltid börjar på 1 så du missar första positionen i din array.
Så här nånting kanske fungerar för dig, har inte kompilerat men borde fungera.

for(int i = 0; i < 6; ++i) { for(int j = 0; j < 6; ++j) { if(dice[i] == dice[j] && i != j) { have++; if(have == 2) { point = dice[i] * 2; } } } }

Var lite hastig detta borde nog gå bättre :)
Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Först och främst måste du nollställa have innanför den första for loopen.Sen när du breakar så är du kvar i den första loopen vilket gör att du kan hitta mer än ett par

Permalänk
Medlem
Skrivet av granskog1:

Hej,

Jag håller på att skapa ett yatzy i windows form med c#.

Och nu skulle jag vilja kolla om användaren har ett par och sen returnera poängen.

Arrayen dice är mina fem tärningar som man måste loppa igenon för att kolla vilka siffror tärningarna visar.
Här är koden jag har gjort men den ger konstiga värden i bland till poängen.

int have = 0; for(int i = 0; i < 6;i++) { for (int y = 1; y < 6; y++) { if (dice[y] == i) { have++; if (have == 2) { point = i * 2; break; } } } }

Tack för all hjälp i förväg/
Granskog

Lånar din kod för att se om du menar som jag tror.

//vad står det här värdet för? Är det totalsumman av tärningarna? int have = 0; //göra det 5 gånger, för tärningarna? for(int i = 0; i < 6;i++) { //antar att du inte räknar poäng här, för du kommer aldrig få värdet sex. for (int y = 1; y < 6; y++) { //dina tärningar? if (dice[y] == i) { have++; if (have == 2) { point = i * 2; //kommer inte det här avbryta hela loopen? break; } } } }

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40

Permalänk
Medlem
Skrivet av granskog1:

Hej,

Jag håller på att skapa ett yatzy i windows form med c#.

ot: Kul att någon annan också gett sig in på att göra ett Yatzy. Jag gör själv ett Yatzy fast då i C++

Visa signatur

Intel Core i7 4790k | ASUS STRIX GTX 980 OC | 1TB SAMSUNG 850 EVO

Permalänk
Datavetare

Ett tips: ibland är det värt att göra en transform på sitt data innan man ger sig på att lösa uppgiften.

För att konkretisera detta på Yatzy, anta att du slår 5,4,3,5,1 och detta representeras av en array [ 5 4 3 5 1].
Att leta på ett par i detta är inte supersvårt, men tänk hur det kommer bli att leta två par, kåk, stege etc.

Finns det något annat sätt att represtera exakt samma information? Visst, finns flera men ett är väldigt lämpat just för Yatzy även om man kommer tappa en specifik information: identitet på tärningarna, något som inte är relevant när man ska sätta poäng.

Så vilken är då transformen? Jo, skapa i stället en array med 6 platser (en för varje möjligt tärningsutfall) och räkna hur många av varje du fått. Resultatet ovan blir då [ 1 0 1 1 2 0 ]

Resultat för par blir då: sök bakifrån, hittar du någon som är >=2 så multiplicerar du index (index + 1 då man startar på 0) med 2.
Resultat för två par: tja, ska finnas två element som är >=2
Stege: väldigt enkelt, liten så ska index 0-4 vara ==1, stor så ska index 1-5 vara == 1
Kåk: leta på index som innehåller värdet 2 och index som innehåller värde 3, finns inte det så är det inte kåk.

Gjorde ett Yatzy spel i Forth-likt språk en gång i tiden på en väldigt begränsad plattform (miniräknare) så då fick man tänka till lite hur man representerade saker och ting.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer

Permalänk
Medlem
Skrivet av Yoshman:

Ett tips: ibland är det värt att göra en transform på sitt data innan man ger sig på att lösa uppgiften.

För att konkretisera detta på Yatzy, anta att du slår 5,4,3,5,1 och detta representeras av en array [ 5 4 3 5 1].
Att leta på ett par i detta är inte supersvårt, men tänk hur det kommer bli att leta två par, kåk, stege etc.

Finns det något annat sätt att represtera exakt samma information? Visst, finns flera men ett är väldigt lämpat just för Yatzy även om man kommer tappa en specifik information: identitet på tärningarna, något som inte är relevant när man ska sätta poäng.

Så vilken är då transformen? Jo, skapa i stället en array med 6 platser (en för varje möjligt tärningsutfall) och räkna hur många av varje du fått. Resultatet ovan blir då [ 1 0 1 1 2 0 ]

Resultat för par blir då: sök bakifrån, hittar du någon som är >=2 så multiplicerar du index (index + 1 då man startar på 0) med 2.
Resultat för två par: tja, ska finnas två element som är >=2
Stege: väldigt enkelt, liten så ska index 0-4 vara ==1, stor så ska index 1-5 vara == 1
Kåk: leta på index som innehåller värdet 2 och index som innehåller värde 3, finns inte det så är det inte kåk.

Gjorde ett Yatzy spel i Forth-likt språk en gång i tiden på en väldigt begränsad plattform (miniräknare) så då fick man tänka till lite hur man representerade saker och ting.

Smart i sin enkelhet

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Avstängd

Det vore lättare att lösa uppgiften om du hade några klasser för att få lite bättre översikt på ditt program, för din skull.