Top >コンソール・アプリケーション集

ヘキサポーン Hexapawn

ヘキサポーン

 簡単なゲームを題材にした学習機械です数学者で数学パズル研究家のマーチン・ガードナー(Martin Gardner)氏によって紹介されことで有名になりました

ゲームのルール

 チェスを簡略化したゲームです

 3×3の盤上で白黒それぞれ三つの駒(ポーン)を使用します白の先手で交互に一手ずつ指すのはチェスと同じです

駒の動き
  1. 1マス前に進む
  2. 斜め前に相手の駒があるときは取ることができる
勝敗の決め方

 次の条件に当てはまった側が勝ちとなります

  1. 3マス目に自分の駒を進める
  2. 相手の駒を全て取る
  3. 相手の駒が動けないような配置にする

学習するマッチ箱

 ヘキサポーンは、マッチ箱とビーズ玉によって作成された学習機械と人間が対戦を行います何回か対戦を繰り返すうちに、マッチ箱が学習を行い、だんだんと強くなります

マッチ箱の準備
  1. 後手(黒)が打つ全ての盤面が書かれたラベルと、ラベルと同数のマッチ箱を用意します
  2. そのラベルに、次に打てる手を別々の色で記述します
  3. 全てのラベルをマッチ箱に貼って、記述された手と同じ色のビーズを入れます
マッチ箱
ゲームの進め方

 マッチ箱の手番では、次の操作を行います

  1. 現在の盤面と同じラベルが貼ってあるマッチ箱を探します
  2. そのマッチ箱から無作為にビーズを1つ取り出します
  3. ラベルを見て取り出したビーズの色に対応した手を打ちます

 以上のように、勝敗が決まるまで行いますマッチ箱が勝った場合には、取り出したビーズを全て元のマッチ箱に戻しますマッチ箱が負けた場合には、最後に打った手のビーズを取り除き、他のビーズを元の箱に戻します

プログラムについて

 プログラムでは、ラベルの貼ってあるマッチ箱とビーズ玉をシミュレートするのではなく、負けに至った手を記録し、その手を打たないようにしています

 具体的には、以下のようにします

  1. ルール上、可能な手を選びます
  2. もし、それが、記録してある負けに至る手であれば他の手を選びます
  3. コンピュータが負けた場合には、ビーズを取り除く代わりに、負けに至った最後の手(盤面と駒の動き)を記録します
   +---+---+---+
 3 | ○| ○| ○|      7  8  9
   +---+---+---+
 2 |   |:::|   |      4  5  6
   +---+---+---+
 1 | ●| ●| ●|      1  2  3
   +---+---+---+
     a   b   c

駒を選んでください(1~9):1
どこに動かしますか?(1~9):4

   +---+---+---+
 3 | ○| ○| ○|      7  8  9
   +---+---+---+
 2 | ●|:::|   |      4  5  6
   +---+---+---+
 1 |:::| ●| ●|      1  2  3
   +---+---+---+
     a   b   c

マッチ箱: b3 を b2 へ

   +---+---+---+
 3 | ○|   | ○|      7  8  9
   +---+---+---+
 2 | ●| ○|   |      4  5  6
   +---+---+---+
 1 |:::| ●| ●|      1  2  3
   +---+---+---+
     a   b   c

駒を選んでください(1~9):3
どこに動かしますか?(1~9):5

   +---+---+---+
 3 | ○|   | ○|      7  8  9
   +---+---+---+
 2 | ●| ●|   |      4  5  6
   +---+---+---+
 1 |:::| ●|:::|      1  2  3
   +---+---+---+
     a   b   c

マッチ箱: a3 を b2 へ

   +---+---+---+
 3 |:::|   | ○|      7  8  9
   +---+---+---+
 2 | ●| ○|   |      4  5  6
   +---+---+---+
 1 |:::| ●|:::|      1  2  3
   +---+---+---+
     a   b   c

駒を選んでください(1~9):4
どこに動かしますか?(1~9):7

   +---+---+---+
 3 | ●|   | ○|      7  8  9
   +---+---+---+
 2 |   | ○|   |      4  5  6
   +---+---+---+
 1 |:::| ●|:::|      1  2  3
   +---+---+---+
     a   b   c

白の勝ちです。
終了する場合は'Q'、続ける場合は他のキーを押してください

ソース・コード

PAPER BOWL
NEZEN