1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| function DeuxiemeEvaluation(const APos: TPosition; const ACoup: integer): integer;
var
LPos: TPosition;
function Estime(const APieces: TDamier): integer;
var
LPieces: TDamier;
begin
result := 0;
LPieces := APieces and LPos.Rois; if LPieces <> 0 then Inc(result, 20000);
LPieces := APieces and LPos.Dames; if LPieces <> 0 then Inc(result, 900 * CompteCases(LPieces));
LPieces := APieces and LPos.Tours; if LPieces <> 0 then Inc(result, 500 * CompteCases(LPieces));
LPieces := APieces and LPos.Fous; if LPieces <> 0 then Inc(result, 330 * CompteCases(LPieces));
LPieces := APieces and LPos.Cavaliers; if LPieces <> 0 then Inc(result, 320 * CompteCases(LPieces));
LPieces := APieces and LPos.Pions; if LPieces <> 0 then Inc(result, 100 * CompteCases(LPieces));
end;
var
LActives, LPassives, LMenaces: TDamier;
LBonusRoque, LMalusCapturesPotentiellesAdv, LBonusNombreCoups, LBalanceMateriel, LBonusTables: integer;
LBonusCapturesPotentielles: integer;
LBonusProtection: integer;
LMalusRepetition, LMalusAnnulation: integer;
begin
LPos := APos;
LBonusRoque := 100 * Ord(EstUnRoque(LPos, ACoup));
result := Low(integer);
writeln('DeuxiemeEvaluation1');
if not Rejoue_(LPos, NomCoup(ACoup)) then
exit;
writeln('DeuxiemeEvaluation2');
with LPos do
if Trait then begin
LActives := Noires;
LPassives := Blanches;
end else begin
LActives := Blanches;
LPassives := Noires;
end;
writeln('DeuxiemeEvaluation3');
LMenaces := ChercheCoups(LPos);
writeln('DeuxiemeEvaluation4');
LMalusCapturesPotentiellesAdv := Estime(LMenaces and LPassives);
writeln('DeuxiemeEvaluation5');
LPos.Trait := not LPos.Trait;
LBonusNombreCoups := ChercheNombre(LPos);
writeln('DeuxiemeEvaluation6');
LBonusTables := ResultatTables(LPos);
writeln('DeuxiemeEvaluation7');
LBonusCapturesPotentielles := Estime(ChercheCoups(LPos) and LActives);
writeln('DeuxiemeEvaluation8');
LBonusProtection := ChercheProtections(LPos);
writeln('DeuxiemeEvaluation9');
LMalusRepetition := Ord(NomCoup(ACoup) = AvantDernier);
writeln('DeuxiemeEvaluation10');
LMalusAnnulation := Ord(NomCoup(ACoup) = Inverse(Dernier));
writeln('DeuxiemeEvaluation11');
result :=
0
+ LBonusTables
+ LBonusRoque
+ LBonusNombreCoups
+ LBonusCapturesPotentielles
+ LBonusProtection
- LMalusCapturesPotentiellesAdv
- LMalusRepetition
- LMalusAnnulation;
writeln('DeuxiemeEvaluation12');
TJournal.Ajoute(
Format(
'%8s%8d%8d%8d%8d%8d%8d%8d%8d%8d',
[
NomCoup(ACoup),
result,
LBonusTables,
LBonusRoque,
LBonusNombreCoups,
LBonusCapturesPotentielles,
LBonusProtection,
LMalusCapturesPotentiellesAdv,
LMalusRepetition,
LMalusAnnulation
]
)
);
writeln('DeuxiemeEvaluation13');
end; |
Partager