Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler in der KI (Tic Tac Toe)?Bitte schnell helfen. (https://www.delphipraxis.net/25467-fehler-der-ki-tic-tac-toe-bitte-schnell-helfen.html)

M4ST3R86 7. Jul 2004 07:56


Fehler in der KI (Tic Tac Toe)?Bitte schnell helfen.
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz