ドボンにもあったポンとカン

ドボン – Wikipedia によるとこんなルールがあるそうです。

通常1枚ずつしか手札は捨てられないが、他プレイヤーが捨てたカードを複数枚所持していた場合は「ポン!」「カン!」などとコールし、場に複数カードを捨てられる。

例えば場に「13」が捨てられ自分が2枚「13」を持っていたら「ポン」のコールをし2枚一気に場に出せる。

ただリスクも高いです。

他プレイヤーで合計が26になる者がいた場合それはドボンになり、上がられた場合、手札の合計は2倍になる。通称ポン・ドボンである(3枚の場合はカン・ドボンで手札の合計は3倍となる)。

例のごとくコンピュータには乱数で適当にやってもらいます。ユーザーがポンやカンをする場合、そのためのダイアログを出す必要があります。

設定のダイアログ

まず設定のダイアログをつくります。

順番が回ってきた段階でダイアログを表示し、ユーザーにどうするのか(1枚だけ出す、複数枚の場合はカードも指定)を尋ねます。ドボンになると上がられた場合、手札の合計が2倍または3倍になるのでライバルがこれをする確率は低めにします。ただ同じ数字のカードしか持っていない場合はそのまま出させます。

ConfigDialogクラスの変更

いわゆる「ポン・カン」はありかどうかに関する情報を追加します。

カードを複数出せるようにする

カードを出す処理をしているのはPlayerクラスのPutCardメソッドです。そこでここにカードを複数出すための処理を追加します。

カードを2枚出すとドボンできる番号がいつもの2倍または3倍になるのでカードにそれがわかるように記録します。

あとはライバルのターンを処理するメソッドのなかで呼び出します。

実際に呼び出されるメソッドを以下に示します。戻り値は次のプレイヤーです。

自分がカードを出す場合

自分自身がポンまたはカンできる場合があります。ライバルのターンがおわるとCheckPrevMyTurnメソッドが実行されるので、このときにポンまたはカンできるかどうか調べて、できるときはダイアログを表示して選べるようにします。

ダイアログは

役札をつくる(Q編) C#でドボンをつくる

で使用したものを使います。

Queen以外でも使えるように表示内容を変更します。ポンまたはカンをした場合は次のプレイヤーを、[辞退]した場合は-1を返します。

FormQueenはQueenを出すときのために作られたものなので、他の番号の場合は表示を変える必要があります。それをするのがInitQueenFormメソッドです。

ダイアログが閉じられたときに情報を取得してカードを出す出さないを決めなければなりません。GetInfoQueenFormメソッドは、ポンまたはカンをするのか、そのときに一番上に置かれるカードは何かを取得します。