我認爲一個好的解決辦法是在這種情況下使用的隊列, 因爲不是通過遍歷數組來獲得下一個玩家,你可以簡單地使用 Queue.dequeue()
讓未來的球員。
asuming存儲您的現役球員陣列和經銷商是這樣的:
int[] activePlayers = { 1, 2, 3, 5, 8, 9, 10 };
int dealer = 1;
我做了一個簡單的方法爲你(當然,不是那麼簡單的,意大利麪條其實代碼,但它工作得很好)。
private Queue<int> getNextRoundQueue(int lastRoundDealer) {
Queue<int> roundQueue = new Queue<int>();
int indexOfDealer = -1;
//if last round dealer is still active player
if(activePlayers.Contains(lastRoundDealer)) {
indexOfDealer = Array.IndexOf(activePlayers, lastRoundDealer);
}
//if last round dealer left get next player as a dealer
//side note: there's gotta be a better way of doing that, but nothing came me to mind right now
else {
indexOfDealer = -1;
for(int i = 0; i < activePlayers.Length; i++) {
if(activePlayers[i] > lastRoundDealer) {
indexOfDealer = i;
break;
}
}
if(indexOfDealer == -1) indexOfDealer = 0;
}
//create the queue
//add dealer as first item into the queue
roundQueue.Enqueue(activePlayers[indexOfDealer < activePlayers.Length ? indexOfDealer : indexOfDealer - activePlayers.Length]);
for(int i = 0; i < activePlayers.Length - 1; i++) {
//add next player to the queue
roundQueue.Enqueue(activePlayers[indexOfDealer + i + 1 < activePlayers.Length ? indexOfDealer + i + 1: (indexOfDealer + i + 1) - activePlayers.Length]);
}
return roundQueue;
}
它將爲下一輪爲您準備隊列,使用它,你只需要做:
//you get the queue using my method, you pass last round dealer as argument
Queue<int> roundQ = getNextRoundQueue(dealer);
//first element of the queue is the dealer of next round
dealer = roundQ.Dequeue();
//while there are still players in the queue
while(roundQ.Count > 0) {
//get current player
int currentPlayer = roundQ.Dequeue();
// do something with him
}
這是偉大的,謝謝。我將如何處理重新添加一名球員。 玩家從經銷商左邊起依次相對於他們的位置。 因此,舉例來說,如果在第1輪中球員是{1,2,3,5,8,9,10},那麼經銷商將是1,所以首先行動將是2,然後是3,5,8,9 10。 如果一個新玩家從第7位開始回合,那麼我們需要將他添加到列表中(我們可以使用ListName.Add來完成,但這會將他添加到列表的末尾),但我們將需要在5和7之間添加他。因此,第2輪的新訂單將需要{3,5,7,8,9,10,1}。 – AntonZ
@AntonZ「如果一個新玩家開始在第7個位置」和「但是我們需要在5到7之間添加他」並不真正連貫。舊名單中沒有7個。你如何確定新的職位?基於以前的元素?如果是這樣,那麼德米特里在他的評論 –
Mong中有一個很好的解決方案,遊戲中最多有10個玩家位置。玩家可以在任何座位位置進入,1到10.當每一輪的順序都圍繞莊家旋轉時,莊家旁邊的玩家始終順時針方向回到莊家。它在撲克手中也是一樣。 因此,如果新玩家進入並從座位位置7開始玩,他將需要在座位位置6的玩家之間行動(如果有一個和8個(如果有的話)。 – AntonZ