2017/08/19 00:40

プロジェクトの本文や、活動報告についての感想、ご意見、ご質問を、ぜひコメントでお寄せいただければと思います。現在は支援募集期間中であり、本企画の実施期間ではないため、お寄せいただいた感想などについてはリターンとしてではなく、お返事や回答をさせていただきます。

また、私個人についてはこちらをご覧ください。

前回、『マイコンとパズルの世界 BASICプログラミング頭の体操』〔小谷 善行, 産報出版, 1981.〕を発掘したと書きました。本書には、例えば次のような内容があります (他にもあります):
- 論理パズル
- 虫食い算
- 桂馬道の問題
- 迷路パズル
- しゃべる機械

これらは本企画で扱う題材にもなるかもしれません。「しゃべる機械」は、人工無脳の話です。これは本企画の題材としては扱い難いかと思いますが、次回にすこし触れたいと思います。

では本題です。

さて、オセロチェッカー (あるいはドラフツ) ですが、プログラムの作りやすさは、おそらく同程度かと思います。対してゲームとしての難しさは、オセロよりもチェッカー (あるいはドラフツ) の方が難しいのではないかと思います。なお、チェッカーでは双方のプレイヤーが最善をつくした場合、必ず引き分けになることが証明されているそうです (ドラフツはすこしルールが違うので、どうなのかは私は知りませんが)。

ハノイの塔迷路などのパズルと大きく違うのは、オセロやチェッカーなどは対戦ゲームであるということです。

パズルの場合であれば、手の探索をするとしても、普通の木構造になります:



対して、対戦ゲームの場合、プレイヤーが二人 (場合によってはそれ以上) いるという点が大きな違いになります:



これらの図の根 (頂点) が現在の状態や盤面とし、そこから、まず自分の手番だとします。パズルだとそのまま自分の手番が続き、普通の木構造になります。

しかし対戦ゲームの場合、上の図だと赤い箇所ですが、相手の手番がだいたい存在します (ゲームによっては、相手にパスさせる手というのもありますが)。その相手の手番を考慮に入れて、次の自分の手番、あるいはもっと先の自分の手番をどうすればいいのかを計算してやる必要があります。

なお、これらの図の四角で描いてある要素ですが、棋譜のように手を記録するだけでもかまわないと言えばかまわないのですが、盤面を記録しておく方が面倒は少ないかと思います。その分、メモリは必要になりますが。

パズルの場合だと、状態を評価した値を良くしていくことを考えればいいのですが (一旦低くする必要があるという場合もありますが)、対戦ゲームの場合、相手の手はまずまちがいなく自分にとっての状態の評価を下げるように打たれてきます。その上で自分にとっての状態の評価を上げる手を選ばなければなりません。ですので、広い意味でのゲームとしての種類が違うと言えます。

ついでにと言えると思いますが、おおむねパズルよりも対戦ゲームの方が木が大きくなる傾向があります。そうすると、メモリの容量にしても計算にかかる時間にしても、「無駄な手は考慮しない」というような技術が必要になります。今どきなら、オセロではその必要はないかもしれませんし、チェッカーでももしかしたら必要ないかもしれませんが。だとしても、プログラミング教育としては、その技法を取り入れることは無駄ではないでしょう。その技法は、パズルでも、場合によっては必要かもしれません。

興味を持たれましたら、ぜひご支援や、コメントをお願いいたします。