これまでパスは何回でもできましたが(そもそもパスの回数をカウントすらしていない)、パスできる回数には制限がある場合がほとんどであり、すでに定められた回数のパスをしているにも関わらず出せるカードがない場合は失格となります。

そしてゲームの途中でプレイヤーが脱落したら、そのプレイヤーがもっている手札は、場の該当箇所に置いた後、残りのプレイヤーはゲームを続けることになります。この場合、出せるカードを取得するときの処理が変わってきます。

まず各プレイヤーがすでに何回パスをしているか記憶しておく必要があります。これはint型の配列でよいかと思います。

自分がパスしたときの処理をするメソッドとしてMyPassを作成しました。パスの回数を記憶しておき、4回パスをしたら失格にします。

RivalPassはライバルがパスをしたときの処理をするメソッドです。

ライバルの手番で出せるカードがない場合、RivalPassが実行されます。

自分がカードを出したときに相手のターンになりますが、そのときに相手があがっているときだけで失格のときもスキップする必要があります。

自分があがってしまった後や失格になったときもライバルがゲーム続行可能のときは続行します。すべてのプレイヤーがあがるか失格になったらゲーム終了です。

カードを出したときやパスをしたときに残りのカード数やパスできる回数

これで失格の判定はできるようになりましたが、失格になったら手持ちのカードをテーブルの上に出さないといけません。そのための処理が必要なのとこの処理によって出せるカードがどれなのか判定する方法を考え直す必要があります。

失格になったときに呼び出されるメソッドはこんな感じになります。

ただこれだとGetCanTakeoutメソッドが正しく機能しません。次回、つくりなおします。

失格後の処理 C#で七並べゲーム (その7)