ドボンのルールはここではここに書かれているものを採用します。

ドボンのルールと遊びかた

まずカードを配る必要があります。

「ドボンのルールと遊び方」にはカードの配布について、このように書かれています。

ジョーカーは使わない。
「親」は左となりの人から時計回りに1枚ずつ「5枚」配る。
残ったカードは中央の場に重ねて積み札とする。

プレイヤーは4人

ゲームをするためにはプレイヤーが必要です。今回はあなたとライバルをあわせて4人にします。

プレイヤークラスは以下のとおりです。コンストラクタの引数Panelはカードが表示される部分(後述)です。実はこのままでは不十分で、カードを出すメソッドをつくる必要があります。

カードをつくる

次にカードをつくります。ジョーカーは使わないので作りません。

CreatePlayerメソッドとCreateCardsメソッドはアプリが起動して最初に1回だけ実行すればよいのでコンストラクタに入れてしまいましょう。

ゲーム開始のときはカードをシャッフルして、各プレイヤーに配ります。

乱数を発生させてカードのなかから適当に抜き取ったカードをShuffledCardsに格納しています。

シャッフルしたらカードを配ります。カードを持っているのであればクリアします。またルールでは5枚ずつなのでShuffledCardsの先頭から5枚取ります。そしてShuffledCardsからは5枚取り除きます。

カードを表示する

カードを配りおわったらライバルがもっているカードの枚数と自分のカードを表示させる必要があります。

フォーム上にコントロールを配置します。

4つのPanelを使用しています。下のパネルが自分のカードが表示される部分です。4つのパネルに東西南北の名前をつけます。

まず自分のカードを表示させる部分からやっていきます。

あとは表示させたいタイミングで

とやれば自分のカードを表示させることができます。

ライバルのカードは裏向きで表示させます。

順番は時計回りなので、自分が親なら 西、北、東の順番になります。ということはpanelWestにはPlayers[1]、panelNorthにはPlayers[2]、panelEastにはPlayers[3]のカードを表示させることになります。

処理は表が表示されるか裏が表示されるかの違いです。

このようにしておけば、ゲームが開始されたときにGameStartメソッドを呼べば図のように表示されるはずです。GameStartメソッドは以下のような内容です。

ちょっとデザイン的には最悪なので改善します。

デザイン的な部分を修正

プレイヤーを円形に並べるのであれば、自分のカードは左右均等の位置に表示させたい。
ババ抜きのときのようにライバルのカードを選択することはなく、持っている枚数がわかればよいのでカードは重ねて表示させてよいのではないか。

などです。

まずライバルのカードは重ねて表示するのであれば、これでよさそうです。カードの裏はどのカードも同じなのでいったん取得したものをそのままコピーして使っています。

しかしカードをフォーム上にバランスよく配置するためには工夫が必要です。西側なら左づめ、東なら右づめ、北側なら中央によせるとか・・・。

そこで引数をちょっと変えて、持っているカードと1枚目のカードを表示するX座標を引数にするメソッドに変更してみました。

自分のカードを表示させる

それから自分のカードを表示するメソッドですが、クリックしたときにどれかわかるようにするため、

カードが表示される矩形を求める
その矩形にカードを表示する

という方式に変えました。

GetRectanleMyCardはカードが表示される矩形を求めるメソッドです。

ShowMyCardsメソッドはGetRectanleMyCardによって求められた矩形にカードを描画するためのものです。

これで

が実行されると自分のカードが表示されるようになります。