Permalänk
Medlem

Hjälp med C#, Hangman

Tack för svar.

(kan tas bort)

Visa signatur

Chassi: CORSAIR CARBIDE 330R
Modekort: GIGABYTE GA-Z87-D3
Processor: INTEL CORE i7 4770K 3,5GHz
Grafik: GEFORCE GTX 780 WINDFORCE (3GB)
Minne: CORSAIR VENGANCE (3x4GB)

Permalänk

Jag har ingen aning om vad som går fel men du kan ju for loopa genom alla bokstäver om du inte hittar felet.

Visa signatur

AMD Ryzen 5 3600 | Sapphire R9 280

Permalänk
Medlem

Nu kan jag inte C#, men skriver du inte över din variabel input varje gång du matar in en bokstav.

Permalänk
Avstängd

För mig funkar spelet eller är det något som jag har missat?

Visa signatur

Server: två Intel Xeon E5-2690v2 och 128 GB ram

Min server dator: #15149189 http://i.imgur.com/BKxOmUP.jpg
zxhosting: https://www.facebook.com/pages/Zxhosting/1476037889350815

Permalänk
Medlem

@zxhosting:

Använda bokstäver visar bara den senaste hela tiden.

Problemet är att du skriver över din input variabel varje gång användaren matar in en bokstav. Skapa en lista<string> som du lägger in bokstäverna i och skriv sedan ut den.

var lettersUsed = new List<string>(); while (!won && lives > 0) { Console.WriteLine("\n\tGissningar kvar: " + lives); Console.WriteLine("\n\tAktuellt ord: " + displayToPlayer); Console.Write("\n\tAnge din gissning: "); input = Console.ReadLine().ToUpper(); guess = input[0]; lettersUsed.Add(guess); Console.WriteLine("\n\tAnvända bokstäver: {0}", lettersUsed.ToString()); // vet inte om du behöver overrida ToString för att få det snyggt. Men loopa igenom eller använd Linq annars.

Permalänk
Medlem
Skrivet av joss:

@zxhosting:

Använda bokstäver visar bara den senaste hela tiden.

Problemet är att du skriver över din input variabel varje gång användaren matar in en bokstav. Skapa en lista<string> som du lägger in bokstäverna i och skriv sedan ut den.

var lettersUsed = new List<string>(); while (!won && lives > 0) { Console.WriteLine("\n\tGissningar kvar: " + lives); Console.WriteLine("\n\tAktuellt ord: " + displayToPlayer); Console.Write("\n\tAnge din gissning: "); input = Console.ReadLine().ToUpper(); guess = input[0]; lettersUsed.Add(guess); Console.WriteLine("\n\tAnvända bokstäver: {0}", lettersUsed.ToString()); // vet inte om du behöver overrida ToString för att få det snyggt. Men loopa igenom eller använd Linq annars.

Jag får följande error:

lettersUsed.Add(guess);

Error 4 The best overloaded method match for 'System.Collections.Generic.List<string>.Add(string)' has some invalid arguments C:\Users\brodan\Desktop\Niklas_Hangman\HangCode.cs 155 17 Niklas_Hangman

Visa signatur

Chassi: CORSAIR CARBIDE 330R
Modekort: GIGABYTE GA-Z87-D3
Processor: INTEL CORE i7 4770K 3,5GHz
Grafik: GEFORCE GTX 780 WINDFORCE (3GB)
Minne: CORSAIR VENGANCE (3x4GB)

Permalänk
Medlem
Skrivet av brodan:

Jag får följande error:

lettersUsed.Add(guess);

Error 4 The best overloaded method match for 'System.Collections.Generic.List<string>.Add(string)' has some invalid arguments C:\Users\brodan\Desktop\Niklas_Hangman\HangCode.cs 155 17 Niklas_Hangman

Ja, du försöker stoppa en Char i en List med String.
Det är ungefär som den här man hade som barn:

Du försöker stoppa kuben i det runda hålet.

Sen orignalfrågan visar ju på att du inte har nån större förståelse för koden som du cut n' pejstat ihop?
Att förvänta sig att en variabel man skriver över varje loop (som för övrige även är en char ) på nått magiskt sätt ska kunna innehålla en historik av alla använda bokstäver?

Jag hoppas innerligt att detta är nån sorts hobbyprojekt och inte en skoluppgift.

Dagens whine: check!

Permalänk
Medlem

@brodan:

Jag har inte testat din kod, gav bara ett snabbt förslag. Men det är bara att kolla på felmeddelanden, jag förmodar även att Visual Studio ger dig feedback om att det inte är möjligt att stoppa in en char i en List<string>...Så gör om din char till en string.

Permalänk

Kan man inte likagärna ha en char[] lettersUsed = new char[WORD_LENGTH] ;

vid gissning: lettersUsed[gissning] = bokstaven man gissade på..

EDIT: Är man ny är nog en lista som sköter sig själv bättre. Då passar det som ovanstående skrev att ha en ArrayList<Char> chars som man bara anropar insert(char) på.

EDIT2: eller bara ändra anropet till lettersUsed(guess.toString()) i det ursprungliga lösningsförslaget , den metoden lär finnas i C# ? har aldrig själv skrivit C# så bara spitballar här. :>

Visa signatur

i5 2500K @ 4.2Ghz | 8GB Corsair Vengeance 1600Mhz | Asus R9 290X DirectCU II 4GB @ 1060/5500