`
woxiaoe
  • 浏览: 283232 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

DELPHI中使用Tlist类的简单分析

阅读更多

我在上面的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在开发游戏中有很重要的位置,使用方法大多如我上面所写的这样。
本文出自 “狗窝” 博客,请务必保留此出处http://fxh7622.blog.51cto.com/63841/29548 

 

分享到:
评论

相关推荐

    delphi Tlist详解

    通过以上内容,我们可以看出 `TList` 在 Delphi 中是一个极其有用的类。它不仅提供了基础的数据存储功能,还具备动态调整大小、排序等多种高级特性,极大地提高了程序开发的效率和灵活性。对于 Delphi 程序员而言,...

    delphi面试题.pdf

    - **匿名方法**(也称为 Lambda 表达式)是在 Delphi 2009 之后引入的,用于在代码中定义简单的、一次性的函数。 - 例如: ```pascal var Lst: TList<TObject>; begin Lst := TList<TObject>.Create; Lst....

    Delphi.Collections-1.1.1.zip

    1. **TList**: TList是Delphi中最基础的动态数组实现,可以动态添加、删除元素。它提供了Add、Insert、Remove等方法,使得操作数组元素变得简单而灵活。TList内部使用了指针来存储元素,因此它可以容纳任何类型的...

    delphi编写的通讯录

    同时,为了方便管理,可以使用集合类(如TList或TArray)来存储多个联系人对象。 4. **搜索与排序功能**:为了快速查找和排列联系人,系统通常会提供搜索和排序功能。这可以通过实现自定义的比较函数,结合Delphi...

    两个delphi的正则实例

    本篇将详细介绍两个在Delphi中使用正则表达式的实例。 首先,让我们理解什么是Delphi。Delphi是一款由Embarcadero Technologies开发的集成开发环境(IDE),主要用于编写Windows和Mac OS X平台上的原生应用程序。它...

    Delphi无数据库存保存、修改数据

    例如,`TList<T>`、`TDictionary<TKey, TValue>`等容器可以帮助组织和操作数据,但一旦程序关闭,这些数据会丢失。 为了实现类似数据库的事务管理和数据一致性,开发者可以自己实现一套基于文件或内存的数据管理...

    delphi ado 数据库连接池

    在Delphi中,我们可以利用线程安全的数据结构(如TList或TMonitor)来存储和管理连接,确保在多线程环境下正确地同步对连接池的访问。 在实现连接池时,还需要考虑以下几点: - 连接池的大小设定:根据系统资源和...

    数据库帮助类-无bug

    - `list`:基于Delphi的`TList`容器,用于存储`ContentValue`对象。 - **成员函数**: - `getCount()`:返回列表中元素的数量。 - `getItem(p:integer)`:根据索引`p`返回对应的`ContentValue`对象。 - `...

    ThreadsAndQueues_Queues_delphi_threads_

    标题"ThreadsAndQueues_Queues_delphi_threads_"暗示了这个项目可能涉及到在Delphi中使用线程和队列来实现并发处理。Delphi,原名Borland Delphi,是一款基于Object Pascal的集成开发环境,它提供了强大的Windows...

    Delphi聊天狗小程序.7z

    Delphi提供了丰富的数据类型和容器类,如TList<T>或TStringList,方便开发者管理数据。 3. **逻辑控制**:这是程序的核心部分,负责处理用户的输入并生成相应的回复。可能使用条件语句(if...else)、switch语句...

    Delphi压缩目录的方法

    ### Delphi压缩目录的方法 ...通过以上分析,我们可以了解到如何使用Delphi结合VCLZip库来实现目录的压缩功能,并了解了一些关键参数的意义及使用方法。这对于Delphi开发者来说是非常实用的知识点。

    Delphi下获取进程连接端口.rar

    在Delphi编程环境中,获取进程连接端口是一项重要的系统级编程任务,这通常涉及到网络通信、系统监控或者安全分析等领域。下面将详细讲解如何在Delphi中实现这一功能。 首先,我们需要了解进程和端口的基本概念。...

    Rnd.zip_delphi 随机_rnd_不同随机数_随机数

    标题"Rnd.zip_delphi 随机_rnd_不同随机数_随机数"暗示了我们讨论的是如何在Delphi中使用`Rnd`函数或相关方法来生成不重复的随机数。`Rnd`函数是Delphi中的一个内置函数,用于生成0到1之间的浮点随机数,但不包括1。...

    拓扑排序delphi程序 含代码

    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. **用户界面**...

    vc++ 开发实例源码包

    使用了六个类五个模块类演示了atl的调用方法 class CDHtmlSinkHandler; // Events Sink Base class CDHtmlEventSink; // IHTMLDocument2 Events Sink // IDispatch class CDHtmlControlSink; // ActiveX Control ...

    网管教程 从入门到精通软件篇.txt

    IV:Open Inventor中使用的文件格式 IVD:超过20/20微观数据维数或变量等级文件 IVP:超过20/20的用户子集配置文件 IVT:超过20/20表或集合数据文件 IVX:超过20/20微数据目录文件 IW:Idlewild屏幕保护程序 ...

Global site tag (gtag.js) - Google Analytics