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
|
Type
TddTableDeal=packed Record // Utilisé dans "CalcDDTable"
Cards:array [0..3,0..3] of Integer; // Encodes a deal : 1st index =Hand; 2nd index:=suir; valeur=les cartes
// ex : Deal.remainCards[2,1]=8192+32=8224 => Roi 5 de Coeur pour Sud
// Deal.remainCards[3,2]= 16384+4=16388 => As et 2 de Carreau pour Ouest
end;
TddTableResults=packed Record // Utilisé dans "CalcDDTable"
resTable:array [0..4,0..3] of Integer; // Encodes the solution of a deal for combinaisons of denomitation and declarer
// 1st index : contrat ((0:Pique, 1:Coeur, 2:Carreau, 3Trèfle, 4: sans Atout
// 2nd index : déclarant (0:Nord, 1:Est, 2:Sud, 3:Ouest
// le résultat = nombre de plis possibles
end;
PtrddTableResults =^TddTableResults;
procedure Resoudre_CalcDDTable(donne:string); // Tableau des levées possibles
implementation
uses unit1;
var MyTableDeal:TddTableDeal;
Tablep:PtrddTableResults;
function CalcDDtable(ddTableDeal:TddTableDeal;Tablep:PtrddTableResults):integer; stdcall; external 'DDS.dll';
procedure Resoudre_CalcDDtable(donne:string); // Tableau des levées possibles
var i,j:integer;
CodeRetour:integer;
begin
// donne est fourni sous forme par exemple de 'N:T5.K4.652.A98542 K6.QJT976.QT7.Q6 432.A.AKJ93.JT73 AQJ987.8532.84.K'
// cela signifie que Nord est donneur et a 10 5 à Pique,652 à Cur, As98542 à Carreau et R6 à Trèfle, ensuite id pour Est, Sud et Ouest
for i:=0 to 3 do begin // Hand (orientation): Nord, Est, Sud, Ouest
for j:=0 to 3 do begin // Suit (couleur) : Pique, Coeur, Carreau, Trèfle, Sans Atout
MyTableDeal.Cards[i,j]:= HoldingCodage(i,j,donne); // La donne à tester (après avoir été codée par la fonction "HoldingCodage"
// Par ex. : si Deal.remainCards[3,2]= 16384+4=16388
// => alors Ouest n'a que As et 2 dans la couleur Carreau)
end;
end;
new(Tablep);
CodeRetour:=CalcDDTable(MyTableDeal,Tablep);// La function de Bo Haglund (renvoie 1 si pas d'erreur sinon renvoie un code d'erreur approprié)
for i:=0 to 4 do begin // 1st index : contrat (O:Pique, 1:Coeur, 2:Carreau, 3Trèfle, 4: sans Atout)
for j:=0 to 3 do begin // 2nd index : déclarant (0:Nord, 1:Est, 2:Sud, 3:Ouest)
NbreLevees[i,j]:=Tablep.resTable[i,j]; //Tableau :nbre de plis possibles pour N, E, S et O en fonction de l'atout (P,C,K ou Trèfle) ou Sans Atout
end;
end;
dispose(Tablep);
end; |