7 svar
134 visningar
Ahmad94 37
Postad: 29 jan 2023 15:41

programmering 2 (Dart spelet)

HEJ

Jag har uppgift och har fastnat i den flera dagar,Ju mer jag försöker lösa det, desto svårare och obegripligt blir det. Så därför tänkte fråga om hjälp, uppgiften går ut så :

1. Man börjar med att lägga till alla spelare som ska vara med genom att ange deras namn.
2. Spelarna kastar i tur och ordning. När det är en spelares tur att kasta står hans namn på
skärmen.
3. Spelaren kastar 3 pilar som kan ge 0-20 poäng per pil. (max 60p per runda) Varje kast läggs
manuellt in i datorn förutom om Dator spelar.
4. Därefter är det nästa spelares tur.
5. Den spelare vars totala summa på alla kast är över 301 poäng först vinner. (Vi bryr oss inte
om att man måste gå jämt ut – se dock nedan för svårare version.)
6. När en spelare har vunnit ska hans namn visas på skärmen varefter alla hans pil-kast skrivs ut
för hur han kastade. Varje serie av 3 pil-kast ska visas så att man förstår hur varje omgång har
kastats.
7. Ni kan själva välja om rundan spelas klart när någon uppnått maxpoängen.

::::::

1. Det första problemet är att siffrorna som anges eller matas in manuellt av spelarna inte visas på skärmen, det visas andra slumpmässiga nummer på skärmen, jag har försökt lösa det men kunde inte.

2. Det andra problemet var att jag inte kunde få de valda siffrorna att visas på skärmen när en av spelarna vann, men spelaren nummer två måste alltid vinna för att ordet vinnare ska visas på skärmen, annars vinnare ordet visas inte på skärmen och när ordet vinnare visas, Jag kunde inte bifoga namnet på den vinnande spelaren bredvid ordet vinnare när spelet var slut.

3. Det sista problemet är att siffrorna som spelarna matat in manuellt inte visas på skärmen, utan slumpmässiga siffror dyker upp två gånger istället för en gång, för att beräknas i metoden (calculatepoints) efter det.

Så om någon har tips eller en sökord på google som hjälper mig 
Tusen tack för hjälpen

namespace Project101
{
    internal class Class1
    {
        public static void Main(string[] args)

        {

            Game my_game = new Game();
            try
            {

                my_game.playgame();
            }
            catch
            {
                Main(args);
            }
            Console.ReadKey(true);

        }
        class Game
        {
            private List<Player> player_List = new List<Player>();

            public void addplayer(string name)


            {

                Player players = new Player(name);
                player_List.Add(players);

            }
            public void playgame()

            {
                int antal_spelare;
                int winner = 101;
            
                int antal_kast = 3;
                Random slump_tal = new Random();
                int pil1 = 0;
                int pil2 = 0;

                int pil3 = 0;
                int dart1 = 0;
               int dart2= 0;
               int  dart3= 0;

                Console.WriteLine("Vällkommen til dartspelet");
                Console.WriteLine("---------------------------------------------------------");
                Console.WriteLine("Hur många spelaren vill du ha ?");

                try
                {
                    antal_spelare = int.Parse(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("Skriv in bara siffror");

                    throw;

                }

                for (int i = 0; i < antal_spelare; i++)
                {
                    Console.Write($"\nSkriv in namnet på spelare {i + 1}: ");
                    string name = Console.ReadLine();
                    addplayer(name);
                }
               
              
                do
                {
                   
                    foreach (var player in player_List)
                    {
                        Console.WriteLine("\n Det är {0} tur , kasta tre gånger mellan 0-20", player.Calculatepoints());
                        player.addturn(pil1, pil2, pil3);

                        pil1 = int.Parse(Console.ReadLine());

                        if (pil1 > 20 || pil1 < 0)
                        {
                            Console.WriteLine("Snälla bara mellan 0-20");
                            pil1--;
                        }
                        pil2 = int.Parse(Console.ReadLine());
                        if (pil2 > 20 || pil2 < 0)
                        {
                            Console.WriteLine("Snälla bara mellan 0-20");
                            pil2--;
                        }
                        pil3 = int.Parse(Console.ReadLine());
                        if (pil3 > 20 || pil3 < 0)
                        {
                            Console.WriteLine("Snälla bara mellan 0-20");
                            pil3--;
                        }

                        dart1= slump_tal.Next(0, 20);
                        dart2= slump_tal.Next(0,  20);
                        dart3= slump_tal.Next(0, 20);
                        Console.WriteLine("\nDet är datorns tur ");
                        Console.WriteLine("Pil 1: {0} Pil 2: {1} Pil 3: {2}\n-------------------------\n", dart1, dart2, dart3);

                        player.addturn(dart1, dart2, dart3);
                        antal_kast = player.Calculatepoints();

                    }

                  
                    foreach (var player in player_List)
                    {
                        player.printresultat();
                    }

                }
                while (antal_kast <= winner);
                foreach (var player in player_List)
                {
                    Console.Write("\nVi har vinnare " + player);

                }
            }

            class Player

            {
                private string name;
                private List<Turns> turn_list = new List<Turns>();

                public Player(string _name)
                {
                    name = _name;
                }
                public int Calculatepoints()
                {
                    int totalt = 0;
                    foreach (var turn in turn_list)
                    {
                        totalt = totalt + turn.getscore();
                    }
                    return totalt;
                }
                public void addturn(int tal1, int tal2, int tal3)
                {
                    turn_list.Add(new Turns(tal1, tal2, tal3));
                }
                public void printresultat()
                {
                    Console.WriteLine("\n Statisatik över varvs chansen för {0} : ", name);
                    Console.WriteLine("*****************************************************");

                    foreach (var turn in turn_list)
                    {
                        Console.WriteLine(turn);
                    }
                    Console.WriteLine("_________________________________________________________");
                    Console.WriteLine($"Den totla pöang för {name} är " + "{0}", Calculatepoints());
                }
                public override string ToString()
                {
                    return name;
                }
            }


            class Turns
            {
                private int varv1;
                private int varv2;
                private int varv3;

                public Turns(int _varv1, int _varv2, int _varv3)
                {
                    varv1 = _varv1;
                    varv2 = _varv2;
                    varv3 = _varv3;
                }

                public int getscore()
                {
                    int totalt;

                    totalt = varv1 + varv2 + varv3;
                    return totalt;
                }
            

                public override string ToString()
                {
                    return string.Format("kast1 är : [{0}], kast2 [{1}], 3 [{2}]", varv1, varv2, varv3 );
                }
            }

        }
    }
}

    

        
anders_k 237
Postad: 29 jan 2023 17:38 Redigerad: 29 jan 2023 17:41

Jag tycker du skall göra en enkel funktion som läser 0,20 från användaren, den kan se ut så här.

private int getPil()
{
  int n = 0;
  do
  {
    System.Console.Write("Ange värde [0,20] :");
    n=int.Parse(Console.ReadLine());
    if ( n < 0 || n > 20)
    {
      System.Console.WriteLine("Otillåtet värde, endast 0-20, försök igen");
    }
  }
  while (n < 0 && n > 20);
  return n;
}

Då blir kanske det lite lättare att läsa i din "playGame" funktion

foreach (var player in player_List)
{
  Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");

  pil1 = getPil();
  pil2 = getPil();
  pil3 = getPil();
  player.addturn(pil1, pil2, pil3);

  dart1= slump_tal.Next(0, 20);
  dart2= slump_tal.Next(0,  20);
  dart3= slump_tal.Next(0, 20);

  antal_kast = player.Calculatepoints();
}

du hade också en extra player.addturn precis innan du läser pil1,pil2 o pil3 därav konstiga värden

antal_kast låter konstigt, du kanske menar summa?

din while sats skall nog istället vara att du kollar varje spelares summa och sen datorns summa, för att kolla om någon har 301.  som du har det med antal_kast <= winner så kommer bara den sista spelarens score att kollas, och inte datorns heller.

Du skall väl också flytta ut datorns tur utanför player loopen, annars kommer datorn att få kasta pil varje gång en spelare kastar, det är väl inte meningen? 

Sen när du skriver ut saker på skärmen, bestäm dig för ett format att skriva ut variabler. jag personligen tycker detta är mer läsligt.

Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");


...


Console.WriteLine("\nDet är datorns tur ");
Console.WriteLine($"Pil 1: {dart1} Pil 2: {dart2} Pil 3: {dart3}");
Console.WriteLine("-------------------------");

Ahmad94 37
Postad: 29 jan 2023 19:53
anders_k skrev:

Jag tycker du skall göra en enkel funktion som läser 0,20 från användaren, den kan se ut så här.

private int getPil()
{
  int n = 0;
  do
  {
    System.Console.Write("Ange värde [0,20] :");
    n=int.Parse(Console.ReadLine());
    if ( n < 0 || n > 20)
    {
      System.Console.WriteLine("Otillåtet värde, endast 0-20, försök igen");
    }
  }
  while (n < 0 && n > 20);
  return n;
}

Då blir kanske det lite lättare att läsa i din "playGame" funktion

foreach (var player in player_List)
{
  Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");

  pil1 = getPil();
  pil2 = getPil();
  pil3 = getPil();
  player.addturn(pil1, pil2, pil3);

  dart1= slump_tal.Next(0, 20);
  dart2= slump_tal.Next(0,  20);
  dart3= slump_tal.Next(0, 20);

  antal_kast = player.Calculatepoints();
}

du hade också en extra player.addturn precis innan du läser pil1,pil2 o pil3 därav konstiga värden

antal_kast låter konstigt, du kanske menar summa?

din while sats skall nog istället vara att du kollar varje spelares summa och sen datorns summa, för att kolla om någon har 301.  som du har det med antal_kast <= winner så kommer bara den sista spelarens score att kollas, och inte datorns heller.

Du skall väl också flytta ut datorns tur utanför player loopen, annars kommer datorn att få kasta pil varje gång en spelare kastar, det är väl inte meningen? 

Sen när du skriver ut saker på skärmen, bestäm dig för ett format att skriva ut variabler. jag personligen tycker detta är mer läsligt.

Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");


...


Console.WriteLine("\nDet är datorns tur ");
Console.WriteLine($"Pil 1: {dart1} Pil 2: {dart2} Pil 3: {dart3}");
Console.WriteLine("-------------------------");

Tusen tack

jag ska försöka göra det i min kod

Ahmad94 37
Postad: 29 jan 2023 21:33
anders_k skrev:

Jag tycker du skall göra en enkel funktion som läser 0,20 från användaren, den kan se ut så här.

private int getPil()
{
  int n = 0;
  do
  {
    System.Console.Write("Ange värde [0,20] :");
    n=int.Parse(Console.ReadLine());
    if ( n < 0 || n > 20)
    {
      System.Console.WriteLine("Otillåtet värde, endast 0-20, försök igen");
    }
  }
  while (n < 0 && n > 20);
  return n;
}

Då blir kanske det lite lättare att läsa i din "playGame" funktion

foreach (var player in player_List)
{
  Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");

  pil1 = getPil();
  pil2 = getPil();
  pil3 = getPil();
  player.addturn(pil1, pil2, pil3);

  dart1= slump_tal.Next(0, 20);
  dart2= slump_tal.Next(0,  20);
  dart3= slump_tal.Next(0, 20);

  antal_kast = player.Calculatepoints();
}

du hade också en extra player.addturn precis innan du läser pil1,pil2 o pil3 därav konstiga värden

antal_kast låter konstigt, du kanske menar summa?

din while sats skall nog istället vara att du kollar varje spelares summa och sen datorns summa, för att kolla om någon har 301.  som du har det med antal_kast <= winner så kommer bara den sista spelarens score att kollas, och inte datorns heller.

Du skall väl också flytta ut datorns tur utanför player loopen, annars kommer datorn att få kasta pil varje gång en spelare kastar, det är väl inte meningen? 

Sen när du skriver ut saker på skärmen, bestäm dig för ett format att skriva ut variabler. jag personligen tycker detta är mer läsligt.

Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");


...


Console.WriteLine("\nDet är datorns tur ");
Console.WriteLine($"Pil 1: {dart1} Pil 2: {dart2} Pil 3: {dart3}");
Console.WriteLine("-------------------------");

jag har fixat koden, och det funkade bättre än förut, men när man  matar in ett tal mer 20 talet accepteras och räknas.

Till och med Ordet vinnare (while loop) synas inte fortfarande bara om det andra spelare vann. om du sagt while summa=>winner göe bara sista spelaren att vinna. Jag försökte lösa det men ...

Ahmad94 37
Postad: 29 jan 2023 21:36

koden ser ut så här nu 

namespace Project101
{
    internal class Class1
    {
        public static void Main(string[] args)

