Ich habe momentan die Aufgabe (leider relativ eilig, Abgabe ist morgen 23:59) in C# ein „Vier Gewinnt“ zu programmieren.
An sich läuft auch alles rund, nur die Kontrolle, ob jemand gewonnen hat will nicht so recht. funktionieren. Das Spiel läuft weiter obwohl schon längst jemand gewonnen hat.
Das Main Programm ist relativ kurz:
bool check = false;
int spieler = 1;
while (check == false)
{
spiel.Set_stone(spieler);
check = spiel.Check();
spieler++;
}```
Die Klasse "Vier_gewinnt" enthält also unter anderem die Methode "Check", die relativ lang ist. im wesentlichen läuft eine Doppelschleife, die das 7x7 Array durchläuft welches das Spielfeld repräsentiert und darin überprüft ob vier Steine nebeneinander liegen. Zunächst (ich hoffe ich vertue mich jetzt nicht) entlang der Zeilen, dann entlang der Spalten, dann die aufsteigenden Diagonalen, dann die Absteigenden Diagonalen.
``` public bool Check()
{
for (int i = 0; i < 3; i++)
{
for (int u = 0; u < 3; u++)
{
if (Spielfeld[i, u] != 0 && Spielfeld[i, u] == Spielfeld[i, u + 1] && Spielfeld[i, u] == Spielfeld[i, u + 2] && Spielfeld[i, u] == Spielfeld[i, u + 3])
{
if (Spielfeld[i, u] == 1)
{
Console.WriteLine("SPIELER 1 hat gewonnen!");
return true;
}
if (Spielfeld[i, u] == 9)
{
Console.WriteLine("SPIELER 2 hat gewonnen!");
return true;
}
}
if (Spielfeld[i, u] != 0 && Spielfeld[i, u] == Spielfeld[i, u + 1] && Spielfeld[i, u] == Spielfeld[i, u + 2] && Spielfeld[i, u] == Spielfeld[i, u + 3])
{
if (Spielfeld[i, u] == 1)
{
Console.WriteLine("SPIELER 1 hat gewonnen!");
return true;
}
if (Spielfeld[i, u] == 9)
{
Console.WriteLine("SPIELER 2 hat gewonnen!");
return true;
}
}
if (Spielfeld[i, u] != 0 && Spielfeld[i, u] == Spielfeld[i + 1, u + 1] && Spielfeld[i, u] == Spielfeld[i + 2, u + 2] && Spielfeld[i, u] == Spielfeld[i + 3, u + 3])
{
if (Spielfeld[i, u] == 1)
{
Console.WriteLine("SPIELER 1 hat gewonnen!");
return true;
}
if (Spielfeld[i, u] == 9)
{
Console.WriteLine("SPIELER 2 hat gewonnen!");
return true;
}
}
if (Spielfeld[i,u+4]!=0 && Spielfeld[i,u+4] == Spielfeld[i+1, u+3] && Spielfeld[i+1,u+3]==Spielfeld[i+2,u+2] && Spielfeld[i + 2, u + 2]== Spielfeld[i + 3, u + 1] && Spielfeld[i + 3, u + 1]== Spielfeld[i + 4, u])
{
if (Spielfeld[i, u] == 1)
{ Console.WriteLine("SPIELER 1 hat gewonnen!"); }
if (Spielfeld[i, u] == 9)
{ Console.WriteLine("SPIELER 2 hat gewonnen!"); }
return true;
}
else continue;
}
}
return false;
}```
Aber irgendwie überprüft die Methode nicht sondern gibt immer "false" zurück.
Findet hier vielleicht jemand den Fehler?
Mit bestem Dank im Voraus
Sebastian
PS.: wenn mir jemand erklären kann wie ich *.txt oder gar *.cs Dateien hier hoch laden kann, kann ich gerne auch den ganzen Code des Programms zeigen.