Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
FreePascal / Lazarus
|
AW: Wo kommt auf einmal "fpc_shortstr_to_ansistr" her?
17. Jan 2012, 10:25
Kleiner Tipp zu Beginn: Wenn du mit "-gl" kompilierst, dann sollte(!) dir der Compiler gleich die Zeilennummer und die Datei beim Backtrace mitanzeigen, dann musst du nicht von Hand rumsuchen.
Hab ich auch schon verwendet, aber die fpc_*-Routinen sind nicht mitverzeichnet und deshalb muss ich so oder so suchen (beim Zitat im Anfangspost kann man ja auch sehen, dass die Option aktiv war)
Stimmt...
Delphi-Quellcode:
// RunGeneration
procedure RunGeneration( var gen: TGeneration; out avg: single; out max: TAIRec);
var i,j: byte; sum: word; c: shortint;
begin
for i := 0 to 63 do
RunMatch(gen[i],false);
for i := 0 to 63 do
RunMatch(gen[i],true);
SortGen(gen);
c := 0;
for i := 63 downto 0 do
if (gen[i].score>=225) then c := 64-i;
for j := 0 to 30 do begin
for i := 0 to c-1 do
RunMatch(gen[63-i],false);
for i := 0 to c-1 do
RunMatch(gen[63-i],true);
end;
SortGen(gen);
max.score := 0;
sum := 0;
for i := 0 to 63 do begin
if gen[i].score>max.score then max := gen[i];
sum += gen[i].score;
end;
avg := sum/64;
end;
// RunMatch
procedure RunMatch( var g: TAIRec; const r: boolean);
var
party: TParty;
pl1,pl2,wp: PPlayer;
drv: TEvoDrive;
q,is1: Boolean;
c: byte;
begin
party := TParty.Create;
drv := TEvoDrive.Create(party);
pl1 := MakePlayer(drv,GenSID);
pl1^. Name := g.Genetics. Name; // <-- Hier fpc_shortstr_to_ansistr/fpc_ansistr_incr_ref/fpc_ansistr_decr_ref
drv.SetAI(g.Genetics); // <-- und hier schlägt fpc_copy fehl, wenn obere Zeile rauskommentiert ist
party.SetPlayer1(pl1);
if r then
pl2 := MakePlayer(TRandomizer.Create(party),GenSID)
else pl2 := MakePlayer(TPrimAIPlayer.Create(party),GenSID);
pl2^. Name := ' Bernd';
party.SetPlayer2(pl2);
q := false;
is1 := false;
if Random(2)=0 then begin
is1 := true;
wp := pl2;
pl2 := pl1;
pl1 := wp;
end;
c := 0;
try
repeat
if party.TurnClosed then begin
party.Proceed(wp);
is1 := not is1;
if is1 then Inc(c);
end else q := true;
until assigned(wp) or q;
if q and is1 then Dec(c);
if assigned(wp) and (wp^.id=SID_DEAD) then c := 15
else if assigned(wp) and (wp^.id=pl1^.id) then c := 20;
g.Score += (c*c) div 2;
finally
party.Free;
DismissPlayer(pl1);
DismissPlayer(pl2);
end;
Inc(pcount);
end;
Wie wird PPlayer innerhalb von MakePlayer angelegt und wie ist es (und sein Basistyp) definiert? Wie ist p.Genetics definiert?
Gruß,
Sven
Sven [Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
|
|
Zitat
|