        {

            Game my_game = new Game();
            try
            {

                my_game.playgame();
            }
            catch
            {
                Main(args);
            }
            Console.ReadKey(true);

        }
        class Game
        {
            private List<Player> player_List = new List<Player>();

            public void addplayer(string name)


            {

                Player players = new Player(name);
                player_List.Add(players);

            }
            public void playgame()

            {

                int antal_spelare;
                int winner = 101;
                int summa = 3;
                Random slump_tal = new Random();
                int pil1 = 0;
                int pil2 = 0;
                int pil3 = 0;
                int dart1 = 0;
                int dart2 = 0;
                int dart3 = 0;

                Console.WriteLine("Vällkommen til dartspelet");
                Console.WriteLine("---------------------------------------------------------");
                Console.WriteLine("Hur många spelaren vill du ha ?");

                try
                {
                    antal_spelare = int.Parse(Console.ReadLine());
                }
                catch
                {
                    Console.WriteLine("Skriv in bara siffror");

                    throw;

                }
              

                    for (int i = 0; i < antal_spelare; i++)
                    {
                        Console.Write($"\nSkriv in namnet på spelare {i + 1}: ");
                        string name = Console.ReadLine();
                        addplayer(name);

                    }
                do
                {
                    foreach (var player in player_List)
                    {
                        Console.WriteLine($"\n Det är {player}'s tur , kasta tre gånger mellan 0-20");

                        pil1 = getPil();
                        pil2 = getPil();
                        pil3 = getPil();
                        player.addturn(pil1, pil2, pil3);

                        dart1 = slump_tal.Next(0, 20);
                        dart2 = slump_tal.Next(0, 20);
                        dart3 = slump_tal.Next(0, 20);

                        summa = player.Calculatepoints();
                    }
                    int getPil()
                    {
                        int n = 0;
                        do
                        {
                            System.Console.Write("Ange värde [0,20] :");
                            n = int.Parse(Console.ReadLine());
                            if (n < 0 || n > 20)
                            {
                                System.Console.WriteLine("Otillåtet värde, endast 0-20, försök igen");
                            }
                        }
                        while (n < 0 && n > 20);
                        
                     
                        return n;
                    }
                   



                    Console.WriteLine("\nDet är datorns tur ");
                    Console.WriteLine($"Pil 1: {dart1} Pil 2: {dart2} Pil 3: {dart3}");
                    Console.WriteLine("-------------------------");

                } while (summa <= winner);
               
                
              foreach (var player in player_List)
                   {
                        Console.WriteLine("\nVi har vinnare " + player);
                    Console.WriteLine("-----------------------------------------------------");
                    break;
                    
                     }
                foreach (var player in player_List)
                {
                    player.printresultat();
                }

                }
           
               }
            class Player

