MrEro Skrevet 12. juni 2009 Del Skrevet 12. juni 2009 (endret) Hei godtfolk, Jeg sitter her, andre dagen i strekk, og morer meg med å programmere Yatzi i C# [Visual Web Dev.]. Jeg har kommet nedover yatzy-skjemaet, men har nå satt meg fast. Jeg klarer ikke tenke ut en enkel og presis måte for å kontrollere om terningene viser ett par vs. to par, tre like etc. Er det noen kloke personer der som ønsker å gi en hjelpende hånd? Altså, et søk etter like tall inni én array, og tilbakemelding om hvorvidt det er to like, tre like, to par eller fire like. Terningenes verdier er en array med 5 random verdier. Tips? Er forsåvidt en skoleoppgave, men tips må jo være lov - ettersom jeg har brukt så mye tid på dett nå.. På forhånd takk. O.B.Newbie Edit: Til tross for mangel på svar er dette nå løst. Ettersom jeg er redd for å publisere koden før overstått eksamen, i frykt for at lærer/sensor kan tro at jeg har hentet den herifra venter jeg med det. Dersom noen ønsker at jeg skal legge den ut i framtiden en gang, får de ytre sitt ønske. Endret 13. juni 2009 av MrEro Lenke til kommentar
Velena Skrevet 7. juli 2009 Del Skrevet 7. juli 2009 Syntes dette så artig ut, og bestemte meg for å prøve å løse oppgaven. Jeg har ikke testet denne koden, så om noen ser noe galt med den så bare skrik ut. Funksjonene er listet alfabetisk: public List<int> DiceRolls (int numOfDice)// Gir en liste med tilfeldige tall fra 1-6. { Random die = new Random(); List<int> values = new List<int>(); for(int i = 0;i<numOfDice;i++) values.Add(die.Next(1, 7)); return values; } public YahtzeeRank GetRank (List<int> diceRolls)// Gir den beste rangen mulig utifra verdiene gitt. { YahtzeeRank bestRank = YahtzeeRank.Nothing; diceRolls = Sort(diceRolls); List<int> rows = new List<int>(); int index = 0; int row = 0; int j=0; while((j+index)<5)// Her er mitt løsningsforslag på det trådstarter hadde problem med { row = 0; for(j=0; (j+index)<5;j++) { if(diceRolls[index + j] ==diceRolls[index]) row++; else { index += j; if(row >1) rows.Add(row); continue; } } } if(row>1) rows.Add(row); switch (rows.Max()) { case 5: bestRank = YahtzeeRank.Yahtzee; break; case 4: bestRank = YahtzeeRank.FourOfAKind; break; case 3: if(rows.Contains(2)) bestRank = YahtzeeRank.FullHouse; else bestRank = YahtzeeRank.ThreeOfAKind; break; case 2: case 1: if(rows.Sum() == 4) bestRank = YahtzeeRank.TwoPairs; else{ if(Streak(diceRolls) == 5) bestRank = YahtzeeRank.LargeStraight; else if (Streak(diceRolls) == 4) bestRank = YahtzeeRank.SmallStraight; } break; default: break; } return bestRank; } private List<int> Sort (List<int> values)// Sorterer tallene gitt fra minst til størst { List<int> sortedList = new List<int>(); int buffer=0; foreach (int value in values) { buffer = value; foreach (int value2 in values) { if(buffer > value2) buffer = value2; } values.Remove(buffer); sortedList.Add(buffer); } return sortedList; } private int Streak(List<int> values)// Gir tilbake det største antall tall som er i rekkefølge. { List<int> record = new List<int>(); int count = 0; int j = 0; for (int i = 0; i < values.Count; i++) { if (values.ToArray()[i] == values.ToArray()[j] + (i - j)) count++; else if (values.ToArray()[i] < values.ToArray()[j] + (i - j)) j = i; else { j = i; record.Add(count); count = 0; } } return record.Max(); } private enum YahtzeeRank { Nothing=0, TwoPairs, ThreeOfAKind, FourOfAKind, FullHouse, SmallStraight, LargeStraight, Yahtzee } 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å