我在上面的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在开发游戏中有很重要的位置,使用方法大多如我上面所写的这样。
分享到:
相关推荐
通过以上内容,我们可以看出 `TList` 在 Delphi 中是一个极其有用的类。它不仅提供了基础的数据存储功能,还具备动态调整大小、排序等多种高级特性,极大地提高了程序开发的效率和灵活性。对于 Delphi 程序员而言,...
- **匿名方法**(也称为 Lambda 表达式)是在 Delphi 2009 之后引入的,用于在代码中定义简单的、一次性的函数。 - 例如: ```pascal var Lst: TList<TObject>; begin Lst := TList<TObject>.Create; Lst....
1. **TList**: TList是Delphi中最基础的动态数组实现,可以动态添加、删除元素。它提供了Add、Insert、Remove等方法,使得操作数组元素变得简单而灵活。TList内部使用了指针来存储元素,因此它可以容纳任何类型的...
同时,为了方便管理,可以使用集合类(如TList或TArray)来存储多个联系人对象。 4. **搜索与排序功能**:为了快速查找和排列联系人,系统通常会提供搜索和排序功能。这可以通过实现自定义的比较函数,结合Delphi...
本篇将详细介绍两个在Delphi中使用正则表达式的实例。 首先,让我们理解什么是Delphi。Delphi是一款由Embarcadero Technologies开发的集成开发环境(IDE),主要用于编写Windows和Mac OS X平台上的原生应用程序。它...
例如,`TList<T>`、`TDictionary<TKey, TValue>`等容器可以帮助组织和操作数据,但一旦程序关闭,这些数据会丢失。 为了实现类似数据库的事务管理和数据一致性,开发者可以自己实现一套基于文件或内存的数据管理...
在Delphi中,我们可以利用线程安全的数据结构(如TList或TMonitor)来存储和管理连接,确保在多线程环境下正确地同步对连接池的访问。 在实现连接池时,还需要考虑以下几点: - 连接池的大小设定:根据系统资源和...
- `list`:基于Delphi的`TList`容器,用于存储`ContentValue`对象。 - **成员函数**: - `getCount()`:返回列表中元素的数量。 - `getItem(p:integer)`:根据索引`p`返回对应的`ContentValue`对象。 - `...
标题"ThreadsAndQueues_Queues_delphi_threads_"暗示了这个项目可能涉及到在Delphi中使用线程和队列来实现并发处理。Delphi,原名Borland Delphi,是一款基于Object Pascal的集成开发环境,它提供了强大的Windows...
Delphi提供了丰富的数据类型和容器类,如TList<T>或TStringList,方便开发者管理数据。 3. **逻辑控制**:这是程序的核心部分,负责处理用户的输入并生成相应的回复。可能使用条件语句(if...else)、switch语句...
### Delphi压缩目录的方法 ...通过以上分析,我们可以了解到如何使用Delphi结合VCLZip库来实现目录的压缩功能,并了解了一些关键参数的意义及使用方法。这对于Delphi开发者来说是非常实用的知识点。
在Delphi编程环境中,获取进程连接端口是一项重要的系统级编程任务,这通常涉及到网络通信、系统监控或者安全分析等领域。下面将详细讲解如何在Delphi中实现这一功能。 首先,我们需要了解进程和端口的基本概念。...
标题"Rnd.zip_delphi 随机_rnd_不同随机数_随机数"暗示了我们讨论的是如何在Delphi中使用`Rnd`函数或相关方法来生成不重复的随机数。`Rnd`函数是Delphi中的一个内置函数,用于生成0到1之间的浮点随机数,但不包括1。...
5. **代码实现**:在Delphi中,可以使用`TList`或`TArray`等动态数组结构来存储顶点和边。使用`TQueue`或`TStack`实现队列和栈的操作。此外,Delphi的`Readln`函数可用于从txt文件读取输入,`WriteLn`用于输出排序...
ConnectedComponents: TList; TemplateMatch: Integer; begin // 1. 图像获取 Bitmap := TBGRABitmap.Create('http://example.com/captcha.png'); // 2. 图像预处理 GrayBitmap := Bitmap.Grayscale; ...
- `list`: `TList`类型的对象,用于存储ContentValue对象。 - 方法说明: - `function getCount(): integer;`: 获取列表中元素的数量。 - `function getItem(p: integer): ContentValue;`: 根据索引获取列表中的...
在Delphi中,我们可以使用TList<T>或TArray<T>来实现数据池,这些容器提供了丰富的操作接口,方便添加、删除和查找元素。抽样算法可以通过循环和条件判断来实现,每次抽取后更新已抽取元素的状态。 3. **用户界面**...
使用了六个类五个模块类演示了atl的调用方法 class CDHtmlSinkHandler; // Events Sink Base class CDHtmlEventSink; // IHTMLDocument2 Events Sink // IDispatch class CDHtmlControlSink; // ActiveX Control ...
IV:Open Inventor中使用的文件格式 IVD:超过20/20微观数据维数或变量等级文件 IVP:超过20/20的用户子集配置文件 IVT:超过20/20表或集合数据文件 IVX:超过20/20微数据目录文件 IW:Idlewild屏幕保护程序 ...