Gå til innhold

Anbefalte innlegg

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 av MrEro
Lenke til kommentar
  • 4 uker senere...
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...