Entwickler-Ecke
Sonstiges (.NET) - Mastermind Konsolenanwendung
hlwgole - Do 19.09.19 11:31
Titel: Mastermind Konsolenanwendung
Moin!
Ich habe vor ca. 1 Monat mit dem Programmieren begonnen & hatte davor noch keinerlei Ahnung.
Ich weiß das ich in dem Code den ich gleich präsentiere deutlich leichtere Wege hätte gehen können.
Aber wir sollen erstmal mit dem Arbeiten was wir in der Schule beigebracht bekommen haben.
[MEIN PROBLEM]
Es hapert bei mir in der Ausgabe, wenn es bei Mastermind darum geht:
Richtige Position & Richtige Farbe = 0
Richtige Farbe & Falsche Position = x
Leider gibt er mir manches doppelt aus und total durcheinander. Habe auch schon echt alles Versucht, aber es wurde nur noch komplizierter.
Vielleicht kann mir ja hier jemand etwas behilflich sein. : )
Meine Eingabe Methode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79:
| public static void SpielerEingabe(string[] zufallsFarben) { Console.Clear(); Console.WriteLine("Geben Sie 4 Zahlen ein für die jeweiligen Farben:\n"); Console.WriteLine("1 = Gelb\n2 = Blau\n3 = Rot\n4 = Lila\n5 = Weiß\n6 = Grau\n7 = Grün\n8 = Orange\n");
int[] eingabeZahlen = new int[4]; string[] eingabeFarben = new string[4]; for (int counter = 0; counter < 4; counter++) { string eingabe = Console.ReadLine();
int zahl = 0;
if (int.TryParse(eingabe, out zahl)) { eingabeZahlen[counter] = zahl; } switch (eingabeZahlen[counter]) { case 1: eingabeFarben[counter] = "Gelb"; Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("= Gelb\n"); Console.ResetColor(); break; case 2: eingabeFarben[counter] = "Blau"; Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("= Blau\n"); Console.ResetColor(); break; case 3: eingabeFarben[counter] = "Rot"; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("= Rot\n"); Console.ResetColor(); break; case 4: eingabeFarben[counter] = "Lila"; Console.ForegroundColor = ConsoleColor.DarkMagenta; Console.WriteLine("= Lila\n"); Console.ResetColor(); break; case 5: eingabeFarben[counter] = "Weiß"; Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("= Weiß\n"); Console.ResetColor(); break; case 6: eingabeFarben[counter] = "Grau"; Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("= Grau\n"); Console.ResetColor(); break; case 7: eingabeFarben[counter] = "Grün"; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("= Grün\n"); Console.ResetColor(); break; case 8: eingabeFarben[counter] = "Orange"; Console.ForegroundColor = ConsoleColor.DarkYellow; Console.WriteLine("= Orange\n"); Console.ResetColor(); break; default: Console.Write(""); Console.WriteLine("Eingabe Parameter inkorrekt!\n"); Console.ReadLine(); SpielerEingabe(zufallsFarben); break; } } EingabeMitErgebnisVergleichen(zufallsFarben, eingabeFarben); } |
und das ist die Vergleichsmethode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| public static void EingabeMitErgebnisVergleichen(string[] zufallsfarben, string[] eingabefarben) { for (int counter = 0; counter < 4; counter++) { if (eingabefarben[counter] == zufallsfarben[0]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Richtige Position = " + eingabefarben[0]); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("O\n"); Console.ResetColor(); } else if (eingabefarben[counter] == zufallsfarben[1] || eingabefarben[counter] == zufallsfarben[2] || eingabefarben[counter] == zufallsfarben[3]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Falsche Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("X\n"); Console.ResetColor(); } if (eingabefarben[counter] == zufallsfarben[1]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Richtige Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("O\n"); Console.ResetColor(); } else if (eingabefarben[counter] == zufallsfarben[0] || eingabefarben[counter] == zufallsfarben[2] || eingabefarben[counter] == zufallsfarben[3]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Falsche Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("X\n"); Console.ResetColor(); } if (eingabefarben[counter] == zufallsfarben[2]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Richtige Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("O\n"); Console.ResetColor();
} else if (eingabefarben[counter] == zufallsfarben[0] || eingabefarben[counter] == zufallsfarben[1] || eingabefarben[counter] == zufallsfarben[3]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Falsche Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("X\n"); Console.ResetColor(); } if (eingabefarben[counter] == zufallsfarben[3]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Richtige Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("O\n"); Console.ResetColor(); } else if (eingabefarben[counter] == zufallsfarben[0] || eingabefarben[counter] == zufallsfarben[1] || eingabefarben[counter] == zufallsfarben[2]) { Console.WriteLine("___________________________"); Console.WriteLine("Richtige Farbe | Falsche Position = " + eingabefarben[counter]); Console.ForegroundColor = ConsoleColor.DarkGray; Console.WriteLine("X\n"); Console.ResetColor(); } else { Console.Write(""); Console.WriteLine("___________________________"); Console.WriteLine("Leider kein Treffefer gelandet.\n"); } } } |
Moderiert von Th69: Code- durch C#-Tags ersetztModeriert von Th69: Topic aus WinForms verschoben am Do 19.09.2019 um 12:55
Th69 - Do 19.09.19 12:47
Hallo und :welcome:
du müßtest doch bisher 16 (anstatt nur 4) Kreuze bzw. Kreise angezeigt bekommen?!
Überlege dir bei deiner Vergleichsmethode noch mal die if-Abfragen in Verbindung mit dem Zähler counter der Schleife.
Oder anders gefragt: Warum hast du 4 mal ein if-else-Konstrukt dort?
hlwgole - Do 19.09.19 13:34
Hallo Th69,
ich hab dort 4 mal ein if-else, weil ich eigentlich dachte, wenn der Rote Pin kein Treffer hat das er dann somit die anderen Position vergleicht die halt die richtige farbe haben, aber eine andere Position. Aber ich habe mir schon gedacht das dort irgendwas falsch ist in diesem Konstrukt.
Th69 - Do 19.09.19 14:04
Wie wäre es mit
C#-Quelltext
1:
| if (eingabefarben[counter] == zufallsfarben[counter]) |
?
Und die restlichen
if-else-Konstrukte dann löschen.
Den
else-Teil überlasse ich dir dann als Restaufgabe. ;-)
hlwgole - Do 19.09.19 14:50
Okay cool danke!
Eine weitere Frage hätte ich noch.. mir fehlt noch die versuchsanzahl auf 3 zu bestimmen, und eigentlich müsste ich es ja in die Spielereingabe einbauen, aber egal wie ich es wende und drehe es funktioniert ebenfalls nicht. :s
Th69 - Fr 20.09.19 10:03
Du meinst die Anzahl der maximalen Versuche auf 3 zu begrenzen (ich kenne es mit mehr, laut
Mastermind (Spiel) [
https://de.wikipedia.org/wiki/Mastermind_(Spiel)] sind es original sogar 12).
Dann würde ich eine zusätzliche Methode schreiben, welche dann intern
SpielerEingabe aufruft - dazu solltest du dann noch ermitteln (z.B.
bool als Rückgabewert, ob der Spieler korrekt alle 4 Farben erraten hat).
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!