Kann mir jemand vielleicht noch hierbei helfen ?
Sagen wir einfach die KI schaut nur einen Zug voraus. Sie prüft, wie es um ihre Seite steht, wenn sie einen zufälligen Zug macht.
Delphi-Quellcode:
TBoard = class
public
Move:TMove;
Turn:Integer;
Points:Integer;
// ...
procedure GetFigureLeading;
procedure GetBestMove;
function MoveAllowed:Boolean;
procedure DoMove;
end;
procedure TBoard.GetBestMove;
var
BestMove:TMove;
MaxPoints,i:Integer;
begin
Randomize;
MaxPoints:=64000;
for i:=1 to 10 do
// Erstellung eines gedachten Brettes
with TBoard.Create(Self) do
begin
// KI sucht sich zufällig einen Zug aus
repeat
repeat
Move.A.X:=1+Random(8);
Move.A.Y:=1+Random(8);
until Field[Move.A.X,Move.A.Y].ID*Turn>0;
Move.B.X:=1+Random(8);
Move.B.Y:=1+Random(8);
Move:=GetMove(Move.A,Move.B);
until MoveAllowed;
// KI macht diesen Zug
DoMove;
Turn:=-Turn;
// Berechnung der Punkte (zunächst nur Figurenvorteil)
// positives Vorzeichen: Weiß in Führung
// negatives " : Schwarz " "
GetFigureLeading;
// Entscheidung der KI
if Points*Turn<MaxPoints then
begin
BestMove:=Move;
MaxPoints:=Points*Turn;
end;
Free;
end;
Move:=BestMove;
DoMove;
Turn:=-Turn;
end;
Was ich hierbei wissen will, ob der
Gedankengang so in Ordnung ist, wenn man die anderen verwendeten Methoden nicht in Frage stellt.
Habe ich villeicht etwas nicht beachtet oder irgendwo einen Fehler gemacht. Irgendwie funktioniert diese Prozedur bei mir nicht richtig.