Just nu i M3-nätverket
Gå till innehåll

Behöver hjälp med Hänga Gumman C#!


Zach-IT

Rekommendera Poster

Hej!

Jag behöver lite hjälp med spelet Hänga Gumman. Programmet nästan färdig och det jag behöver hjälp med är:

* Lägga till ord!

 

Tack ^_^ !

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication6
{
    class Projektarbete
    {
        static void Main(string[] args)
        {
            Random random = new Random((int)DateTime.Now.Ticks);
 
            string[] gissat = { "projektarbete" };
 
 
 
 
            Console.WriteLine("                         ************************    ");
            Console.WriteLine("                         *    HÄNGA GUMMA!      *    ");
            Console.WriteLine("                         ************************    ");
 
            Console.WriteLine("\n1 Lägg till ord ");
            Console.WriteLine("\n2 Lista alla ord ");
            Console.WriteLine("\n3 Spela ");
            Console.WriteLine("\n4 Avsluta ");
        Start:
            Console.WriteLine("\n Välj 1-4:");
 
            String välja = Convert.ToString(Console.ReadLine());
            Console.WriteLine("\n\n");
            // Nu har vi lagt menyLista
 
 
            switch (välja)
            {
                case "1":
                    Console.WriteLine(" Lägg till ord ");
 
                    break;
                case "2":
                    Console.WriteLine(" Lista alla ord ");
 
                    Console.WriteLine();
                    string ord = Convert.ToString(Console.ReadLine());
                    
                        List<string> list = new List<string>();
                   
                    break;
 
                case "3":
                    Console.WriteLine(" Spela ");
                    {
                        Console.WriteLine(" Du får två försök! ");
                    }
                    break;
                case "4":
 
                    Console.WriteLine(" Avsluta ");
                    goto Avsluta;
 
                default:
 
                    goto Start;
 
 
            }
 
 
       
            
 
 
            string ordAttGissa = gissat[random.Next(0, gissat.Length)];
            string ordAttGissaUppercase = ordAttGissa.ToUpper();
 
            StringBuilder displayToPlayer = new StringBuilder(ordAttGissa.Length);
            for (int i = 0; i < ordAttGissa.Length; i++)
                displayToPlayer.Append('_');
 
            List<char> correctGuesses = new List<char>();
            List<char> incorrectGuesses = new List<char>();
 
            int chans = 2;
            bool van = false;
            int upptäktabokstav = 0;
 
            string input;
            char gissa;
 
            while (!van && chans > 0)
            {
                Console.Write("Gissa ett ord: ");
 
                input = Console.ReadLine().ToUpper();
                gissa = input[0];
 
 
            
 
 
                if (correctGuesses.Contains(gissa))
                {
                    Console.WriteLine("Du har redan försökt '{0}', och det var rätt!", gissa);
                    continue;
                }
                else if (incorrectGuesses.Contains(gissa))
                {
                    Console.WriteLine("Du har redan försökt '{0}', och det var fel!", gissa);
                    continue;
                }
 
                if (ordAttGissaUppercase.Contains(gissa))
                {
                    correctGuesses.Add(gissa);
 
                    for (int i = 0; i < ordAttGissa.Length; i++)
                    {
                        if (ordAttGissaUppercase == gissa)
                        {
                            displayToPlayer = ordAttGissa;
                            upptäktabokstav++;
                        }
                    }
 
                    if (upptäktabokstav == ordAttGissa.Length)
                        van = true;
                }
                else
                {
                    incorrectGuesses.Add(gissa);
 
                    Console.WriteLine("Nope, det är ingent '{0}' i det!", gissa);
                    chans--;
                }
 
                Console.WriteLine(displayToPlayer.ToString());
            }
 
            if (van)
                Console.WriteLine("Du van!");
            else
                Console.WriteLine("Vad är det här för spel! Gissat ord var '{0}'", ordAttGissa);
        Avsluta:
            Console.Write("\nTryck på ENTER för att avsluta...");
            Console.ReadLine();
 
        }
    }
}
Länk till kommentar
Dela på andra webbplatser

Gör om strängarrayen gissat till en List<string>. Då får du en metod som heter Add som du använder för att lägga till ord.

 

Får man i övrigt komma med lite konstruktiv kritik?

 

C# är ett objektorienterat språk, så istället för massa goto som jag måste erkänna att jag inte ens visste fanns i språket, använd metoder och properties på din klass eller flera klasser. Sen är det kutym i Sverige att vi skriver kod på engelska, åtminstone så brukar alla jag jobbat med göra så, så du vill kanske överväga att översätta koden.

 

Inga krav, det viktigaste är naturligtvis att koden fungerar, men om du vill visa koden för en eventuell arbetsgivare så kan det löna sig att hålla sig till de vanligaste lösningarna.

Länk till kommentar
Dela på andra webbplatser

Gör om strängarrayen gissat till en List<string>. Då får du en metod som heter Add som du använder för att lägga till ord.

 

Får man i övrigt komma med lite konstruktiv kritik?

 

C# är ett objektorienterat språk, så istället för massa goto som jag måste erkänna att jag inte ens visste fanns i språket, använd metoder och properties på din klass eller flera klasser. Sen är det kutym i Sverige att vi skriver kod på engelska, åtminstone så brukar alla jag jobbat med göra så, så du vill kanske överväga att översätta koden.

 

Inga krav, det viktigaste är naturligtvis att koden fungerar, men om du vill visa koden för en eventuell arbetsgivare så kan det löna sig att hålla sig till de vanligaste lösningarna.

Tack för att du kommenterade min fråga :)

jag försökte lösa den med ArrayList men gick inte :huh:

kan du visa mig hur du tänkte med ArrayList, Tack :D

 

Du har rätt vissa koder är på engelska och det ska vore bättre om det är på svenska :) , men just den (goto) kan inte skivas till (gåtill) :)

Länk till kommentar
Dela på andra webbplatser

Du har rätt vissa koder är på engelska och det ska vore bättre om det är på svenska :) , men just den (goto) kan inte skivas till (gåtill) :)

Nej tvärt om, eftersom du inte kan skriva nyckelord på svenska så borde du skriva allt annat på engelska.

 

Här är ett exempel på hur en komplett lösning kan se ut. Allt är på engelska och vi använder metoder och properties istället för goto. Du måste naturligtvis inte plagiera om du inte vill, men detta är hur jag brukar skriva min kod.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace hangman
{
    static class Program
    {
        static List<string> Words { get; set; }
        static Random Rnd { get; set; }

        static Program()
        {
            Words = new List<string>();
            Rnd = new Random();
        }
        static void Main(string[] args)
        {
            ShowMenu();
        }

        private static void ShowMenu()
        {
            ShowMenu("");
        }
        private static void ShowMenu(string msg)
        {
            Console.Clear();
            Console.WriteLine("                         ************************    ");
            Console.WriteLine("                         *    HÄNGA GUMMA!      *    ");
            Console.WriteLine("                         ************************    ");
            if(!String.IsNullOrEmpty(msg))
            {
                Console.WriteLine(msg);
            }
            Console.WriteLine("\n1 Lägg till ord ");
            Console.WriteLine("\n2 Lista alla ord ");
            Console.WriteLine("\n3 Spela ");
            Console.WriteLine("\n4 Avsluta ");

            var choice = Console.ReadKey();
            switch(choice.Key)
            {
                case ConsoleKey.D1:
                    AddWord();
                    break;
                case ConsoleKey.D2:
                    ListWords();
                    break;
                case ConsoleKey.D3:
                    PlayGame();
                    break;
                case ConsoleKey.D4:
                    break;
            }
        }

        private static void PlayGame()
        {
            if(Words.Count == 0)
                ShowMenu("Inga ord finns i ordboken");
            else
            {
                Console.WriteLine("Spela");
                Console.WriteLine("Du får två försök");
                var wordToGuess = Words[Rnd.Next(0, Words.Count)].ToUpper();
                var sb = new StringBuilder(wordToGuess.Length);
                for (var i = 0; i < wordToGuess.Length; i++)
                    sb.Append("_");
                var correctGuesses = new List<char>();
                var incorrectGuesses = new List<char>();

                bool won = false;
                var tries = 2;
                char guess;
                var guessedLetters = 0;
                while(!won || tries > 0)
                {
                    Console.WriteLine("Gissa ett ord");
                    guess = Console.ReadKey().KeyChar;
                    if(correctGuesses.Contains(guess))
                    {
                        Console.WriteLine("Du har redan försökt {0} och det var rätt", guess);
                        continue;
                    }
                    if(incorrectGuesses.Contains(guess))
                    {
                        Console.WriteLine("Du har redan försökt {0} och det var fel", guess);
                        continue;
                    }
                    if(wordToGuess.Contains(Char.ToUpper(guess)))
                    {
                        correctGuesses.Add(guess);
                        var idx = wordToGuess.IndexOf(Char.ToUpper(guess));
                        sb[idx] = guess;
                        guessedLetters++;

                        if (guessedLetters == wordToGuess.Length)
                        {
                            won = true;
                            break;
                        }
                    }
                    else
                    {
                        incorrectGuesses.Add(guess);
                        tries--;
                    }

                    Console.WriteLine(sb.ToString());
                }
                if(won)
                {
                    Console.WriteLine("Du vann!");
                }
                else
                {
                    Console.WriteLine("Du vann inte");
                }

            }
        }

        private static void ListWords()
        {
            Console.WriteLine("Alla ord i ordlistan");
            foreach(var word in Words)
            {
                Console.WriteLine(word);
            }
            ShowMenu();
        }

        private static void AddWord()
        {
            Console.WriteLine("Lägg till ord:");
            var word = Console.ReadLine();
            Words.Add(word);
            ShowMenu();
        }
    }
}
Länk till kommentar
Dela på andra webbplatser

