概要
今更ながら気になったのであるが、筆者が開発しているポーカーゲームと他のポーカーアプリで、トーナメントの際に脱落するプレイヤーが出た場合のポジション移動が異なるような気がしてきた。なんとなく、BTNを時計回りに1個動かせば良い気になっていたのであるが、もしかしたら筆者は間違っているのかもしれない。いや、もしかしなくても間違っているので、修正ついでに処理をまとめてみようというのが本稿の内容である。
BTNではなく、BBの位置を時計回りに1つ動かす
BTNを時計回りに1個動かすことの何が問題かというと、脱落するプレイヤーがいた場合、BBをスキップしてしまうプレイヤーが出てきてしまうことになる。例えば、
| A | B | C | D |
| BTN | SB | BB | UTG/CO |
でSBのプレイヤー(プレイヤーB)が脱落したと仮定する。このとき、BTNをそのまま1個動かすと
| A | B | C | D |
| BB | × | BTN | SB |
となるが、プレイヤーDはBBがスキップされてSBになってしまうことが分かる。BBの負担を1回避けることができてしまうということで、これは適切な処理ではないということになる。この場合、
| A | B | C | D |
| UTG | × | BTN | BB |
という割り当てになって、SBが存在しないというのが正しい処理であるようである(Dead SBというらしい)。SBの脱落以外はBTNを1個移動するでも同じ処理になるので、このケースだけ特別な処理が必要になる。
別の考え方として、BB>SB>BTNの順に優先順位を考えて
| A | B | C | D |
| UTG (BTN) | × | SB | BB |
として、SBではなくBTNが存在しない(もしくはBTNが移動しない)というルールもあるらしい(Dead BTN)。昔のルールはこちらだったらしいが、最近のルールでは前者の方法が採用されることが多いとのことだった。優先順位として、BB>BTN>SBの順で割り当てを優先する結果としてこのようなルールになっているようである。特に、フロップ以降のアクション順位が変わるため、ポジションの割り当ては適切に処理する必要がある。まあ、筆者のゲームではゲームルールの設定項目として選べるようにした方が良いのかもしれない(といいつつDead SBで対応して、将来的な拡張として検討する感じだろう)。
SBとBBが同時に脱落した場合
複数のプレイヤーが同時に脱落する場合は、以下のケースで分けられる。
- SBを除いたプレイヤーが脱落する場合
- SB+BB以外のプレイヤーが脱落する場合
- SBとBBのプレイヤーが脱落する場合
1.の場合は通常通りBTNを移動、2.の場合は前節におけるDead SBと同じ扱いになる。特殊処理になるのは3番目のケースである。
以下のようなケースを考えよう。
| A | B | C | D | E |
| BTN | SB | BB | UTG | CO |
この場合にBとCが同時に脱落したものとする。あくまで、BBは一つしか進まないので、この場合は
| A | B | C | D | E |
| SB | × | × | BB | BTN |
となるようである。なんとなくSBの割り当てが不公平に感じるが、BBの割り当てが優先される結果として、このような配置にするのが正しいようである。二人以上脱落するとよくわからなくなってしまうため、BBを一つ動かして、SB、BTNはそれぞれBBの1つ手前、2つ手前のプレイヤーに割り当てられるということになる。この場合、BTNが逆回転しているように見えるということで、なんとも不思議に感じるルールである・・・
もう一つの例として、複数のプレイヤーが同時に脱落した結果としてヘッズアップになる場合である。この場合はBTNが動かず、BBの位置だけが移動することになる。上の例で、SB、BB、COが同時に脱落した場合は
| A | B | C | D | E |
| BTN/SB | × | × | BB | × |
という割り当てになる。
特殊処理としては、SB+BB以外、SB+BBの2通りを組み込めば問題がなさそうである。実装上SBがいない場合という処理は特別に組み込まないといけないのと、SB+BBは結局BTNを1つ逆回転させるのと同じ処理なので、BTNの逆回転処理を組み込めばとりあえずの対応はできそうである。自分でトーナメント(S&G,MTT)のロジックを開発するという場合は注意が必要だろう。
