Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#69

Re: Ideen zur Schach KI

  Alt 25. Apr 2005, 17:57
hi

hier ist eine vorläufige version meiner eröffnungsdb...is aber auf keinen fall eine entgültige version

in TZug sollen die züge drinstehen
zb e2e4, e7e5, c5d4 o.ä.

Delphi-Quellcode:
type
  TZug = String[4];
  TEroeffnungsDB = class (TObject)
  private
    FConn: TADOConnection;
    FQuery: TADOQuery;
    FDBName: String; //AusgangsDB
    FTable: String;
    FZugID: Integer;
    function Init(DBName, User, Passwd: String):Boolean; //DB laden
    function UnInit:Boolean; //Daten speichern
  published
    constructor Create;
    destructor Destroy;
    function SetNeuenZug(Neu: TZug):Integer;//Zug setzen und Elemente löschen
    function GetNeuenZug:TZug; //Besten Zug raussuchen
    property Tabelle: String read FTable write FTable;
  end;

const
  STD_TEMP_DB = 'Temp_DB';

implementation

constructor TEroeffnungsDB.Create;
begin
  inherited Create;
  FConn := TADOConnection.Create(FConn);
  FQuery:=TADOQuery.Create(FQuery);
  FQuery.Connection:=FConn;
end;

destructor TEroeffnungsDB.Destroy;
begin
  FConn.Free;
  FQuery.Free;
  inherited Destroy;
end;

function TEroeffnungsDB.Init(DBName, User, Passwd: String):Boolean;
begin
  try
    //in Temp-DB ablegen
    FDBName:=ExtractFileDir(DBName)+STD_TEMP_DB+ExtractFileExt(DBName);
    CopyFile(PAnsiChar(DBName),PAnsiChar(FDBName),False);
    //öffnen
    FConn.Provider:='MSDAIPP.DSO';
    FConn.DefaultDatabase:=FDBName;
    FConn.Open(User, Passwd);
    Result:=True;
  except
    Result:=False;
  end;
end;

function TEroeffnungsDB.UnInit:Boolean;
begin
  try
    //schliessen
    FConn.Close;
    //Temp-DB löschen
    DeleteFile(FDBName);
    Result:=True;
  except
    Result:=False;
  end;
end;

function TEroeffnungsDB.SetNeuenZug(Neu: TZug):Integer;
begin
  //irrelevante Züge löschen
  FQuery.SQL.Clear;
  FQuery.SQL.Add('DELETE FROM :table WHERE (Zugid=:zugid) AND (zug<>:zug)');
  FQuery.Parameters.ParamValues['table']:=FTable;
  FQuery.Parameters.ParamValues['zugid']:=FZugID;
  FQuery.Parameters.ParamValues['zug']:=Neu;
  FQuery.ExecSQL;
  repeat
    FQuery.SQL.Clear;
    FQuery.SQL.Add('DELETE FROM :table WHERE NOT parentid IN ( SELECT id FROM :table)');
    FQuery.Parameters.ParamValues['table']:=FTable;
    FQuery.ExecSQL;
  until FQuery.RowsAffected=0;
  FQuery.ClearFields;
  inc(FZugID);
end;

function TEroeffnungsDB.GetNeuenZug:TZug;
begin
  //Neuen Zug holen
  FQuery.SQL.Clear;
  FQuery.SQL.Add('SELECT Zug FROM '+FTable+' ORDER BY ZugID, Bewertung');
  FQuery.Open;
  Result:=FQuery.Fields.FieldByName('Zug').AsString;
  FQuery.ClearFields;
  SetNeuenZug(Result);
end;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat