brsseb Skrevet 5. februar 2004 Del Skrevet 5. februar 2004 Hei Sitter med en programmeringsoppgave som dreier seg om det urgamle spillet Nim (det ved at man har flere rader med ulikt antall pinner, og to spillere trekker etter tur fra kun en rekke per gang, og den som trekker den siste pinnen vinner). Har laget det meste, men mangler litt på selve datamaskinspiller-koden. Har surfet rundt og lastet ned masser av kildekode, men har ikke klart å få dentil å virke i mitt spill. Det skal finnes en algoritme som gjør at, dersom maskinspilleren trekker først, vinner uansett. Og begynner man selv, kan man ikke gjøre en eneste feil uten at maskinen vinner igjen. Vet at selve algoritmen benytter XOR (uten at jeg helt har forstått hvorfor..). Sånn som det er nå, virker det som om boolean-flagget fantLosning aldri blir sann, dvs d der XOR-biten ikke funker som det skal. Er det noen som er hva som er gale med denne koden? Her er koden så langt (JAVA): /** * nesteTrekk(rader[]) * * Utfører neste trekket for denne spilleren. MaskinSpiller forsøker å * utføre et trekk så smart så mulig for å sikre seg seieren. * * @return Returerer denne spillerens trekk */ public Trekk nesteTrekk(int rader[]) { int radNr=0; int antPinner=0; boolean fantLosning=false; for (int rad=0; rad < rader.length; rad++) { int xorStart = 0; for (int i=0; i < rader.length; i++) xorStart ^= rader[i]; for (int pinner=1; pinner <= rader[rad] && !fantLosning; pinner++) { int xor = xorStart ^ (rader[rad] - antPinner); if (xor == 0) { fantLosning = true; radNr = rad; antPinner = pinner; } } } // finner vi ikke en god løsning, trekk en pinne fra en rad med flest pinner if (!fantLosning) { int radMedFlestPinner=0; int maksPinner =0; for (int i=0; i < rader.length;i++) { if (rader[i] > maksPinner) { maksPinner = rader[i]; radMedFlestPinner = i; } } radNr = radMedFlestPinner; antPinner = 1; } // Returner trekket return new Trekk(antPinner, radNr); } Håper noen ser feilen (eller har en bedre ide) BRSSEB Lenke til kommentar
L03VIk Skrevet 5. februar 2004 Del Skrevet 5. februar 2004 Kan ikke hjelpe deg der nei.... Har tilfeldigvis samme problem... The world is a small place... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå