×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

8クィーン・ゲーム

8×8のチェス盤に2人で交互にクィーンを置いていき、自分の手番のときに置き場所が無いほうが負けというゲームです。なお、すでに置かれているクィーン(自分が置いたものも含め)の利き筋に新しいクィーンを置くことはできません。
いわゆる8クィーンパズルのゲーム版というところです。
出典である「ナノピコ教室」では、先手必勝かどうかを調べるという問題でしたが、ここでは、実際に人との対戦が出来るようにしてみました。



※ボタンをクリックするとゲームを開始できます。
※ちなみにあなたが後手の場合は、絶対に勝てません。先手でもちゃんと考えないとなかなか勝てません。

この手のゲームとしては、探索する手が少ないため、勝つ手が見つかるまで全探索しています。Computerが先手の場合に、最初の一手を見つけるのに時間がかかりますが、それ以外は、すぐに探索が終了します。

実際のこの手のゲームプログラムでは、序盤戦は定石を用いたルーチンになっていると思われますが、8クイーンゲームでは、探索手の数が少ないので、愚直に全探索をしています。
枝刈りなどは行っていません。

プログラムを単純化するために、黒石をコンピュータ、白石を人間に固定していますが、実際の探索をするSearchメソッドは、石の色に関係なく探索が出来るようにしてあります。
逆にこのメソッドで石を固定してしまうと、余計に複雑になってしまいます。

Searchメソッドでは、
1.自分の石をある位置に置いてみる
2.相手の石で Searchを呼び出す (再帰処理)
     (つまり、「ここにおいたら、次に相手はどう打つかな」を考える)
3.結果が自分の石の勝ちならば、ここで終了(戻る)
4.自分の石が勝てなかったら、1に戻り別の場所を試してみる
5.どこに置いても勝てなかったら、相手の勝ちとして戻る。

という動きになっていて、2手先、3手先を読むのではなく、勝敗がきまるまで、ずーっと先読みを続けています。
この手の思考ゲームとしての基本構造を示せるという点で、8クィーンゲームはなかなか良い題材だと思います。


ソースコードにはコメントを付加していますので、詳しくはソースコードを見てください。以下にソースコードを示します。

※このプログラムは、そのほかのプログラムでも利用する Board, BoardCanvasクラスを利用しています。Board, BoardCanvasクラスのソースコードはこちらに掲載しています。

■Computer.cs
 

■ChessBoard.cs


■MainPage.xaml.cs
  
 
■MainPage.xaml
   

※『ナノピコ教室・プログラミング問題集』(駒木悠二+有澤誠 編 共立出版株式会社)に掲載されている問題を一部変更し、GushwellがC#で解いたものです。