オセロでパーフェクト!
小さい頃に覚える室内ゲームにオセロがあります。最初、8×8の升目に黒い石と白い石が襷掛けに置かれています。黒石が先手で白石が後手なのですが、交互に相手の石を挟んでひっくり返す単純な2人用ゲームです。互いに打てるところがなくなるまで交互に繰り返して、最後に白黒の石数を数えて勝敗を決めます。
1□□□□□□□□ 1○●●●●●●●
2□□□□□□□□ 2●○●●●●●●
3□□□□□□□□ 3●●○●○●○●
4□□□○●□□□ ⇒ 4●○●●●○○●
5□□□●○□□□ ゲーム進行 5●○○●●●○●
6□□□□□□□□ 6●○●○○○●●
7□□□□□□□□ 7●●●●●●○●
8□□□□□□□□ 8●●●●●●●○
このゲームは意外に奥が深く、強くなるにはそれなりに研究する必要があります。また、他のゲームと違って複数回対戦するときは取った石数が累積されるので、以下のようにA氏とB氏が戦って一勝一敗でも、合計ではA氏の勝利になります。
第一戦 42 対 22
第二戦 28 対 36
--------
70 対 58
ある意味、合理的ですね。対戦時間も15分もあれば勝負が付くので、忙しい人でも休息時間にちょっと遊べる最適のゲームです。
オセロの歴史
オセロの原型は1945年に遡ります。考案したのは当時、中学一年だった長谷川氏です。戦後まもなくだったので青空学級の状態で、休み時間に表と裏が白黒のボール紙を作って遊んでいたそうです。
その後、製薬会社に勤めることになった同氏によって、オセロは1973年に正式にルール化され、玩具メーカーのツクダから販売されました。第1回全日本オセロ選手権大会も同年に開催されています。
病院の医局長に、オセロはリハビリには最適と太鼓判を押されて、商品化への意思が固まったとのことです。
ただ、オセロに類似のゲームやルールは多く、1888年にイギリス人によってリバーシ(オセロとルールはほとんど同じ)が考案されていることもあって、名称としては世界的にリバーシーが有名です。実際、パソコン黎明期の頃のゲームにはオセロではなくリバーシーと銘打ったソフトが多かったものです。
そのリバーシですが、明治時代に日本に輸入されましたが、流行には至らず廃れていったそうです。そもそも黒と白の石でゲームを作ろうとすると、囲むか、挟むか、飛び越えるか、そして相手の石を取るか自分の石とするかくらいしかないでしょうから、似たようなルールのゲームは世界のどこかでいずれ生まれたことでしょう。
多分、オセロでオリジナルなのは同じ石の両面に黒白があることでしょう。それまでは黒石と白石を一々、取り替えていたそうですから、簡単・便利・速いで徐々に広まっていきました。ちなみにオセロを普及する際の試作品でも、初めは牛乳瓶のふたを張り合わせて石にしていたそうです。
現在は世界オセロ選手権大会(世界オセロ連盟)も開催されているくらいにメジャーなゲームとなり、世界的にもチェスについで2番目の人気を誇っています。外国製のオセロには"A minute to learn, a lifetime to master"(覚えるのは1分、マスターするのは一生)と書かれていることもあるらしく、まさにオセロには深いゲーム性と深い歴史があったわけです。
電卓でオセロ!?
この奥深いオセロゲームですが、普通、電卓ではできません。インターネット上のブラウザでできるものは汎用プログラム言語で作られていますし、市販のものはオセロ専用の機械です。電卓ソフトのrpnとしてはジャンル違いなのですが、オセロが作成できるかどうか挑戦してみましょう。
オセロ、Othelloを玩具やゲームの名称にすると登録商標の問題がありますので、rpnのオセロゲームはプログラム名をothelloではなくreversiとしています。ルールは同じですが、石の色、升目の記号、升目の形状も公式オセロとは異なります。説明には一般的に認知されている「オセロ」を使いますが「リバーシ」と同義語と考えてください。オセロも世界的に広がっていることですし、普通名称になればいいですね。
reversiプログラムのダウンロード
- reversiプログラムのZIPファイルをダウンロードしてください。
- ダウンロードしたZIPファイルをダブルクリックするとreversi.objとreversi'.objが表示されます。
- reversi.objとreversi'.objを格納したいフォルダにドラッグすると以下のダイアログが出てきます。
- パスワードを入力してください。一致していれば、reversi.objとreversi'.objが解凍されます。
| パスワードの入力 |
+-------------------------------------------------+
| +-----+ |
| ファイル'reversi.obj'はパスワードで保護され | OK | |
| ています。 パスワードを入力してください。 +-----+ |
| |
| +----------------------+ +-----+ |
| パスワード(P): | | |キャンセル| |
| +----------------------+ +-----+ |
+-------------------------------------------------+
※パスワードは講座サポートのpasteプログラムのダウンロードと同じです。
ここでは、c:\rpnディレクトリにobjファイルが保存してあるものとして説明します。DOSプロンプトを起動して、c:\rpnまで移動してください。以下のrpn式を入力するとオセロが起動します。
実際に起動するのは、次のコンソール版とエスケープ版を読んでからのほうがいいでしょう。
オセロの相手はコンピュータです。先に人間側がキーボードで石を打つ場所を指定すると、次にコンピュータは自分で打つ場所を思考して打ち返してきます。
コンソール版とエスケープシーケンス版
rpnのオセロゲームは、コンソール版とエスケープシーケンス版を用意しています。コンソール版は入力するとオセロ盤の表示が上方にスクロールしていくタイプです。前の盤面が残っているのでどこに石が打たれたのか分かります。
対して、エスケープシーケンス版はオセロの盤面が変わるたびに、画面左上端に再表示されるタイプです。慣れてくればこちらのほうが小気味よくていいでしょう。それぞれの使い方は以下に詳しく説明してあります。
- 入力は横、縦の順で行ないます。縦は1から8までの数字でオセロの公式ルールどおりですが、横はアルファベットではなく、縦と同じく数字の1から8になっています。
- 冒頭のオセロ盤で「f5」に石を打つためには、rpnのオセロでは横「6」縦「5」を入力します。仮に打つ場所がない場合はrpnがパスを指示してくれます(コンピュータ側のパスは自動で表示されます)。
- ゲームオーバーはともにパスとなるか、打つ場所がなくなったときです。
- このオセロは簡略化してあるので、人間は必ず先手(黒石)になります。
ゲームらしく遊べるのはエスケープシーケンス版なのですが、ゲームの流れが分かりやすいコンソール版から先に説明していきます。
コンソールとはDOSプロンプトのようにキーボードの入力とコンピュータからの出力を表示する画面のことだと思ってください。コンソール版のオセロは以下のようにrpn式を入力します。
すぐにオセロ盤が出てきますが、全てキャラクター表示になります。
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□
5□□□●○□□□
6□□□□□□□□
7□□□□□□□□
8□□□□□□□□
入力(横)=
先手は人間側の番なので、横の数字を半角数字で入力してください。すると次に縦数字の入力を求められます。ひっくり返す石がないなどのおかしな入力の場合は横の数字入力からやり直しになります。
以下に人間の初手と次のコンピュータの2手、その後の入力待ちまでの画面の動きを示しますので、参考にしてください。
12345678
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□ <-- 初期のオセロ盤面
5□□□●○□□□
6□□□□□□□□
7□□□□□□□□
8□□□□□□□□
入力(横)=6 <-- 半角数字の6を押してエンターキー
入力(縦)=5 <-- 半角数字の5を押してエンターキー
12345678
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□ <-- 6,5に黒石を置いてひっくり返した状態
5□□□●●●□□
6□□□□□□□□
7□□□□□□□□
8□□□□□□□□
考え中… 横=4, 縦=6 <-- コンピュータが思考中…4,6を選択
12345678
1□□□□□□□□
2□□□□□□□□
3□□□□□□□□
4□□□○●□□□ <-- 4,6に白石を置いてひっくり返した状態
5□□□○●●□□
6□□□○□□□□
7□□□□□□□□
8□□□□□□□□
入力(横)= <-- 入力待ち
あとはこの繰り返しです。決して、コンピュータは強くないので簡単に打ち負かすことができるでしょう。
次にエスケープシーケンス版の使い方ですが、以下のようにrpn式を入力してください。
先ほどのコンソール版のプログラム名がreversi'だったのに対して、reversiとダッシュ記号が消えているだけの違いです。後はすべて同じ仕様なので、以下に上記と同じように画面の動きを示しておきます。
1□□□□□□□□ 1□□□□□□□□ 1□□□□□□□□
2□□□□□□□□ 2□□□□□□□□ 2□□□□□□□□
3□□□□□□□□ 3□□□□□□□□ 3□□□□□□□□
4□□□○●□□□ 4□□□○●□□□ 4□□□○●□□□
5□□□●○□□□ → 5□□□○●●□□ → 5□□□○●●□□
6□□□□□□□□ 6□□□○□□□□ 6□□□○□□□□
7□□□□□□□□ 7□□□□□□□□ 7□□□□□□□□
8□□□□□□□□ 8□□□□□□□□ 8□□□□□□□□
入力(横)=6 考え中… 横=4, 縦=6 入力(横)=
入力(縦)=5
(6,5を入力) (一瞬。速くて見えない) (再度、入力待ち)
オセロのエスケープシーケンス版は、画面左上端に固定で表示されます。コンピュータ側の結果も同じ場所に表示されるので、基本的にコンピュータ側の打った手の表示は見えません。また、コンピュータ側のパス表示も速いので見えません。簡易版なので、このあたりの仕様は御了承ください。慣れるまではコンソール版で遊んだほうがいいでしょう。
エスケープシーケンス版を使用するには、事前に環境設定が必要です。技術サポートのnpdのエスケープシーケンス設定を参考にしてください。
パーフェクトを狙え
昨今のオセロゲームはかなり強くなっています。今では信じられませんが、以前はオセロのコンピュータ思考アルゴリズムを考えるだけでも、大学の卒論にできたくらいです。しかし現在、盤面評価の方法も打つ手の探索方法も研究され尽くされている感があり、中学生にでもプログラムは可能です。
rpnのオセロは思考アルゴリズムと呼べるようなものは積んでいないので、遊ぶとしたらパーフェクト狙いです。コンピュータの思考パターンは単純なので、時には悪手を打つこともあります。何手でパーフェクト勝ちできるかを競い合うくらいでしょう。
ちなみに、ゲーム終了時に石数の差で勝負を表現することがあります。以下に示しておきます。
石数の差 |
勝ちと負けの表現
|
---|---|
64~54 |
完勝と沈黙
|
52~40 |
圧勝と惨敗
|
38~26 |
大勝と大敗
|
24~12 |
激戦勝と激戦負
|
10以下 |
接戦勝と接戦負
|
コンピュータvs人間
さて、rpnで動くオセロは単純な思考アルゴリズムなので簡単に人間が勝ちますが、本格的なオセロソフトの場合はそう勝てるものではありません。コンピュータにオセロがプログラムされ始めた頃は、ルールも簡単で打つ場所も8×8マスの64ヶ所なので(初めは4つ置かれているので僅か60手)、研究対象としても丁度よかったようです。
初期の頃は商用ソフトでも序盤、中盤で人間が有利であれば勝てました。もちろん、その当時でもコンピュータは終盤には完全読みをします。完全読みとは打てる全ての手をメモリ内で試すことで、先手と後手の勝敗を石数まで正確に読み切ります。この完全読みになる前までに、圧倒的に有利な状況に持ち込むことが人間に残された勝つための唯一の方法でした。
そのために定石と経験が重要だったのですが…。今では定石を組み込んだ思考アルゴリズムは当たり前なので、とてもコンピュータは強くなっています。オセロのような完全情報ゲームであるチェス、将棋、囲碁などでもコンピュータの優位性はますます強くなってきています。
完全情報ゲームとは、麻雀やトランプのように偶然性の入る余地のない互いにゲーム情報を全て把握できるタイプのゲームです。
今のところ、チェッカーはすべてコンピュータで解析済みなので、コンピュータは絶対に負けません。オセロもコンピュータの独壇場です。チェスはしばらくは人間代表としてカスパロフ(ロシアのチェスチャンピオン)が粘りましたが、最終的にはコンピュータに敗れています。
残るメジャーなゲームは将棋(取った駒の再利用があるのでコンピュータの探索が追いつかない)に囲碁(打てる場面の数が多すぎて探索が追いつかない)ですが、どんどん研究は進んでいます。悲しいことですが、もしかしたら近い将来に人間が勝てる完全情報ゲームはなくなるのかもしれません。
rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。