Also, ich habe jetzt eine komplett lauffähige Version. Da ich aber hier nich einfach was abliefern will, sondern auch ein bißchen zum selber nachdenken anregen will, hier ein paar Tips.
SetField sieht jetzt so aus, CheckForFreeField wie oben:
Delphi-Quellcode:
//Setzt das Spielfeld 'nFieldIdx' auf den wert 'fieldType' und weist 'img' das passende Bild zu
procedure TForm1.SetField( img : TImage; nFieldIdx : integer; fieldType : TFieldType );
var x,y : integer;
begin
x := ((nFieldIdx) mod 3);
y := ((nFieldIdx-x) div 3);
//Ist das Feld 'nFieldIdx' noch frei?
if ( CheckForFreeField( x,y {nFieldIdx} ) ) then begin
//Setzt das Feld 'nFieldIdx' auf den Wert 'fieldType'
GameBoard[ x,y ] := fieldType;
//Je nach 'fieldType' das passende Bild an 'img' übergeben
case fieldType of
ftX : img.Picture.Assign( ImageX.Picture );
ftO : img.Picture.Assign( ImageO.Picture );
end;
end;
end;
- Überall wo du nFieldIdx in x und y umrechnen willst, kannst du diese Methode verwenden:
Delphi-Quellcode:
x := ((nFieldIdx) mod 3);
y := ((nFieldIdx-x) div 3);
- Umgedreht gehts auch:
nFieldIdx := y*3 + x;
- rndIdx wurde in SimpleKI noch nicht initialisiert
- statt random (2) musst du random (3) verwenden, da die 2er-Felder sonst nie von der KI benutzt werden und es deshalb zu einer bösen Endlosschleife kommt