Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2018-04-07, 10:14
  #13
Medlem
Citat:
Ursprungligen postat av tj.
Det beror på hur du har tänkt att det ska fungera. Ska flera spelare kunna vinna? För som det är just nu så sparar du alla som har uppnått tillräckligt med poäng i en lista kallad winningPlayers. Om det är OK att flera spelare vinner så är det bara att loopa igenom den listan och skriva ut respektive spelares namn.
Kod:
foreach (var player in winningPlayers)
{
    
Console.WriteLine($"{player.Name} is a winner!"

Om det bara ska finnas en vinnare så måste du ta fram den spelaren med mest poäng ur den listan och skriva ut dennes namn.

Får de ej att funka. Vill att en spelare ska skrivas ut och sen ska programmet stängas av!
Citera
2018-04-07, 10:24
  #14
Medlem
tj.s avatar
Citat:
Ursprungligen postat av Douknowme
Får de ej att funka. Vill att en spelare ska skrivas ut och sen ska programmet stängas av!
Skriv hur du vill att programmet ska fungera. Gärna i pseudokod. Och visa vad du har gjort för att åstadkomma det.
Citera
2018-04-07, 10:29
  #15
Medlem
Citat:
Ursprungligen postat av tj.
Skriv hur du vill att programmet ska fungera. Gärna i pseudokod. Och visa vad du har gjort för att åstadkomma det.

Anropa metoden calculatepoints() och om poängen är lika med 301 eller högre så läggs den spelaren in i winninPlayers.

ropa ut den spelaren med poängen 301 eller mer och avsluta programmet.

men de som blir fel är att vinner bara loopas om och måste skriva in nya poäng för honom.

Kod:
var winningPlayers = new List<Player>();

            while (
true)
            {
                foreach (var 
Player in PlayerList)
                {
                    
Console.WriteLine("|Turn one| Enter score for {0}"Player);
                    
turn1 Convert.ToInt32(Console.ReadLine());
                    
Console.WriteLine("|Turn two| Enter score for {0}"Player);
                    
turn2 Convert.ToInt32(Console.ReadLine());
                    
Console.WriteLine("|Turn three| Enter score for {0}"Player);
                    
turn3 Convert.ToInt32(Console.ReadLine());
                    
Player.AddTurns(turn1turn2turn3);

                    if (
Player.Calculatepoints() >= 301)
                    {
                        
winningPlayers.Add(Player);
                        break;
                    }
                }

                foreach(var 
player in winningPlayers)  
                {
                    
Console.WriteLine("And the winner is {0}"player);
                    break;
                }

            } 
Citera
2018-04-07, 10:36
  #16
Medlem
tj.s avatar
Citat:
Ursprungligen postat av Douknowme
Anropa metoden calculatepoints() och om poängen är lika med 301 eller högre så läggs den spelaren in i winninPlayers.

ropa ut den spelaren med poängen 301 eller mer och avsluta programmet.

men de som blir fel är att vinner bara loopas om och måste skriva in nya poäng för honom.

Kod:
var winningPlayers = new List<Player>();

            while (
true)
            {
                foreach (var 
Player in PlayerList)
                {
                    
Console.WriteLine("|Turn one| Enter score for {0}"Player);
                    
turn1 Convert.ToInt32(Console.ReadLine());
                    
Console.WriteLine("|Turn two| Enter score for {0}"Player);
                    
turn2 Convert.ToInt32(Console.ReadLine());
                    
Console.WriteLine("|Turn three| Enter score for {0}"Player);
                    
turn3 Convert.ToInt32(Console.ReadLine());
                    
Player.AddTurns(turn1turn2turn3);

                    if (
Player.Calculatepoints() >= 301)
                    {
                        
winningPlayers.Add(Player);
                        break;
                    }
                }

                foreach(var 
player in winningPlayers)  
                {
                    
Console.WriteLine("And the winner is {0}"player);
                    break;
                }

            } 
Din kod innehåller då två fel. Dels loopar du igenom flera spelare som har uppnått tillräckligt med poäng och skriver ut deras namn, trots att du bara vill ha en vinnare. Hur ska du lösa det? Vidare kommer din break; bryta dig ut ur foreach(var player in winningPlayers)-loopen och inte ur while(true)-loopen.
Citera
2018-04-07, 11:18
  #17
Medlem
Citat:
Ursprungligen postat av tj.
Din kod innehåller då två fel. Dels loopar du igenom flera spelare som har uppnått tillräckligt med poäng och skriver ut deras namn, trots att du bara vill ha en vinnare. Hur ska du lösa det? Vidare kommer din break; bryta dig ut ur foreach(var player in winningPlayers)-loopen och inte ur while(true)-loopen.

Jo tagit bort break i while, ville bara testa en gång och råkade stanna kvar.. men till de första problemet..

Jag vill bara skriva ut spelaren som vunnit och sen avsluta. Antar att jag fortfarande ska ha min foreach loop där med



Kod:
//Huvudet antar jag ska vara en foreach loop 
Foreach(var player in winningPlayers){


//Men kroppen är jag osäker på. Vill ju bara den ska skriva ut vinnaren som uppnått <=301



Citera
2018-04-07, 13:14
  #18
Medlem
tj.s avatar
Citat:
Ursprungligen postat av Douknowme
Jo tagit bort break i while, ville bara testa en gång och råkade stanna kvar.. men till de första problemet..

Jag vill bara skriva ut spelaren som vunnit och sen avsluta. Antar att jag fortfarande ska ha min foreach loop där med



Kod:
//Huvudet antar jag ska vara en foreach loop 
Foreach(var player in winningPlayers){


//Men kroppen är jag osäker på. Vill ju bara den ska skriva ut vinnaren som uppnått <=301



Jag tror du måste tänka till lite hur du vill att det ska fungera. Anledningen till varför jag föreslog att du skulle spara de som har åstadkommit över 301 poäng i en lista är för att du nämnde att det är kriteriet för att vinna.

Ponera att du har spelare A, B och C. I omgång tre kommer A upp i 302 poäng och B upp i 303 poäng. Bägge har alltså kommit över 301 poäng. Räknas de bägge som vinnare då eller är det B, som har en poäng mer än A, som har vunnit? I så fall måste du ju loopa tills dess att någon av dem har kommit över 301 poäng och väl då plocka fram den spelare som har mest poäng - och då skriva ut dennes namn och avsluta while(true)-loopen. Om bara en spelare kan vinna så finns det ingen vits med att spara dem i en vinnarlista.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback