Delphi中的索引属性-初学者可以在游戏对象中访问多个玩家对象

Delphi中的索引属性-初学者可以在游戏对象中访问多个玩家对象,delphi,Delphi,我是一个Delphi初学者。我有这个while循环,而不是只有一个玩家(player1),我希望有很多玩家,写为player[I]。我已经编辑了我的类,它允许我添加[I] while i < FMyPlayers.TeamCount do begin buttonSelected := MessageDlg('Placeing Unit: '+FMyPlayers.Player[i].Values['name']+'.',mtError, mbOKCancel,

我是一个Delphi初学者。我有这个while循环,而不是只有一个玩家(player1),我希望有很多玩家,写为player[I]。我已经编辑了我的类,它允许我添加[I]

   while i < FMyPlayers.TeamCount do
    begin
       buttonSelected := MessageDlg('Placeing Unit: '+FMyPlayers.Player[i].Values['name']+'.',mtError, mbOKCancel, 0);
          if buttonSelected = mrCancel then exit;
       imageyouwant.LoadFromFile(thisdir+'\char\'+FMyPlayers.Player[i].Values['picon']);
       Hexmap1.ImageAHex(ImageYouWant , bsSolid, position);
       FMyPlayers.Player[i].Add('pos='+inttostr(position.x)+inttostr(position.Y));
       FMyPlayers.PlaceUnit := false;
    end;
我的MYPlayer类如下所示

TPlayers = class
Private
  p : array[1..20] of TStringList;
  FPlaceUnit: Boolean;
  FTeamCount: Integer;
Public
  property Player: array[1..20] of TStringList read P;
  property PlaceUnit : Boolean read FPlaceUnit write FPlaceUnit;
  procedure AddPlayer (PlayerNo : integer; player : String);
  property TeamCount : Integer read FTeamCount write FTeamCount;

 constructor Create;   virtual;
End;

这不是一个真正的答案,而是对沃伦·p的建议进行了扩展。看起来您的类从一开始就没有正确设计

uses Generics.Collections;


TPlayer = class
 // add player related properties & routines here
end;

TGame = class
 protected  
   // all fields go here
   FPlayers : TObjectList<TPlayer>;

 public

   function AddPlayer(settings : TStringList) : TPlayer; 

   property Player[index:Integer]:TPlayer read GetPlayer;
end;
使用泛型;
TPlayer=class
//在此处添加与玩家相关的属性和例程
结束;
TGame=类
受保护的
//所有领域都在这里
FPlayers:TObjectList;
公众的
函数AddPlayer(设置:TStringList):TPlayer;
属性播放器[索引:整数]:TPlayer read GetPlayer;
结束;

是否要将FMyPlayers类(未显示定义)从任何类型更改为任何类型的数组?我们希望看到一些努力。展示你的类型。FMyPlayerPlayer1声明为什么?尝试将其更改为FMyPlayers:TObjectList。在创建我自己的类时仍然有点新,但这就是我的FMyPlayers类的功能。也不必是6,也可以是20。。我一直在尝试重做,这样你就可以选择x个玩家,而不仅仅是6个。只是还没有达到这一部分。为什么一个玩家用
TStringList
表示?如果改用类/记录不是更好吗?我使用stringlist,因为根据选择的玩家名称,它读取该玩家ini文件中的所有统计信息。我一直在尝试制作一个游戏,但不确定是否要为此使用记录..不是记录。物体。看看谁的答案。通过OOP规则,您可以创建表示(a)真实世界概念(游戏玩家)或(b)可感知对象的对象。从(a)开始,最终你会开始理解(b)。读一些德尔福的书!好的,我编辑了我的播放器类,但不是我得到的错误,因为我不确定我做得对。当然,在这一行“property Player:TStringList的数组[1..20]读取P;”我得到了错误idntifer预期,但找到了数组,并且TStringList的不兼容类型TStringList和TStringList的数组[1..20]忘记了数组并使用TObjectlist而不是从未使用过,如何将其添加到我的播放器属性中?我编辑了whosrdaddy的答案-您应该声明一个名为player的属性,该属性被索引。然后您可以编写Game.Player[3],Delphi将其翻译为Game.GetPlayer(3)。您必须编写GetPlayer方法。看看你能不能弄明白!:-)还可以使用
默认值
索引器属性;
uses Generics.Collections;


TPlayer = class
 // add player related properties & routines here
end;

TGame = class
 protected  
   // all fields go here
   FPlayers : TObjectList<TPlayer>;

 public

   function AddPlayer(settings : TStringList) : TPlayer; 

   property Player[index:Integer]:TPlayer read GetPlayer;
end;