Einzelnen Beitrag anzeigen

M4ST3R86

Registriert seit: 1. Mai 2004
23 Beiträge
 
#1

Fehler in der KI (Tic Tac Toe)?Bitte schnell helfen.

  Alt 7. Jul 2004, 07:56
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.
Angehängte Dateien
Dateityp: rar prog_121.rar (551,5 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat