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
|
procedure entrer; //Bitboard pour determiner le vide entre deux positions
var dp,pn,ind,cke,fne:integer;
begin //entt pour (ranger et colonne)
for dp := 0 to 63 do //entf pour (les diagonales)
for pn := 0 to 63 do //entr pour (ranger et colonne et diagonale)
begin
entr[dp,pn] := 0;entf[dp,pn] := 0;entt[dp,pn] := 0;
if fool[dp] and board[pn] <> 0
then begin
entt[dp,pn] := $FFFFFFFFFFFFFFFF;
ind := inde[pn,dp];cke := pn + ind;fne := dp;
while cke <> fne do
begin
entr[dp,pn] := entr[dp,pn] or board[cke];
entf[dp,pn] := entf[dp,pn] or board[cke];
inc(cke,ind); end;end else
if tool[dp] and board[pn] <> 0
then begin
entf[dp,pn] := $FFFFFFFFFFFFFFFF;
ind := inde[pn,dp];cke := pn + ind;fne := dp;
while cke <> fne do
begin
entr[dp,pn] := entr[dp,pn] or board[cke];
entt[dp,pn] := entt[dp,pn] or board[cke];
inc(cke,ind); end;end
else if pn <> dp
then begin
entr[dp,pn] := $FFFFFFFFFFFFFFFF;
entt[dp,pn] := $FFFFFFFFFFFFFFFF;
entf[dp,pn] := $FFFFFFFFFFFFFFFF; end;end;
end;
function decsep(dee:integer):boolean; //Fou ou dame humaine attaque pion Projechec en diagonal(-7)
begin
if ((f1h <> nue) and (dia1[f1h] = dia1[dee]) and (entf[f1h,dee] and bdtou = vid) and (posy[f1h] < posy[dee]))
or ((f2h <> nue) and (dia1[f2h] = dia1[dee]) and (entf[f2h,dee] and bdtou = vid) and (posy[f2h] < posy[dee]))
or ((d1h <> nue) and (dia1[d1h] = dia1[dee]) and (entf[d1h,dee] and bdtou = vid) and (posy[d1h] < posy[dee]))
then result := false
else result := true;
end;
function dechui(dee:integer):boolean; //Tour ou dame humaine attaque pion Projechec en colonne(-8)
begin
if ((t1h <> nue) and (posx[t1h] = posx[dee]) and (entt[t1h,dee] and bdtou = vid))
or ((t2h <> nue) and (posx[t2h] = posx[dee]) and (entt[t2h,dee] and bdtou = vid))
or ((d1h <> nue) and (posx[d1h] = posx[dee]) and (entt[d1h,dee] and bdtou = vid))
then result := false
else result := true;
end;
function decneu(dee:integer):boolean; //Fou ou dame humaine attaque pion Projechec en diagonal(-9)
begin
if ((f1h <> nue) and (dia8[f1h] = dia8[dee]) and (entf[f1h,dee] and bdtou = vid) and (posy[f1h] < posy[dee]))
or ((f2h <> nue) and (dia8[f2h] = dia8[dee]) and (entf[f2h,dee] and bdtou = vid) and (posy[f2h] < posy[dee]))
or ((d1h <> nue) and (dia8[d1h] = dia8[dee]) and (entf[d1h,dee] and bdtou = vid) and (posy[d1h] < posy[dee]))
then result := false
else result := true;
end; |
Partager