8クィーン・ゲーム
8×8のチェス盤に2人で交互にクィーンを置いていき、自分の手番のときに置き場所が無いほうが負けというゲームです。なお、すでに置かれているクィーン(自分が置いたものも含め)の利き筋に新しいクィーンを置くことはできません。
いわゆる8クィーンパズルのゲーム版というところです。
出典である「ナノピコ教室」では、先手必勝かどうかを調べるという問題でしたが、ここでは、実際に人との対戦が出来るようにしてみました。
※ボタンをクリックするとゲームを開始できます。
※ちなみにあなたが後手の場合は、絶対に勝てません。先手でもちゃんと考えないとなかなか勝てません。
この手のゲームとしては、探索する手が少ないため、勝つ手が見つかるまで全探索しています。Computerが先手の場合に、最初の一手を見つけるのに時間がかかりますが、それ以外は、すぐに探索が終了します。
実際のこの手のゲームプログラムでは、序盤戦は定石を用いたルーチンになっていると思われますが、8クイーンゲームでは、探索手の数が少ないので、愚直に全探索をしています。
枝刈りなどは行っていません。
プログラムを単純化するために、黒石をコンピュータ、白石を人間に固定していますが、実際の探索をするSearchメソッドは、石の色に関係なく探索が出来るようにしてあります。
逆にこのメソッドで石を固定してしまうと、余計に複雑になってしまいます。
Searchメソッドでは、
1.自分の石をある位置に置いてみる
2.相手の石で Searchを呼び出す (再帰処理)
(つまり、「ここにおいたら、次に相手はどう打つかな」を考える)
3.結果が自分の石の勝ちならば、ここで終了(戻る)
4.自分の石が勝てなかったら、1に戻り別の場所を試してみる
5.どこに置いても勝てなかったら、相手の勝ちとして戻る。
という動きになっていて、2手先、3手先を読むのではなく、勝敗がきまるまで、ずーっと先読みを続けています。
この手の思考ゲームとしての基本構造を示せるという点で、8クィーンゲームはなかなか良い題材だと思います。
ソースコードにはコメントを付加していますので、詳しくはソースコードを見てください。以下にソースコードを示します。
※このプログラムは、そのほかのプログラムでも利用する Board, BoardCanvasクラスを利用しています。Board, BoardCanvasクラスのソースコードはこちらに掲載しています。
いわゆる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#で解いたものです。
■ChessBoard.cs
■MainPage.xaml.cs
■MainPage.xaml
※『ナノピコ教室・プログラミング問題集』(駒木悠二+有澤誠 編 共立出版株式会社)に掲載されている問題を一部変更し、GushwellがC#で解いたものです。