Fungerar för mig. Kan det vara så att du använder siffrorna på numpad? För jag kollar bara på siffrorna högst upp på t-bordet.

Länk till kommentar
Dela på andra webbplatser

Fungerar för mig. Kan det vara så att du använder siffrorna på numpad? För jag kollar bara på siffrorna högst upp på t-bordet.

Hej igen!

ditt hjälp betyder mycket för mig. programmet fungerar men vill inte läsa båda

(lägg till ord) && (lista alla ord). :huh:

Länk till kommentar
Dela på andra webbplatser

Aha!

Felet med meny två är att först så skrivs orden ut på skärm, sen visas menyn igen och då töms allt som skrivits på skärm tidigare. Så det är en "bugg".

 

Men lägg till ord verkar fungera för mig. Trycker du enter efter inmatning i menyn? För det behövs inte räcker med siffra direkt.

Länk till kommentar
Dela på andra webbplatser

Aha!

Felet med meny två är att först så skrivs orden ut på skärm, sen visas menyn igen och då töms allt som skrivits på skärm tidigare. Så det är en "bugg".

 

Men lägg till ord verkar fungera för mig. Trycker du enter efter inmatning i menyn? För det behövs inte räcker med siffra direkt.

efter inmatningen så visser den ingenting och efter ENTER avslutar programmet med HEJ DÅ. :huh:

Länk till kommentar
Dela på andra webbplatser

hej då? I mitt exempel så står det inte hej då någonstans. Så du kör nog något annat projekt i så fall.

Länk till kommentar
Dela på andra webbplatser

hej då? I mitt exempel så står det inte hej då någonstans. Så du kör nog något annat projekt i så fall.

Den kör tillsammans med avslutnings rad och sen avslutar programmet. om du kollar på sista rad när efter att den krävs av dig press på ENTER för att avsluta då dyker  hej då upp tillsammans och sen avslutas programmet :huh:

Länk till kommentar
Dela på andra webbplatser

Den kör tillsammans med avslutnings rad och sen avslutar programmet. om du kollar på sista rad när efter att den krävs av dig press på ENTER för att avsluta då dyker  hej då upp tillsammans och sen avslutas programmet :huh:

Du .M, skulle jag kunna prata med dig via privat email, jag behöver verkligen din hjälp innan inlämningen?

 

Tack så mycket!

Länk till kommentar
Dela på andra webbplatser

Jag hjälper gärna till, men enbart publikt i detta forum. Jag accepterar inte PM eller e-brev. Det finns fler än jag som pysslar med C# i det här forumet (tror jag) och rätt som det är så vill dom också bidra med kunskap. Och någon kan mer än jag kring sånt här för det var länge sedan jag pysslade med ett konsolprogram. Jag bygger webbsidor för det mesta nu för tiden nämligen.

 

Jag vet inte exakt hur din programkod ser ut nu för tiden, jag utgår ifrån att du inte suttit och stirrat in i en vägg hela helgen, jag ägnade till exempel min helg åt att försöka implementera en algoritm för procedurellt genererade spelvärlad enligt pseudo slumptalsgenerator och perlin noise. Det gick skitdåligt.

 

Hur ser din programkod ut för menyn just nu? För du skriver att du har problem med samtliga menyval förutom 4. Så posta gärna din kod som den ser ut just nu så tittar vi på den.

Länk till kommentar
Dela på andra webbplatser

hej!

ursäkta mig att jag frågade dig att jag ville kontakta dig via privat,  jag har ingen som kan  hjälp i närheten och det är bara Eforum som gör det och jag är väldigt tacksam för det.

 

först önskar jag dig lycka till med spelet.. :thumbsup:

sen koden som jag fick av dig läser meny val 1 men kan inte jämföra inmatade ord med hemlig ord.

och för meny val 3 varken läser inmatade eller jämföra inmatade med hemlig ord. :(

 

tack för din kommentar 

Länk till kommentar
Dela på andra webbplatser

Vilken version av Visual Studio använder du? Du kanske har en annan version än jag och då är det något som fungerar annorlunda.

Länk till kommentar
Dela på andra webbplatser

nej, jag brukar köra programmet genom att trycka F7 för att kompilera programmet och sen F5 för att exekvera den, annars är jag bara nybörjare vännen. ^_^

Länk till kommentar
Dela på andra webbplatser

F5 är Start debugger i Visual Studio. Ställ markören på Main metoden till exempel och tryck F9. Då ska du få en röd fläck vid sidan om raden. Tryck F5 så startas debuggern. F10 stegar framåt F11 stegar in i metoder.

 

Och nu kan du även peka på variabler för att se vilket värde dom fått. Så stega fram till switch satsen för menyn och se vad choice.Key har fått för värde. Stega sedan vidare och se vart i switchen den tar vägen.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...