Autor Beitrag
hlwgole
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 19.09.19 11:31 
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:
ausblenden volle Höhe 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:
ausblenden volle Höhe 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 user profile iconTh69: Code- durch C#-Tags ersetzt
Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Do 19.09.2019 um 12:55
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 19.09.19 14:04 
Wie wäre es mit
ausblenden 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. ;-)


Zuletzt bearbeitet von Th69 am Do 19.09.19 17:15, insgesamt 1-mal bearbeitet
hlwgole Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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) 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).