delphi中Tlist的使用。
阿新 • • 發佈:2019-02-01
我在上面的BLOG中寫到了使用指標的方法。在DELPHI中指標最常見的就是和類TLIST結合起來使用。下面是一個很簡單的例子,希望對這個例子的分析能讓大家對使用TLIST類有一個簡單的認識。
程式碼的功能是使用指標和Tlist來生成一個牌串,並將牌串儲存在t_CardInfo中。
procedure TForm1.Button1Click(Sender: TObject);
const
//黑桃,紅桃,方塊,草花
CardType:array[0..3] of String = ('S','H','D','C');
const
//取出的牌數
CardNums = 4;
type
//儲存牌的指標資訊
RCardrecord = record
CardInfo:String[2];
end;
PCard = ^RCardrecord;
var
t_List:TList;
I:Integer;
t_Sub,t_Spare:Integer;
t_CardType,t_CardNum:String;
p_Card:PCard;
t_Random:Integer;
t_CardInfo:String[8];
Count:Integer;
begin
//定義一個連結串列
t_List:=TList.Create;
//使用迴圈將52張牌放入連結串列中
for I:=1 to 52 do
begin
t_Sub:=I div 14;
t_Spare:=I mod 14;
t_CardType:=CardType[t_Sub];
t_CardNum:=IntToHex(t_Spare,1);
New(p_Card);
p_Card.CardInfo:=t_CardType+t_CardNum;
t_List.Add(p_Card);
end;
//使用隨機從52張牌中抽取4張牌,並儲存在 t_CardInfo中
Randomize;
for I:=1 to CardNums do
begin
t_Random:=Random(t_List.Count);
p_Card:=t_List.Items[t_Random];
t_CardInfo:=t_CardInfo+p_Card^.CardInfo;
t_List.Delete(t_Random);
DisPose(p_Card);
end; //清空連結串列中的指標
Count:=t_List.Count;
for I:=Count-1 downto 0 do
begin
p_Card:=t_List.Items[I];
t_List.Delete(I);
DisPose(p_Card);
end; //釋放連結串列
t_List.Free; end; 分析: 1:我們首先建立一個Tlist類的物件t_List。 2:將52張牌按照相應的格式儲存在這個t_List中。注意,這裡t_List中儲存的是每個牌的指標。在Tlist中的儲存格式類似於下圖:
3:隨機從這個連結串列中取出4個指標,並將指標對應的牌資訊儲存在變數t_CardInfo。因為在將指標插入到t_List中的時候,我們使用了New函式來申請記憶體,所以當從連結串列中刪除這個指標的時候,一定要使用Dispose函式來釋放,否則會形成記憶體洩露。
4:將t_List中剩餘的指標釋放。
5:釋放物件t_List物件。
使用類Tlist在開發遊戲中有很重要的位置,使用方法大多如我上面所寫的這樣。
const
//黑桃,紅桃,方塊,草花
CardType:array[0..3] of String = ('S','H','D','C');
const
//取出的牌數
CardNums = 4;
type
//儲存牌的指標資訊
RCardrecord = record
CardInfo:String[2];
end;
PCard = ^RCardrecord;
var
t_List:TList;
I:Integer;
t_Sub,t_Spare:Integer;
t_CardType,t_CardNum:String;
p_Card:PCard;
t_Random:Integer;
t_CardInfo:String[8];
Count:Integer;
begin
//定義一個連結串列
t_List:=TList.Create;
//使用迴圈將52張牌放入連結串列中
for I:=1 to 52 do
begin
t_Sub:=I div 14;
t_Spare:=I mod 14;
t_CardType:=CardType[t_Sub];
t_CardNum:=IntToHex(t_Spare,1);
New(p_Card);
p_Card.CardInfo:=t_CardType+t_CardNum;
t_List.Add(p_Card);
end;
//使用隨機從52張牌中抽取4張牌,並儲存在 t_CardInfo中
Randomize;
for I:=1 to CardNums do
begin
t_Random:=Random(t_List.Count);
p_Card:=t_List.Items[t_Random];
t_CardInfo:=t_CardInfo+p_Card^.CardInfo;
t_List.Delete(t_Random);
DisPose(p_Card);
end; //清空連結串列中的指標
Count:=t_List.Count;
for I:=Count-1 downto 0 do
begin
p_Card:=t_List.Items[I];
t_List.Delete(I);
DisPose(p_Card);
end; //釋放連結串列
t_List.Free; end; 分析: 1:我們首先建立一個Tlist類的物件t_List。 2:將52張牌按照相應的格式儲存在這個t_List中。注意,這裡t_List中儲存的是每個牌的指標。在Tlist中的儲存格式類似於下圖: