2012-09-24 73 views
1

可能重複:
3 player card game turn system3玩家卡牌遊戲

我正在做一個GUI 3玩家卡牌遊戲(1人和2臺電腦)。每名球員手中有3張牌。在每一輪中都有一個經銷商,第一個玩牌的玩家是經銷商右邊的玩家。每位玩家只能在左邊玩家玩完後才能玩。 (這是紙牌遊戲的基礎)

在每個玩家將3張牌放在桌上之後。莊家按鈕傳遞給右側的玩家,並開始新的一輪。

我需要幫助來完成一個功能來控制轉彎,它可以看到輪到誰轉。我是人之轉,等待投入。如果它是電腦轉彎,它會調用calss的動作功能。

我現在所擁有的是一個帶套裝和價值的卡類。

甲板類,它是卡的列表(這個類有一個suffle功能和抽獎卡功能)

我有過的卡的列表(也就是在卡去當一個表類玩家扮演他們)

我有一個播放器類(同一類是人與計算機的球員 - 這是有益的)

Player類有一個手工類(多數民衆贊成在播放器的3卡)

遊戲類有o ne甲板,一桌和3名球員。

我有這樣的功能,人類是第一個玩牌並將一張牌移動到牌桌上,然後2個電腦玩家各移動一張牌。這隻有在人類玩家是第一個玩的時候纔有效。一旦每個玩家的3張牌被玩,開始另一輪,在這一輪不是玩家,而是電腦先玩。

我不知道如何讓一個系統來控制這個。我不想要代碼,而是想法本身。

感謝

+0

對不起,轉貼,但我沒來得及編輯 – capzulu

+0

你的問題被關閉,所以你決定重新發布它沒有修改?你爲什麼期望得到不同的結果? –

+0

我增加了更多的信息.​​..對不起,如果它仍然令人困惑 – capzulu

回答

1

我會像我的播放器下面類的一些屬性:

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

這樣的話,你可以寫你的邏輯基礎上,如果他們是人或者沒有,如果它是否輪到他們。您將使用TurnOrder屬性來確定下一個輪到誰。

所以,如果你正在創建您的播放器對象是這樣的:

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(); 
+0

謝謝,這很有用。但是,我如何使用TurnOrder屬性知道下一個玩家? – capzulu

+0

更新了我的答案 – ROFLwTIME