「ドボン」で一発逆転

ドボンには「「ドボン」と宣言してカードを全部いっきに出してあがることができる」というルールがあります。

ドボンできるのは自分の持っている手札の数字の合計が台札の数字とおなじときです。このとき手札のカードのスート(マーク)は関係ありません。

そこで今回はドボンできるようにします。これもPlayerクラスでやってしまいましょう。

ドボンできるかどうかを調べる

CanDobonはドボンできるかどうかを調べるメソッドです。

あとはライバルのターンでドボンできるかどうかチェックしてできる場合はドボンします。

ドボンしたらゲームは終了

誰かがあがったりドボンしたらゲームは終了です(ただし暫定的処理)。

ゲームが終了したにもかかわらずカードが出せてしまってはおかしいです。そこで戻り値で区別しています。

自分が出したカードはドボンされるのか?

自分が出したカードもドボンされる可能性があるのでチェックする必要があります。

ドボン返し

ドボン – Wikipediaをみるとドボンには「ドボン返し」というものがあることがわかります。

ドボンによる上がりは最終的に勝利者を確定するものではない。ドボンされたプレイヤーの残った複数の手札の合計が、ドボンされたのと同じ数だった場合、ドボンを「返す」ことができる。これをドボン返しと呼びます。

ドボンがありそうな場面で、例えば手札に「2」と「6」と「8」を持っている場合、最初から「2」と「6」でドボンを返すつもりで「8」を場に出してドボンを誘う作戦をとることもできます。

ドボン返しができる場合とは

ドボン返しができるのは「ドボンされたのと同じ数だった場合」、「ドボンして出した一番上のカード」と異なるローカルルールがありますが、ここでは「ドボンされたプレイヤー」が「ドボンされたのと同じ数だった場合」にします。(プログラムの作成を容易にするため)

上記のプログラムではドボンできるときは自動的に処理をしていましたが、ドボン返しがある場合は本当にドボンできるかどうか考えないといけません。カードの番号が大きくなるとドボンやドボン返しのリスクが大きくなるのですが、ここはいつものように乱数で適当に決めます。

もしドボンできるのであればドボンするかどうか判断してドボンを決行します。

OnDobonメソッドはドボンしたときにドボン返しがあるかどうか判定して結果を返します。

ドボンしたらドボンされた人のカードを引き取らなければならず、ドボン返しの場合はドボンした人がドボン返しした人のカードを引き取らなければなりません。そこで手持ちのカードの表示を変える必要があります。