Moin!
Ein wenig Erklärungsversuche
Delphi-Quellcode:
procedure TForm1.ImageClick(Sender: TObject);
begin
if actualPlayer = 2 then
begin
Player2Draw;
actualPlayer:=1;
end
else
begin
DrawSymbol(Sender); // Sender enthält ja das Image was geklickt wurde. Nur die Eigenschaften von TImage hast du nicht,
// da Sender hier als TObject definiert ist. Dabei hilft dann ein TypeCast ( Sender As TImage ).
actualPlayer := 2;
end;
end;
Zitat:
1. Randomize nur einmal aufrufen
. Am besten im TForm1.Create;
Randomize initialisiert die Zufallsfunktion und ermittelt einen Seed Wert mit dem dann später die Zufallszahlen ermittelt werden. Dieser Seed Wert ist wichtig, weil wenn er unverändert bleibt und direkt Random aufgerufen wird, dann kommen bei jedem Programmstart so gut wie immer die gleichen Zahlenreihen raus. Auch ein mehrfaches aufrufen von Randomize ist schlecht, weil dann der Seed Wert immer wieder neu berechnet wird und auf Grund der Formel, mit der dieser berechnet wird, sich dann in den Zufallswerten nicht mehr viel ändert.
Und FormCreate (also das OnCreate bei deiner Form) wird nur einmalig aufgerufen und daher ist dies ein guter Platz für solche Dinge (@other: ausser die Form wird selber per Hand öfters erstellt, ich weiss...)
:=actualPlayer mod 2 +1
Als Erklärung:
Dein aktueller Spieler wird der Rest der ganzzahligen Division durch 2 zugewiesen. Das Ergebnis kann dadurch nur 0 oder 1 sein. Ein Rest der ganzzahligen Division durch 2 ist immer 0 bei einer geraden Zahl und 1 bei einer ungeraden Zahl. Damit ist immer ein Wert zwischen 0 und 1 gewährleistet. Da du aber mit 1 und 2 arbeitest, wird einfach auf das Ergebnis eine 1 hinzuaddiert und wir kommen auf Zahlen 1 und 2 - immer im Wechsel - mit jedem Aufruf.
MfG
Muetze1