Schleife Tic Tac Toe

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Felix2
Beiträge: 2
Registriert: Fr 10. Feb 2017, 16:35

Schleife Tic Tac Toe

Beitrag von Felix2 »

Hallo,

habe ein laufendes Tic Tac Toe Spiel programmiert und es funktioniert auch alles. Da mein Quelltext aber arg lang ist, möchte ich die Gewinnprüfung mittels einer Schleife durchführen. Hat jemand eine Idee wie ich das am einfachsten umsetzen kann?

Code: Alles auswählen

procedure TTicTacToe.Feld1Click(Sender: TObject)//Ereignis beim Klicken eines Buttons
begin
Countererhoehung;
  if Spieler=1 then
   begin
   Feld1.Caption:=('X');
   Codespielfeld [1,1] := 'X';     //Eintragen der Stellung in ein Codespielfeld
   Feld1.Enabled:=false;
   Spieler:=2;     //nächster Spieler ist dran
   end
  else
  if Spieler=2 then
   begin
   Feld1.Caption:=('O');
   Codespielfeld [1,1] := 'O';
   Feld1.Enabled:=false;
   Spieler:=1;
   end;
Gewinnpruefung;
end;



Code: Alles auswählen

procedure TTicTacToe.Gewinnpruefung;
begin
 
 // Ab hier die Siegerstellungen
 if (Feld1.Caption='X') and  (Feld2.Caption='X') and (Feld3.Caption='X') then //Möglichkeit 1
  begin
   Feld4.visible:= false;
   Feld5.visible:= false;
   Feld6.visible:= false;
   Feld7.visible:= false;
   Feld8.visible:= false;
   Feld9.visible:= false;
   Hintergrund.visible:= false;
   showmessage ('Spieler 1 hat gewonnen!');
   Spielstand1 := Spielstand1+1;
   NeuesSpielstarten.Click;
   Counter := 0;
  end;   


Die Gewinnprüfung ist derzeit für jede Gewinnstellung so aufgebaut wie oben zu sehen.


Liebe Grüße :)
Zuletzt geändert von Felix2 am Fr 10. Feb 2017, 19:30, insgesamt 1-mal geändert.

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Schleife Tic Tac Toe

Beitrag von Mathias »

Anstelle von schwer lesbaren Bilder, kannst du mit Highlighter direkt Quellcode in Forum stellen.
Somit ist eine Chance auf Hilfe viel grösser. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Felix2
Beiträge: 2
Registriert: Fr 10. Feb 2017, 16:35

Re: Schleife Tic Tac Toe

Beitrag von Felix2 »

Danke für den Hinweis, ich habe es geändert :)

Jole
Beiträge: 114
Registriert: Fr 4. Jul 2014, 14:39
OS, Lazarus, FPC: Linux
CPU-Target: amd64

Re: Schleife Tic Tac Toe

Beitrag von Jole »

Ich würde mir da zwei Zweidimensionale array's anlegen, eins für die Spieler (Boolean) und eins das die Feldindex nummern der Gewinnkombinationen enthält. Also hier mal ein Beispiel:

Code: Alles auswählen

 
program tictactoe;
uses SysUtils;
 
var // 1. Index = Spieler, 2. Index = Feld das belegt wird.
  Spieler: array[0..1, 0..8] of Boolean;
    // Enthält die Gewinnkombinationen.
  Gewinn: array[0..7, 0..2] of Integer = ((0, 1, 2), (3, 4, 5), (6, 7, 8),
                                          (0, 3, 6), (1, 4, 7), (2, 5, 8),
                                          (0, 4, 8), (2, 4, 6) );
  Inx1: Integer;
  Sp: Integer = 0;
 
begin
  // Spieler 1 belegt die Felder 0, 4 und 8
  Spieler[Sp, 0]:= True;
  Spieler[Sp, 4]:= True;
  Spieler[Sp, 8]:= True;
  // Gewinn Auswertung
  for Inx1:= 0 to 7 do
    if Spieler[Sp, Gewinn[Inx1, 0]] and
       Spieler[Sp, Gewinn[Inx1, 1]] and
       Spieler[Sp, Gewinn[Inx1, 2]] then WriteLn('Spieler ', Sp+ 1, ' gewinnt!');
end.
 

Antworten