Wie schon geschrieben, finde ich den Code auch nicht elegant, aber ich versuche mich mal:
-
a wird in der ersten
while-Schleife gesetzt und gibt die maximale Anzahl von erkannten Richtungen an (welche dann in der zweiten Schleife als Endwert genommen wird).
-
i und
j sind nur Hilfsvariablen, welche innerhalb der Schleifen die jeweils aktuelle (Nachbar-)Position bezeichnen (ausgehend von
x und
y).
- Und
richtung ist das zweidimensionale Array, welches die relative Position (-1, 0, 1) angibt, an der ein gleicher Nachbarstein platziert ist. Die erste Dimension gibt den Index des Nachbarn an (von 0 bis max. 7 - der berechnete Maximalwert ist ja dann in
a gespeichert) und die zweite Dimension entspricht dem X- und Y-Wert.
Bei der Aufteilung des Codes in UI und Logik gilt grob folgendes:
- In die Logik-Klasse (bzw. Unit) kommt der Code, welcher nur interne Berechnungen durchführt (wie z.B. die reine Spiellogik, d.h. Aufbau des internen Spielbrettes, Zugmöglichkeiten, Gewinnlogik, etc.). Diesen Code kann man dann für verschiedene Projekte wiederverwenden (z.B. reine Konsolenprojekte, Webprojekte, Unit-Tests, ...), da sie unabhängig von der UI sind.
- In die UI-Klasse (d.h. hier jetzt in die
Form-Klasse) kommen dagegen alle Ein- und Ausgaben, d.h. Darstellung und Benutzerinteraktionen (Maus, Tastatur, ...), da diese speziell für diesen Projekttyp sind.
Dann als 3. Schicht (der sog. 3-Schichten-Architektur) gibt es dann noch die Datenzugriffsschicht (engl. "data access layer), in der alle externen Datenzugriffe, wie z.B. auf Dateien, Datenbanken, u.ä. implementiert werden.
Im
[Artikel] Drei-Schichten-Architektur wird dies gut (kurz und knapp) erklärt - zwar besonders für C#, aber dies ist Programmiersprachen-unabhängig.
Der Aufbau einer Unit in Delphi wurde in dem Tutorial ja auch schon am Anfang gezeigt, und unter
Programmaufbau: Units (sowie dem Folgeabschnitt "Units verwenden") wird dies noch mal explizit erklärt.
Du würdest also z.B. eine weitere Unit "VierGewinnt" zu deinem Projekt hinzufügen (und den entsprechenden Code dann aus der
Form1-Klasse, die man übrigens dann auch besser in
VierGewinntForm umbenennen sollte, in diese neue Unit verschieben).
Selbst wenn du diesen Aufwand jetzt noch nicht bei diesem Tutorial-Projekt machen möchtest, so solltest du bei eigenen Projekten möglichst von Anfang an dran denken (dies fördert klarere Strukturen und unabhängigere Programmierung): Nichts ist schlimmer, als nachher Dateien mit mehreren Tausend Zeilen Quellcode zu haben.