neBitte helft mir schnell. noch heute morgen habe keine zeit mehr. Unten hängt das komplette programm an.
achso es Gameboard ist ein 2d Array vom typ tFieldtype :
TFieldType = ( ftNone, ftX, ftO,ftH );
GameBoard : array[ 0..2,0..2 ] of TFieldType;
Hier die set field die unten vorkommt
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
TagToCoordinates( nFieldIdx, x, y );
//Ist das Feld 'nFieldIdx' noch frei?
if ( CheckForFreeField( x, y ) ) 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;
Hier ist der eigentliche problemfall
Delphi-Quellcode:
procedure GodlikeKIGo;
begin
// Schräg ziehen
if (TForm1.CheckForFreeField() = 8) and not(
(GameBoard[0, 0] = 0) and
(GameBoard[0, 2] = 0) and
(GameBoard[2, 0] = 0) and
(GameBoard[2, 2] = 0)) then
begin
if GameBoard[0, 0] = 1 then
SetField[2, 2].Caption := ftO
else if GameBoard[0, 2] = 1 then
SetField[2, 0].Caption := ftO
else if GameBoard[2, 0] = 1 then
SetField[0, 2].Caption := ftO
else if GameBoard[2, 2] = 1 then
SetField[0, 0].Caption := ftO;
exit;
end;
// Ecke ziehen
if (GameBoard[0, 0] = 0) or
(GameBoard[0, 2] = 0) or
(GameBoard[2, 0] = 0) or
(GameBoard[2, 2] = 0) then
begin
if GameBoard[0, 0] = 0 then
SetField[0, 0].Caption := ftO
else if GameBoard[0, 2] = 0 then
SetField[0, 2].Caption := ftO
else if GameBoard[2, 0] = 0 then
SetField[2, 0].Caption := ftO
else
SetField[2, 2].Caption := ftO;
end
// Mitte ziehen
else if GameBoard[1, 1] = 0 then
SetField[1, 1].Caption := ftO
// Kante ziehen
else
if GameBoard[1, 1] = 0 then
SetField[2, 2].Caption := ftO
SimpleKI;
end;
end.