七並べゲームにはいくつかのローカルルールが存在します。人と七並べをしていて「えっ、そんなルールがあったの?!」と驚かされることもあります。こういうルールはやる前に確認しておきましょう。

AとKは隣り合っているとみなす。スペードの7からKまでが場に出ている時にはスペードのAを出すことが許されるというルールもあります。また7からAまでが出ている時にはスペードのKを場に出すことが許される。

スペードの7からKまでが場に出されたことでスペードのAを出すことが許されるようになった場合、これまで同様、6,5,4というカードの出し方が許されるかどうかという問題があります。

許されるかどうかはローカルルールによって異なります。許すというルールの方が一般的ですが、許さないルールもあります。いわゆる「トンネルルール」です。

今回はトンネルルールを適用します。

どうすればよいのか?

出せるカードを取得するGetCanTakeoutメソッドを作成しましたが、AやKがすでに出されている場合は、これを一部変更すれば使えそうです。ではさっそくやってみましょう。

処理が若干ややこしくなりそうなので、それぞれのマークについて調べることにしました。

以下はマークを指定して、それぞれについて出すことができるカードを調べるメソッドです。

変更しないといけないときはAとKがすでに置かれているときです。両方とも置かれていない場合は従来の方法で取得します。Aのみが置かれているときはKしかおけません。逆にKしか置かれていないときはAしかおけません。

もしAとKの両方が置かれている場合は、テーブルに置かれていないカードを取得して、その最大値と最小値でつぎに出すことができるカードを調べます。

あとは変更する部分は特にありませんが、残りの枚数を表示するようにしました。

まずステータスバーに残り枚数を表示させるToolStripStatusLabelを作成します。外観とToolStripStatusLabelの名前は以下のとおりです。

<デザイナ>

残りの枚数を表示させるタイミングはカードの残数が変わったときです。

まずゲーム開始時にカードの残数が決まります。

自分と他のライバルがカードを出したときに残数が変化するので表示させます。