6 svar
522 visningar
Huggeax 5
Postad: 6 okt 2021 17:34

Nummergissnings spel.

Jag är ganska ny till programmering och c#. Jag håller på att göra ett program där användaren ska gissa ett nummer mellan 1 - 100. Man ska ha 5 gissningar på sig. Och om man gissar fel så ska antalet gissningar minska och om man använt alla sina gissningar så ska spelet sluta. Om man gissar rätt så ska spelet fortsätta tills försöken tagit slut.

 

Jag har testat att inuti Consolen att lägga in integern - 1 för första försöket  och sedan ska det vara -2 på andra men det blir error "Error CS0019 Operator '-' cannot be applied to operands of type 'string' and 'int' " och med andra ord så vill jag få försöken att minska för varje fel man gissat och tills det tar slut på försök. Det jag även undrar är hur ska jag få ihop så att om man ska fortsätta om om man gissat fel eller om man gissat rätt. Jag har använt mig av en do-While loop men man ska även kunna använda en while-loop, vet ej vilken av de som är bäst i denna situation.

Om det är något otydligt eller så fråga bara så kan jag försöka att förklara bättre.

Här är min kod hittills:

using System;

namespace Numberguessinggame
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int nummer = rnd.Next(1, 100);
            int antalFörsök = 5;
            bool rätt = false;

            do
            {

                Console.Write("Gissa ett nummer mellan 1 och hundra. Du har " + antalFörsök + " gissningar på dig.");
                string s = Console.ReadLine();

                int i = int.Parse(s);
                if (i > nummer)
                {
                    Console.WriteLine("För högt! gissa lägre");
                    Console.WriteLine("Du har" + antalFörsök + " försök kvar");
                }
                else if (i < nummer)
                {
                    Console.WriteLine("För lågt för sök något högre, du har " + antalFörsök + " försök kvar") ;

                }
                else if (i == nummer)
                {
                    Console.WriteLine("Du klarade det! På " + antalFörsök + "försök bra jobbat");
                    
                }
                else if (antalFörsök == 0)
                    Console.WriteLine("Tack för att du spelade men du har gjort för många försök");
            }  while (rätt = false);

        }
    }
}

Laguna Online 30484
Postad: 6 okt 2021 17:49

Jag ser inget '-' i koden, så vad syftar felmeddelandet på? Vilken rad handlar det om?

Huggeax 5
Postad: 6 okt 2021 18:09
Laguna skrev:

Jag ser inget '-' i koden, så vad syftar felmeddelandet på? Vilken rad handlar det om?

Mitt fel, jag borde ha lagt in det men det, som jag menade var att i Console.Write( )och Console.WriteLine() där så har jag text och jag vill även ha med hur många försök användaren har kvar. Min tanke då var att jag tar standard integern (antalFörsök) och kör - 1 när man gissat en gång och -2 när man kört 2 osv. 

Laguna Online 30484
Postad: 6 okt 2021 18:48

Det är svårt att rätta koden när man inte ser den. 

Huggeax 5
Postad: 6 okt 2021 18:52
Laguna skrev:

Det är svårt att rätta koden när man inte ser den. 

Ok här är koden om jag lägger till det som blir error:

using System;

namespace Numberguessinggame
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int nummer = rnd.Next(1, 100);
            int antalFörsök = 5;
            bool rätt = false;

            do
            {

                Console.Write("Gissa ett nummer mellan 1 och hundra. Du har " + antalFörsök + " gissningar på dig.");
                string s = Console.ReadLine();

                int i = int.Parse(s);
                if (i > nummer)
                {
                    Console.WriteLine("För högt! gissa lägre");
                    Console.WriteLine("Du har" + antalFörsök - 1 + " försök kvar");
                }
                else if (i < nummer)
                {
                    Console.WriteLine("För lågt för sök något högre, du har " + antalFörsök -2 + " försök kvar") ;

                }
                else if (i == nummer)
                {
                    Console.WriteLine("Du klarade det! På " + antalFörsök + "försök bra jobbat");
                    
                }
                else if (antalFörsök == 0)
                    Console.WriteLine("Tack för att du spelade men du har gjort för många försök");
            }  while (rätt = false);

        }
    }
}

Laguna Online 30484
Postad: 6 okt 2021 19:03

Nu behöver man kunna mer C# än jag kan, men prova att sätta parenteser runt antalFörsök-1.

Smörbulten 8
Postad: 7 okt 2021 12:43 Redigerad: 7 okt 2021 12:51

Felet beror på att du inte kan göra beräkningen direkt i strängen. Antingen gör du beräkningen utanför strängen eller så gör du beräkningen inne i strängen med hjälp av string interpolation eller composite formatting.

Värt att notera är att du inte tilldelar ett nytt värde till antalFörsök genom att subtrahera på det här sättet inne i strängen, du visar bara upp "aktuella värdet minus 1".

 

// Exempel 1. Gör beräkningen utanför och lägg i en ny variabel som du använder.
if (i > nummer)
{
    int antalFörsökKvar = antalFörsök - 1;
    Console.WriteLine("För högt! gissa lägre");
    Console.WriteLine("Du har " + antalFörsökKvar + " försök kvar");
}

// Exempel 2 string interpolation. Lägger på ett dollartecken innan strängen och gör beräkningen inom måsvingar. Den här lösningen föredrar jag. Tycker den är mest läsbar.
if (i > nummer)
{
    Console.WriteLine("För högt! gissa lägre");
    Console.WriteLine($"Du har {antalFörsök - 1} försök kvar");
}

// Exempel 3 composite formatting. Du skriver ett index inne i strängen inom måsvingar och hänvisar till beräkningen direkt efter. 
if (i > nummer)
{
    Console.WriteLine("För högt! gissa lägre");
    Console.WriteLine("Du har {0} försök kvar", antalFörsök - 1);
}

Mer info hittar du i https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated

Svara
Close