Weird_Sheep
Spiele-Enthusiast/in
- Registriert
- 27.06.2001
- Beiträge
- 1.327
- Reaktionspunkte
- 1
Benötige Minimaxalgorithmus für XXO (Tic Tac Toe)
Ein Kumpel und ich sollen für die Berufsschule das wunderschöne XXO in Pascal realisieren.
Bedingung: Der Computer darf nicht verlieren!
Nun ja, wir haben jetzt schon einiges versucht und der Computer spielt auch schon ein paar Runden, aber er ist zu schlagen, da er immer das selbe Spiel spielt
Man findet zum Minimaxalgorithmus im Allgemeinen recht viel nur nicht konkret auf XXO bezogen, sodass wir den Knackpunkt finden könnten.
Solltet ihr also wissen, was falsch ist, oder wie man die "KI" programmieren kann, sei es in Pascal, Pseudocode oder sonst was Erkennbares, wären wir doch sehr dankbar, wenn ihr es uns wissen lasst
Ein Kumpel und ich sollen für die Berufsschule das wunderschöne XXO in Pascal realisieren.
Bedingung: Der Computer darf nicht verlieren!
Nun ja, wir haben jetzt schon einiges versucht und der Computer spielt auch schon ein paar Runden, aber er ist zu schlagen, da er immer das selbe Spiel spielt
Man findet zum Minimaxalgorithmus im Allgemeinen recht viel nur nicht konkret auf XXO bezogen, sodass wir den Knackpunkt finden könnten.
Solltet ihr also wissen, was falsch ist, oder wie man die "KI" programmieren kann, sei es in Pascal, Pseudocode oder sonst was Erkennbares, wären wir doch sehr dankbar, wenn ihr es uns wissen lasst
Hier ein Schnippsel Quellcode schrieb:function MaxZuege(var ASpielfeld : XxoSpielfeld) : integer;
var x, ergebnis : integer;
begin
ergebnis := 0;
For x := 1 to 9 do
begin
if ASpielfeld[x] = 0 then ergebnis := ergebnis + 1;
end;
MaxZuege := ergebnis;
end;
{Kopiert ein XxoSpielfeld}
procedure filltempfeld(var ASpielfeld : XxoSpielfeld);
var zaehler : integer;
begin
For zaehler := 1 to 9 do
begin
TempFeld[zaehler]:=ASpielfeld[zaehler];
end;
end;
function ZugSimulation(position:shortint;spieler:shortint) : boolean;
var x : shortint;
gesetzt : boolean;
begin
ZugSimulation := false;
If (Tempfeld[position] = 0) then
begin
Tempfeld[position] := spieler;
ZugSimulation := true;
end;
end;
function maxWert : longint;
var zuege : integer;
ermittelt, zugwert: longint;
GemachterZug : shortint;
begin
ermittelt := -2147483647;
for zuege := 1 to 9 do{MaxZuege(TempFeld) do }
begin
if ZugSimulation(zuege,1) then
begin
if (MaxZuege(Tempfeld)=0) then
begin
zugwert := checkwin(tempfeld);
end
else
begin
zugwert := minwert;
end;
TempFeld[zuege]:= 0;
if zugwert > ermittelt then
begin
ermittelt := zugwert;
maxzug := zuege;
end;
end;
end;
maxwert := ermittelt;
end;
function minWert : longint;
var x : integer;
ermittelt, zugwert : longint;
GemachterZug : ShortInt;
begin
ermittelt := 2147483647;
for x := 1 to 9 do{MaxZuege(Tempfeld) do}
begin
if ZugSimulation(x,-1) then
begin
if (MaxZuege(Tempfeld)=0) then
begin
zugwert := checkwin(TempFeld);
end
else
begin
zugwert := maxwert;
end;
TempFeld[x] := 0;
if zugwert < ermittelt then
begin
ermittelt := zugwert;
minzug := x;
end;
end;
end;
minwert := ermittelt;
end;
