以前、C# WindowsFormsで殺しの七並べを作りました。今回はオンラインで他の人と対戦できるようにASP.NET coreで対戦型の殺しの七並べをつくります。

簡単なルール説明だけしておきます。普通の七並べは横につながっているカードしか出せませんが、このゲームは縦や斜めでもつながっていればカードを出すことができます。通常の七並べと同様、ローカルルールがたくさんありますが、ジョーカーは使わないのが一般的です。またいわゆる「トンネル」ルールもありません。パスの回数制限ですが、今回ここで作成するものはないものとします。

「殺し」の七並べではカードが殺される場合があります。それはカードが他のカードに囲まれた場合です。ただ囲めばどんな場合でも殺せるわけではなく条件があります。複数のカードの場合は四角く囲われていなければ死にません。

下の図ではクローバーの6が死んでいます。

複数のカードは四角く囲んだ場合だけ殺すことができます。

下の図の下部ではクローバーの5と6、上部ではスペードの5と6、ハードの5と6が死んでいます。

下の図のような囲み方では殺すことはできません。

順位ですが、殺されたカードの枚数がもっとも少ない人が優勝です。殺されたカードの枚数が同じ場合は先に上がった人が上位です。

ではさっそく作ってみましょう。このゲームは途中参加と途中退却が可能です。名前空間はKillSevenとします。

Constクラスの定義

定数を定義するConstクラスを示します。

プレイヤーの総数は5とし、ゲーム開始ボタンがクリックされたら10秒間待機してからゲームが開始されます。ゲームに参加している人の数がPLAYER_MAXに満たない場合はコンピュータが自動で着手をします。

Cardクラスの定義

カードを管理するためのCardクラスを定義します。

Suitプロパティはトランプに書かれているマークです。クローバーなら0、ダイヤは1、ハートは2、スペードは3です。Numberプロパティはカードに書かれている番号(1~13)です。スペードのAであれば Suit == 3、Number == 1です。PlayerNumberプロパティはこれを所有する(カードが出されたあとは所有していた)プレイヤーの番号(0~)です。殺されたカードの枚数を数えるときに必要になります。Randomプロパティはカードをシャッフルするときに使う乱数を格納します。

Playerクラスの定義

プレイヤーの状態を管理するためのPlayerクラスを定義します。

では、次回に続きます。