            {
                private string name;
                private List<Turns> turn_list = new List<Turns>();

                public Player(string _name)
                {
                    name = _name;
                }
                public int Calculatepoints()
                {
                    int totalt = 0;
                    foreach (var turn in turn_list)
                    {
                        totalt = totalt + turn.getscore();
                    }
                    return totalt;
                }
                public void addturn(int tal1, int tal2, int tal3)
                {
                    turn_list.Add(new Turns(tal1, tal2, tal3));
                }
                public void printresultat()
                {
                    Console.WriteLine("\n Statisatik över varvs chansen för {0} : ", name);
                    Console.WriteLine("*****************************************************");

                    foreach (var turn in turn_list)
                    {
                        Console.WriteLine(turn);
                    }
                    Console.WriteLine("_________________________________________________________");
                    Console.WriteLine($"Den totla pöang för {name} är " + "{0}", Calculatepoints());
                }
                public override string ToString()
                {
                    return name;
                }
            }


            class Turns
            {
                private int varv1;
                private int varv2;
                private int varv3;

                public Turns(int _varv1, int _varv2, int _varv3)
                {
                    varv1 = _varv1;
                    varv2 = _varv2;
                    varv3 = _varv3;
                }

                public int getscore()
                {
                    int totalt;

                    totalt = varv1 + varv2 + varv3;
                    return totalt;
                }
                //public int den_bästa()
                //{
                //    int best = varv1;
                //    if (varv2 < best)
                //        best = varv2;
                //    if (varv3 < best)
                //        best = varv3;

                //    return best;
                //}


