Unentschieden für TicTacToe

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Toni
Beiträge: 18
Registriert: Di 6. Jan 2015, 18:18

Unentschieden für TicTacToe

Beitrag von Toni »

Huhu,

bin da mit einem Kumpel dabei ein TicTacToe in Lazarus zu programmieren,was wir soweit auch fertig haben.

Nur leider finden wir bisher keinen Befehl/Bedingung wie wir ein Unentschieden einbauen können?

Hättet ihr da eine Idee?
Dateianhänge
TicTacToe.zip
(4.35 MiB) 69-mal heruntergeladen

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Unentschieden für TicTacToe

Beitrag von creed steiger »

Wenn alle Felder voll sind und keiner gewonnen hat, sollte es wohl eine unentschieden sein.

Die exe und den anderen unnötigen Kram beim nächsten mal weglassen, wenn du was hochlädst.

"Projekt veröffentlichen" sollte da helfen.

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

Re: Unentschieden für TicTacToe

Beitrag von Mathias »

Prüfe, ob alle Felder <> 0 sind.

Code: Alles auswählen

procedure TForm1.Victory(x, y: integer; Image: TImage);
begin
  ...
 
  if (Feld[0, 0] <> 0) and (Feld[0, 1] <> 0) and (Feld[0, 2] <> 0) and
    (Feld[1, 0] <> 0) and (Feld[1, 1] <> 0) and (Feld[1, 2] <> 0) and
    (Feld[2, 0] <> 0) and (Feld[2, 1] <> 0) and (Feld[2, 2] <> 0) then begin
    Label1.Caption := 'Unentschieden';
  end;
end;
Noch eine kleine Vereinfachung, verwende die and Bedienung.

Code: Alles auswählen

      if (Feld[0, 0] = Feld[1, 1]) and  (Feld[1, 1] = Feld[2, 2]) then begin
        ...
      end;     
anstelle

Code: Alles auswählen

  if Feld[0, 0] = Feld[1, 1] then begin
    if Feld[1, 1] = Feld[2, 2] then begin  
Noch eine kleine optische Verbesserung:

Code: Alles auswählen

procedure TForm1.Update(x, y: integer; image: TImage);
const
  Rand = 8;
begin
  if Feld[x, y] = 0 then begin
    image.Picture.Bitmap.Canvas.Brush.Color := $FFFFFF;
    image.Picture.Bitmap.Canvas.Pen.Width := Rand;
    image.Picture.Bitmap.Canvas.FillRect(0, 0, image1.Width, image.Height);
 
    if spieler = True then begin
      Feld[x, y] := 1;
      image.Picture.Bitmap.Canvas.Pen.Color := $FF0000;
      image.Picture.Bitmap.Canvas.Line(Rand, Rand, image1.Width - Rand, image.Height - Rand);
      image.Picture.Bitmap.Canvas.Line(Rand, image1.Width - Rand, image.Height - Rand, Rand);
 
      //      image.Picture.Loadfromfile('Unbenannt1.png');
      Spieler := False;
    end else begin
      image.Picture.Bitmap.Canvas.Pen.Color := $0000FF;
      image.Picture.Bitmap.Canvas.Ellipse(Rand, Rand, image1.Width - Rand, image.Height - Rand);
 
      Feld[x, y] := 2;
      //      image.Picture.Loadfromfile('Unbenannt111.png');
      Spieler := True;
    end;
  end;
  Victory(x, y, image);
end;                
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Unentschieden für TicTacToe

Beitrag von MitjaStachowiak »

Ich habe ein funktionierendes TicTacToe geschrieben. Wenn euch das hilft, schicke ich gerne den Code.

[Edit:] So, habe das mal hoch geladen: http://www.mitjastachowiak.de/?/project ... index.html
Das demonstriert so schön, wie leicht man in Lazarus die GUI für sowas basteln kann^^

Antworten