当前位置: 首页 > 知识库问答 >
问题:

如何将对象列表均匀地分布到其他对象数组中

越朗
2023-03-14

我正在使用控制台制作一个纸牌游戏。一个类,分发商,包含一个名为public ulualConnecteCards(Player[]player)的方法。

此方法接受一个播放器数组作为参数,其中包含所有实例化的播放器对象。分发商类还包含一个名为List的字段

如何在分发服务器中均匀分发卡。甲板到给定阵型中所有玩家的甲板?阵型中的玩家数量限制为2人或4人(以平均分配牌组)。

这是我迄今为止所尝试的:

public void DistributeCards(Player[] players)
{
    int amountOfCardsTodistribute = Deck.Count / players.Length;
    for (int i = 0; i < amountOfCardsTodistribute; i++)
    {
        players[0].Deck.Add(Deck[i])
        Deck.RemoveAt(i)
    }
    Console.WriteLine("Distributor distributed deck.");
}

^在这个例子中,给定的玩家数量是2。正如我所希望的那样,分销商的一半牌都给了玩家[0]。当我复制第6行和第7行中的代码并将其粘贴到原始代码下方时(更改玩家索引),我得到了一个错误(NullReferenceException)。该索引不在列表的可能索引范围内。

具体来说,我要求的是一种结构,能够在偶数玩家之间分配牌组(52)中的牌数


共有1个答案

纪晨
2023-03-14

我用java开发了一款扑克游戏,用c#开发了一款21点游戏。在此之前,你最好将你的牌组建模为一个堆栈,这样可以更好地模拟真正的牌组的工作方式。您最好阅读堆栈,堆栈文档。你会发现很多纸牌风格的游戏都将纸牌模拟为堆叠,这会让你更容易在网上找到帮助。我已经为扑克中的玩家表编写了交易函数,该函数在堆栈中运行。

如果你的意思是每个球员都有相同的数量,那么我们可以这样做

int amountOfCardsTodistribute = Math.Floor(Deck.Count / players.Length);
for (int i = 0; i < amountOfCardsTodistribute; i+=amountOfCardsTodistribute )
{
    Player[i].Cards.AddRange(Deck.Skip(i).Take(amountOfCardsTodistribute));
}

如果我们需要把牌从牌堆里拿出来,均匀地“发牌”,

while(Deck.Count > players.Length)
{
    for(int i = 0; i < Players.Length; i++) 
    {
        Player[i].Cards.Add(Deck.ElementAt(0));
        Deck.RemoveAt(0);
    }
}

 类似资料:
  • 我有一个类来代表一个玩家的手牌。但是,我(在另一个类中)有一个数组列表,我想在其中表示一堆玩家手。问题是我不知道如何在多手牌的数组列表中将一张牌添加到手牌中。我有一个代表卡牌和一副牌的类,效果很好。我只是试图了解如何将对象添加到数组列表中的对象。谢谢!

  • 我最近接触了Java 8和它的Stream API,最近又接触了它的Collectors API,我发现它有潜力对Stream进行很多很多的转换,但我有一个情况,我不确定Java 8是否可能,甚至根本不可能。我有两个类: 我想知道是否可以从ClassA对象列表中生成一个ClassB对象的分组列表,该列表的值是从ClassA的字段中计算出来的。具体而言: 通过group和ID组合对类进行分组 当关键

  • 我正在尝试使用这些数据 https://api.nasa.gov/neo/rest/v1/neo/browse?api_key=demo_key 我成功地检索到了数据的“links”和“page”部分,但near_earth_objects数组为NULL。 我尝试了这篇文章中的建议: 使用Spring RestTemplate获取JSON对象列表 顶部答案给出错误: 下面是我的POJO的样子: 我

  • 我有List sample1=lists.newarrayList(BIGINTEGER1,BIGINTEGER2,BIGINTEGER3); 我必须创建一个新的列表sample2,其中还有一个值“bigInteger4”,以及sample1列表: 我怎么能那样做?

  • Navicat 还能让你管理其他 SQLite 对象:索引和触发器。在主窗口的主工具栏点击相应的按钮来打开对象列表。

  • Navicat 还能让你管理其他 SQL Server 对象:索引、同义词、触发器、备份设备、链接服务器、服务器触发器、程序集、数据库触发器、分区函数和分区方案。在主窗口中,点击 “其他”,然后选择一个对象来打开对象列表。