                public override string ToString()
                {
                    return string.Format("kast1 är : [{0}], kast2 [{1}], 3 [{2}]", varv1, varv2, varv3);
                }
            }

        }
    }



    

        

anders_k 237
Postad: 29 jan 2023 22:39

först, flytta funktionen getPil() utanför din funktion playgame()

Ändra logiken så att efter alla spelare (inklusive datorn) har kastat sina pilar kollar du alla spelares summor och jämför med "winner" värdet. (du har definierat det som 101, men i texten är det 301)

Gör datorn också till en player så behöver du inte särbehandla den, bara lägg till en metod i Player som slumpar 0,20 sen istället för att läsa tangent bordet för den så slumpar du fram värden. 

 


Player winner_list = new List<Player>();
...

foreach (var player in player_list)
{
  if (player.Calculatepoints() > winner)
  {
    winner_list.add(player);
  }
}

...

while(winner_list.Empty());

Mer objekt orienterat vore om du ärvde från Player och gjorde en Computer class, där kan du lägga in slump metoden men annars kan du peta in den i Player, sen lägg till en Player på slutet av din lista som är datorn.

class Player {
...
// ropa denna istället getNumber för datorn 
public int addRandomTurn(Random slump_tal)
{   
  turn_list.Add(new Turns( slump_tal.Next(0, 20)
                           ,slump_tal.Next(0, 20)
                           ,slump_tal.Next(0, 20))
}
...
Ahmad94 37
Postad: 30 jan 2023 09:43
anders_k skrev:

först, flytta funktionen getPil() utanför din funktion playgame()

Ändra logiken så att efter alla spelare (inklusive datorn) har kastat sina pilar kollar du alla spelares summor och jämför med "winner" värdet. (du har definierat det som 101, men i texten är det 301)

Gör datorn också till en player så behöver du inte särbehandla den, bara lägg till en metod i Player som slumpar 0,20 sen istället för att läsa tangent bordet för den så slumpar du fram värden. 

 


Player winner_list = new List<Player>();
...

foreach (var player in player_list)
{
  if (player.Calculatepoints() > winner)
  {
    winner_list.add(player);
  }
}

...

while(winner_list.Empty());

Mer objekt orienterat vore om du ärvde från Player och gjorde en Computer class, där kan du lägga in slump metoden men annars kan du peta in den i Player, sen lägg till en Player på slutet av din lista som är datorn.

class Player {
...
// ropa denna istället getNumber för datorn 
public int addRandomTurn(Random slump_tal)
{   
  turn_list.Add(new Turns( slump_tal.Next(0, 20)
                           ,slump_tal.Next(0, 20)
                           ,slump_tal.Next(0, 20))
}
...

God morgon 

Jag flyttat getpil() funktion utanför playgame() funktion, men jag har försökt ändra i koden och bifoga Player winner_list = new list<player>();

men jag har bifogat den i flera ställe av koden , men det funkade inte , till och med har skapat en klass och metod för detta, men det inte funkat. och public int addturn (new Turns (Random slump_tal) behöver retunera värde . Tusen tack för din hjälp 

anders_k 237
Postad: 30 jan 2023 17:33 Redigerad: 30 jan 2023 17:35

ja det skall förstås vara

void addRandomTurn(Random slump_tal)
{
   turn_list.Add(new Turns( slump_tal.Next(0, 20)
                           ,slump_tal.Next(0, 20)
                           ,slump_tal.Next(0, 20))
}

Jag tänkte att Player kunde se ut så här.

class Player
{
  private string _name;
  private List<Turns> turn_list = new List<Turns>();

  public Player(string name)
  {
    _name = name;
  }
  public int Calculatepoints()
  {
    int totalt = 0;
    foreach (var turn in turn_list)
    {
      totalt = totalt + turn.getscore();
    }
    return totalt;
  }
  public void addturn(Random slumpTal)
  {
    turn_list.Add(new Turns(slumpTal.next_
  }
  public void addturn(int tal1, int tal2, int tal3)
  {
    turn_list.Add(new Turns(tal1, tal2, tal3));
  }
  public 
  public void printresultat()
  {
    Console.WriteLine($"\n Statistik över varvs chansen för {_name} : ");
    Console.WriteLine("*****************************************************");

    foreach (var turn in turn_list)
    {
      Console.WriteLine(turn);
    }

    Console.WriteLine("_________________________________________________________");
    Console.WriteLine($"Den totla pöang för {name} är " + "{0}", Calculatepoints());
  }
  public override string ToString()
  {
    return _name;
  }
}

Sen när du lägger in players i din player list lägger ytterligare till en som är datorn. (Normalt hade man ärvt från Player och gjort en Computer klass men vi behöver inte göra det så komplicerat)

När du sedan kör igenom listan av players och kommer till den med namnet Dator eller något så ropar to addTurn(slump_tal) istället för addTurn(pil1,pil2,pil3)

Därefter kollar du vad alla spelarna har genoma ropa din Calculatepoints() och jämför med winner, om de har mer eller lika kommer de med i winner_list.

 

Svara
Close