2016-05-07 56 views
6

注:我根據ajrwhite的答案做JavaScript代碼。希望它能幫助別人。確定撲克桌位置 - Sit'n圍棋比賽

鏈接:http://codepen.io/eMineiro/pen/EKrNBe

打開codepen控制檯看到工作的例子。

在撲克中,我們根據經銷商定義玩家位置。就像這樣:

enter image description here

藍:小盲注和大盲注位置

綠色:晚與經銷商/晚位置

黃色:中等倉位

粉紅色:早期位置

因此,假設這兩個數組:

players:[1,2,3,4,5,6,7,8,9,10]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early","early"]; 

在這種情況下, 「PLAYER1」 是 「大盲注」, 「player2」 是 「小盲注」, 「player3」 是「按鈕「.....

當changePositions(經銷商)被調用時,我想排序玩家陣列。例如:

changePosition(10); //means that "player10" now is the new Dealer 

而且結果應該是:

players:[2,1,10,9,8,7,6,5,4,3]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early","early"]; 

在遊戲過程中,玩家會被淘汰。所以我有一個函數可以排除「位置數組」中的「最後位置」並排除播放器。然後我需要再次調用changePosition(X),其中X是「player10」(實際經銷商)左側的下一個未消除的玩家。

實施例爲消除 「播放器1」,新的陣列應該是:

players:[2,10,9,8,7,6,5,4,3]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early"]; 

我需要再次調用changePosition(X),以確定新的位置,在這種情況下,X = 2,因爲「player2 「是實際莊家左邊的 」Player10的「

changePosition(2); 

,並且會導致:

players:[4,3,2,10,9,8,7,6,5]; 
positions:["bb","sb","btn","late","medium","medium","medium","early","early"]; 

當玩家被淘汰時,我如何找到新的經銷商?

注:我創建了一個名爲changeNextDealer()功能。負面指數不是問題,因爲下一個經銷商是順時針的。它在代碼筆鏈接中。

dealerArrayPosition-1; //But if bigBlind and smallBlind was eliminated simultaneously I get a negative position. 

我該如何映射負指數-1一樣,到最後的位置。或-2到LastPosition-1?有一個快速的方法嗎?

注意:這個問題仍然沒有答案,但不是本次討論的主要問題。我想一個會在一個分開的帖子中問。

我該怎麼做changePosition(代理商)功能?

我已經嘗試了這麼多,但無法弄清楚如何做到這一點。

注意:我創建了一個名爲changePosition()的函數。它在codepen鏈接中。

+0

所以你已經實現了'changePosition'? – migg

+0

這是主要問題。我正在努力。對我來說最困難的是這個事實,那就是「圈子名單」,而且我被負面立場困擾着。我正在做「如果條件」來檢查位置是否定的。如果位置是負數,我得到這個:「bbPosition = playersInTable.length + bbPosition」當bbPosition <0時 –

+0

然後顯示你的代碼不工作。 – migg

回答

2

我們假設玩家總是編號爲1-10。我們不需要兩個數據結構來存儲玩家位置和狀態。我們只需要一個索引的數據結構來存儲玩家狀態:

狀態1

positions:["btn","sb","bb","early","early","early","medium","medium","medium","late"]; 

國家2

positions: ["late","btn","sb","bb","early","early","early","medium","medium","medium"] 

國家3

positions: ["eliminated","late","btn","sb","bb","early","early","early","medium","medium"]; 

這會存儲與您的兩個陣列相同數量的信息,並且更一致。您只需訪問positions[0]看看播放器1的狀態是什麼,或者positions[9]供玩家10

現在有了這個更一致的結構,它應該是更容易在每一輪結束處理狀態的變化。

消除玩家

每一輪之後,消除玩家的狀態更改爲"eliminated"。此時您可能需要有一個臨時陣列,以便您可以檢查上一輪發生的事情是否仍會更新下一輪的信息。

如何陣列當作一個圓

移動經銷商芯片"btn"(currentPositionOfBtn+1)%10 - 這意味着從1的按鈕移動到2至3,等,但通過使用餘運算符和總我們確保從位置9(球員10)移動回到0(球員1)。

如果玩家currentPositionOfBtn+1)%10已被淘汰,那麼請檢查currentPositionOfBtn+2)%10等等 - 這是一個簡單的循環來實現。

重新計算位置

現在考慮到的位置變化的球員的描述中消除(由你到底有沒有「提前」或「中等」),我會建議重新計算從位置經銷商在每輪結束時,跳過所有標記爲「已淘汰」的玩家。

+0

非常感謝您的關注。仍然閱讀,理解和編碼,看看這是否100%正確。我相信這會起作用。 –

+0

http://codepen.io/eMineiro/pen/EKrNBe(感謝您的幫助,請參閱控制檯中的示例。 –