前回まではC#でババ抜きの作成をしてきました。

カードはそろったかを表示させる C#でババ抜きをつくる

今回は同じカードゲームでも別のものに挑戦します。

新しいカードゲームに挑戦

こんなサイトを見つけました。

トランプの遊び方

ポーカーなどの対戦ゲームではコンピュータ側のアルゴリズムを考える必要があるのですが、比較的簡単にできそうなので、ドボンをやってみようと考えています。

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

ドボンのルールについて

簡単にどのようなゲームなのか説明しておきましょう。

NO(ウノ)のトランプ版といってもよいゲームです。場札と同じ数字かマークのカードを出して自分の手札を先になくしたほうが勝ちです。

それからカードには役札があります。次にカードを出すはずの人にカードを出させない強制パス、順番を逆回りにすることができるカード、NO(ウノ)のワイルドカードのように機能するカード……、このような役札があるのです。

またドボンの特徴として、自分の持っている手札の数字の合計が、台札の数字とおなじときは「ドボン」と宣言して、手札のカードを全部いっきに出してあがるという一発逆転のようなこともできます。

ドボンにもローカルルールが・・・

ドボンにもローカルルールがあります。
よくC#の参考にさせていただいているサイトに

DOBON.NET

があります。

そのなかにこんなページもあります。

ドボンの遊び方

ここでは

上がるための唯一の手段は「ドボン」のみ
誰かがドボンをしてもゲームは終わらない。「ドボン返し」がある。
これはドボンして出した一番上のカードに別の誰かがドボンできる場合、さらにドボンすることができるというものです。
最終的にドボンをしたプレーヤーが勝者、ドボンをされたプレーヤーが敗者。

となっています。

最初に紹介したルールではドボンであがることも可能ですが、このルールではドボンでなければあがることができないということになります。しかもドボン返しのリスクあり。汗

一口にドボンといってもいろいろなルールがあります。

どうでしょうか? 面白そうでしょう?

そこでさっそく作成することにします。

カードは前回作成したものをそのまま使える?

七並べやババ抜きでCardというクラスを作成しました。これはカードゲーム一般でも使い回しができそうです。そこでこれをそのまま使います。一回クラスを作ってしまうと使い回しができるのが便利なところです。いっそのことライブラリ化してしまったほうがいいかもしれませんね。

Cardクラスをライブラリ化してしまおう

ここではCardクラスをライブラリ化することにします。

カードの絵柄を取得するのに若干時間がかかってしまう問題

カードの絵柄を取得するのに若干時間がかかります。1枚だけならたいした時間ではありませんが、53枚のカード全部だとけっこうな時間になってしまいます。そのためカードが初めて表示されるときにカードの絵柄を取得して、次回以降は保存したBitmapを使用しています。

コンストラクタのなかで取得するという方法もあるのですが、これでは呼び出し側でこのような使い方をするとフォームが表示されるまでかなりの時間がかかってしまいます。

カードの絵柄の取得を非同期処理でおこなうのはどうか?

非同期処理にすればフォームはすぐに表示されますが、フォームが表示されたときにすぐにカードを表示させる場合、問題がおきます。

こんな方法もあるかもしれません。

それでは次回からDobonの作成をおこなうことにします。