Just nu i M3-nätverket
Jump to content

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


Zach-IT

Recommended Posts

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();
 
        }
    }
}
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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) :)

Link to comment
Share on other sites

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();
        }
    }
}
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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:

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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:

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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:

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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. ^_^

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...