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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
Interface
Const
cNomResourceCartes : Array[0..3] of Array[1..13] of String = (
('CC001', 'CC002', ..., 'CC013'), // Cartes de coeur
('CR001', 'CR002', ..., 'CR013'), // Cartes de carreaux
('CT001', 'CT002', ..., 'CT013'), // Cartes de trefle
('CP001', 'CP002', ..., 'CP013') ); // Cartes de pique
Type
TCouleurCarte = (ccCoeur, ccCarreau, ccTrefle, ccPique);
TCarte = record
Couleur : TCouleurCarte;
ImageIndex : Byte;
Visible : Boolean;
end;
PCarte = ^TCarte;
//je ferai peut-être aussi une liste centralisée des "pointeurs"
//TListeCartes : Array[1..52] of PCarte;
//ou comme ceci TListeCartes : Array[TCouleurCarte] of array[1..13] of PCarte
// et la le "Couleur : TCouleurCarte;" dans le record pourrait-être supprimé et je mettrai un "ImageCarte : TBitmap" à la place
// ce qui nous affranchirai du tableau ci-dessous
TImageCartes = array[TCouleurCarte] of [1..13] of TBitmap;
function RecupereImageCarte(Couleur : TCouleurCarte; ImageIndex : Byte) : TBitmap;
function CreerCarte(Couleur : TCouleurCarte; ImageIndex : Byte; EstVisible : Boolean : PCarte;
function AjouteCarteDansListe(Liste : TList; UneCarte : PCarte) : Integer;
function PiocheDerniereCarteDansListe(Liste : TList) : PCarte;
procedure EffaceDerniereCarteDansListe(Liste : TList);
procedure DetruitListe(Liste : TList);
procedure TransfertImageCarteVersTImage(UnTImage : TImage; CarteImage : TBitmap);
procedure InitListeDeCartes;
procedure DetruitListeDeCartes;
Var
Cartes : TImageCartes;
ListeDeCarte : TList;
implementation
function CreerCarte(Couleur : TCouleurCarte; ImageIndex : Byte; EstVisible : Boolean : PCarte;
Var
NouvelleCarte : PCarte;
begin
new(NouvelleCarte);
NouvelleCarte^.Couleur := Couleur;
NouvelleCarte^.ImageIndex := ImageIndex;
NouvelleCarte^.Visible := EstVisible;
Result := NouvelleCarte;
end;
function RecupereImageCarte(Couleur : TCouleurCarte; ImageIndex : Byte) : TBitmap;
begin
Result := Carte[Couleur][ImageIndex];
end;
function AjouteCarteDansListe(Liste : TList; UneCarte : PCarte) : Integer;
begin
Result := List.add(UneCarte);
end;
function PiocheDerniereCarteDansListe(Liste : TList) : PCarte;
begin
Result := Liste.Items[(Liste.Count - 1)]
end;
procedure EffaceDerniereCarteDansListe(Liste : TList);
var
p : PCarte;
idx : Integer;
begin
idx := Liste.Count - 1;
p := Liste.Items[idx];
Liste.Delete(idx);
// Dispose(p); // ici on ne supprime pas le pointeur car il va être déplacer dans une autre liste on retire juste la référence dans la liste
end;
procedure DetruitListe(Liste : TList);
var
i : Integer;
p : PCarte;
begin
for i := (Liste.Count - 1) downto 0 do // ici on pourrais utiliser une boucle while avec la methode EffaceDerniereCarteDansListe
begin
p := List.items[i];
List.Delete(i);
Dispose(p);
end;
FreeAndNil(List);
end;
procedure TransfertImageCarteVersTImage(UnTImage : TImage; CarteImage : TBitmap);
begin
UnTImage.Canvas.Draw(0,0,CarteImage);
end;
procedure InitListeDeCartes;
var
i, j : Integer;
begin
for i := 0 to 3 do
begin
for j := 1 to 13 do
begin
Cartes[TCouleurCarte(i)][j] := TBitmap.Create;
Cartes[TCouleurCarte(i)][j].LoadFromResourceName(HInstance, cNomResourceCartes[i][j]);
end;
end;
end;
procedure DetruitListeDeCartes;
var
i, j : Integer;
begin
for i := 0 to 3 do
begin
for j := 13 downto 1 do
begin
FreeAndNil(Cartes[TCouleurCarte(i)][j])
end;
end;
end; |
Partager