Kommt auf das Grundgerüst an.
Und es gibt auch noch andere Schleifen/Möglichkeiten. Auch mal über'n Tellerrand schauen. Dafür machst Du doch das Ganze - um Dich weiter zu entwickeln, oder?
Und übrigens nochmal - man muss nicht nach jedem Spielzug
alle Spalten auf Gewinn prüfen, man muss nicht jedem Spielzug
alle Zeilen auf Gewinn prüfen und man muss nicht nach jedem Spielzug
alle Diagonalen auf Gewinn prüfen!
Es reicht aus, diejenigen zu prüfen, die das Feld kreuzen, in das der letzte Spielstein gefallen ist. Und welche das sind, sagen Dir bei Deinem Code die Variablen #x und #y. Das spart einiges an Code und Laufzeit.
Z.B:
Code:
...
[COLOR=#ff0000]FOR #a := 1 TO 7 BY 1 DO[/COLOR]
FOR #b := 0 TO 5 BY 1 DO
IF #Rot_Speicher[#a,#b] = 1 THEN
#Sieg_Rot := #Sieg_Rot + 1;
ELSE
#Sieg_Rot := 0;
END_IF;
END_FOR;
[COLOR=#ff0000]END_FOR;[/COLOR]
...
Die rot markierte FOR-Zeile brauchst Du eigentlich nicht. Du weißt doch bereits, das der letzte Stein in Spalte #x geworfen wurde. Dann reicht es auch aus, diese Spalte auf einen Gewinn zu prüfen:
Code:
...
[COLOR=#FF0000]#a := #x;[/COLOR]
FOR #b := 0 TO 5 BY 1 DO
IF #Rot_Speicher[#a,#b] = 1 THEN
#Sieg_Rot := #Sieg_Rot + 1;
ELSE
#Sieg_Rot := 0;
END_IF;
END_FOR;
...
(Oder gleich #x anstelle von #a einsetzen.)
Was mir jetzt noch aufgefallen ist - wenn bei Dir ein Spielstein in eine bereits volle Spalte geworfen wird, wird der oberste einfach überschrieben:
Code:
#y:=0;
#Gefunden:= 0;
WHILE #Gefunden = 0 DO
IF #Grün_Speicher[#x,#y] = 0 AND #Rot_Speicher[#x,#y] = 0 THEN
#Grün_Speicher[#x,#y] := 1;
#Gefunden:= 1;
ELSE
#y:=#y+1;
[COLOR=#ff0000] IF #y = 5 THEN
#Gefunden:= 1;
END_IF;[/COLOR]
END_IF;
END_WHILE;
Das kann nicht richtig sein. Bediener machen Fehler - und der Programmierer muss diese möglichst abfangen und entsprechend behandeln!
Ebenso finde
ich es nicht besonders schön, dass Du bei den Spalten von 1 bis 7 zählst, während Du bei den Zeilen mit 0 beginnst. Es ist eigentlich relativ egal, wofür Du Dich entscheidest, aber ohne besonderen Grund sollte man möglichst bei einer Logik bleiben. Ist was für's nächste Programm.
Und wie gesagt, das Du alles doppelt machst, würde ich als Lehrer überhaupt nicht durchgehen lassen. Auch wenn Du (warum auch immer) 2 Spielfelder brauchst, kann man die Abfrage der gewählten Spalte, die Suche nach dem leeren Feld, die Gewinnauswertung ... gemeinsam machen.
Ich kann schon verstehen, dass Du nicht nochmal anfangen willst, aber auch sowas gehört zum Lernprozess. Und man muss ja nicht alles verwerfen, sondern nur schauen, wo macht man eigentlich genau das Gleiche, nur mit einem anderen Variablenwert.