Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TicTacToe


bf109g.01 - Mi 04.03.09 23:18
Titel: TicTacToe
Hallo, baue an einer TicTacToe Version, zunächst nur für zwei menschl. User.
Bei dem Spiel gibt es bekanntlich 9 Felder & max. 9 Züge, dann ist es spätestens vorbei.
_ _ _
|_|_|_|
|_|_|_|
|_|_|_|

Bie jedem der 9 Felder passiert beim Klicken aber zunächst genau dasselbe.
Weil die aber alle unterschiedlich heißen, brauchen die alle eine eigene (genau gleiche) Prozedur.
Was muss ich schreiben, damit alle Felder Pxy ('P11' - 'P33' (P=Panel, x-, y-Koordinate))
nur auf einen Text zugreifen können? Muss ich eine function verwenden? Wenn ja wie?

Danke schon mal im Voraus! :-)


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TF.P13Click(Sender: TObject); 
// statt P13.Click bräuchte ich es allgemein: Pxy (alle Felder) 
begin
  if move <=9 then // falls das Spielfeld schon voll ist
  begin
    if current= true then // aktuellen Spieler abfragen
      begin
        p13.caption:='X'// X in gewähltes Feld 
        current:=false;   // der andere Spieler ist am Zug
      end
    else
      begin
        p13.caption:='O'// O in gewähltes Feld 
        current:=true; // der andere Spieler ist am Zug
      end;
    p13.enabled:=false; // Feld abschalten
    move:=move+1//  Zugzahl erhöhen (max 9)
  end;  
end;


Narses - Do 05.03.09 01:50

Moin und :welcome: im Forum!

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:
Weil die aber alle unterschiedlich heißen, brauchen die alle eine eigene (genau gleiche) Prozedur.
Was muss ich schreiben, damit alle Felder Pxy ('P11' - 'P33' (P=Panel, x-, y-Koordinate))
nur auf einen Text zugreifen können?
Schau mal hier [http://www.delphi-library.de/topic_VCL+Memory+Tutorial_44084.html], das ist zwar ein anderes Spiel, aber da wird die Technik, eine gemeinsame Aktionsmethode für gleiche Controls zu verwenden, demonstriert. :idea: ;)

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
procedure TF.P13Click(Sender: TObject); 
// statt P13.Click bräuchte ich es allgemein: Pxy (alle Felder)
Das ist schon OK so, irgendwie muss die Methode ja heißen. Und diese Methode stellst du im Objekt-Inspektor einfach für alle Controls ein. Welches Control das Ereignis ausgelöst hat, bekommst du im Parameter Sender: TObject geliefert. Details im o.a. Tutorial. :les:

user profile iconbf109g.01 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
    if current= true then // aktuellen Spieler abfragen
      begin
Du solltest nicht auf TRUE hin vergleichen, sondern einfach nur if current then verwenden; könnte sonst zu komischen Effekten führen (wird dir sicher auch gleich noch von Anderen mit Links auf erläuternde Beiträge gesagt ;)).

cu
Narses