今度は自分だけでなく相手(コンピュータ)もカードを出せるようにします。

そのためには自分の番なのかどうかがわかるようにする必要があります。クリックしたとき自分の番ではない場合、なにもおきません。

クリックされたときの処理は前回とほとんど変わりません。最初にisMyTurnがfalseのときはなにもできないようにしたのと、カードを出したあと相手に手番を渡すようにしています。

コンピュータの処理が早いので、1人分が終わったら1秒間なにもしないで待つようにしています。

それから自分の番であってもカードが出せない場合もありますが、前回はそのときはどうすることもできませんでした。そこで順番がまわってきたときにカードが出せるかどうかを調べて、出せるカードがないときはパスするようにしました。

IsMyTurnプロパティは自分の番なのかどうかを知るためのものです。自分の番のときはステータスバーに「あなたの番です」と表示させます。

それからこのままではステータスバーに文字を表示させる部分の背景が緑色になってしまうので、コンストラクタで初期化しましょう。

まずゲームがはじまったときの処理です。

順番が回ってきたらカードが出せるか調べて出せない場合は自動的にパスします。そうでない場合はカードをクリックしたら出すことができます。

CanPlayerTakeoutCardメソッドはそれぞれのプレイヤーがカードを出せるか調べるメソッドです。引数が0のときは自分自身を対象としています。

出すことができるカードをクリックするとカードを出します。相手の手番のときにクリックしてもなにもおきません。そしてカードを出すと相手に手番を回します。

相手役3人分をコンピュータにやらせます。処理が早すぎるので1人分が終わったら1秒間なにもしないで待つようにしています。

RivalTurnメソッドは各相手にカードを出させるためのメソッドです。カードが出せるかどうか調べて出せるなら出させます。また再描画はフォーム全体に対してだと処理が遅くなるので出されたカードの部分だけにしています。

これだとカードがすべてなくなっても「パスしました」と表示され続けることになります。アガったのであればアガリの扱いをします。

これらのフィールド変数を使うのであれば、ゲーム開始時に初期化が必要です。

あとは相手のターンのときに

それからShowRankingメソッドがないとコメントで指摘がありました。申し訳ありません。ShowRankingメソッドを示します。これはメッセージボックスをつかって順位を表示させているだけです。