ドボンのローカルルール

ドボンにはさまざまなローカルルールがあるので混乱しないように最初に確認をしておく必要があります。

出せるカードが手札にない時は出せるカードを引くまで山からカードをとり続けるか、1枚だけなのか?
1枚だけのとき出せるカードを引いたときすぐに出せるのか
上がりはドボンだけか最後のカードを出したときもありなのか?
ドボン返しは出されたカードの合計なのか一番上のカードの数か?
ほかにもドボンは足し算だけでなく引き算、かけ算、割り算(なかには相加平均、相乗平均も含む)もありか?

などなど

設定をしたらファイルに保存することができるようにします。

カードが出せないとき取らなければならないカードは1枚だけにする

まず設定を管理するクラスを作成します。

そして以下のようなダイアログを作成します。ダイアログ作成時にConfigクラスのデータを読み込ませて[OK]がクリックされたらダイアログのデータを設定に反映させます。

PlayerクラスのOnFindCanPutNoCardメソッドはカードが出せないときに出せるカードを引くまでカードを引き続けます。これを以下のように書き換えます。

これまでOnFindCanPutNoCardメソッドはnullではない値を返してしまいたが、これからはそうとは限りません。呼び出し元のPlayer.PutCardメソッドも変更する必要があります。

Form1クラスのRivalsTurnメソッドではライバルの動作を処理していましたが、出せるカードがない場合は1枚だけ引くという動作ではカードを出さない場合もあります。CenterCardプロパティにnullを設定すると中央のカードが消えてしまうので条件文で処理をしています。

それから自分に順番が回ってきたときに出せるカードがあるかチェックしてない場合は出せるカードを引くまで自動で処理をしていましたが、この部分も書き換えます。