3玩家纸牌游戏

时间:2012-09-24 18:09:34

标签: c#-4.0 visual-studio-2012 playing-cards

  

可能重复:
  3 player card game turn system

我正在制作一个GUI 3玩家纸牌游戏(1台人和2台电脑)。每位玩家手中有3张牌。在每一轮都有一个经销商,第一个玩牌的玩家是经销商右边的玩家。每个玩家只能在左玩家玩完后玩。 (这是纸牌游戏的基础)

每个玩家将3张牌放在桌子上之后。经销商按钮传递给右边的玩家并开始新一轮。

我需要帮助来做一个控制转弯的功能,这可以看出轮到谁来玩。我是人为转,它等待输入。如果是计算机转,它会调用calss的动作功能。

我现在拥有的是具有套装和价值的卡类。

作为卡片列表的Deck类(此类具有填充功能和绘图卡功能)

我有一个Table类,其中包含一个卡片列表(当玩家玩牌时,卡片就会出现)

我有一个Player类(同一个类适用于人类和计算机播放器 - 这样好吗?)

Player类有一个Hand类(这就是玩家的3张牌)

Game类有一个套牌,一个桌子和3个玩家。

我的功能是人类是第一个玩牌并将一张牌移到桌面上,然后两个电脑玩家各自移动一张牌。这只适用于人类玩家是第一个玩的人。一旦玩了每个玩家的3张牌,开始另一轮,在这一轮不是玩家而是首先玩电脑。

我不知道如何制作一个系统来控制它。我不想要代码,而是想法本身。

由于

1 个答案:

答案 0 :(得分:1)

我的播放器类中会有以下属性:

public bool IsComputer { get; set; }
public bool IsCurrentTurn { get; set; }
public int TurnOrder { get; set; }

这样,您可以根据他们是否是人类以及是否轮到他们来编写您的逻辑。您可以使用TurnOrder属性来确定接下来的轮次。

因此,如果您要创建这样的Player对象:

Player player1 = new Player();

您可以在主逻辑中添加如下内容:

if (player1.IsComputer) 
{
   PerformTurn();
}
else //Human
{
   //Logic to wait and allow human player to do his or her turn here
}

修改

为了确定轮到谁,我首先让我的玩家进入玩家列表。例如:

List<Player> players = new List<Player>
{
new Player {Name = "Player 1", IsComputer = false, TurnOrder = 0, IsCurrentTurn = true},
new Player {Name = "Player 2", IsComputer = true, TurnOrder = 1, IsCurrentTurn = false},
new Player {Name = "Player 3", IsComputer = true, TurnOrder = 2, IsCurrentTurn = false}
};

其次,我将创建一个函数,该函数使用每个玩家的TurnOrder属性来确定接下来的轮到谁。像这样的方法可以做到:

public Player GetNextPlayer()
{
   Player currentPlayer = players.First(x => x.IsCurrentTurn);

   //if player is last in the turn order return first player
   if (currentPlayer.TurnOrder == players.Max(x => x.TurnOrder).TurnOrder)
   {
       return players.Min(x => x.TurnOrder);
   }
   else 
   {
      return players.First(x => x.TurnOrder == (currentPlayer.TurnOrder + 1));
   }


}

当然,您可以使用列表的索引并完全跳过使用TurnOrder,但如果您想扩展您的游戏,使用索引作为转弯顺序可能会在以后伤害您。我认为TurnOrder属性更灵活。

要获得转弯中的下一位玩家,只需使用:

Player currentPlayer = GetNextPlayer();