BLOG

オセロ(リバーシ)のプログラミングについて少しだけ解説

2019/08/12
ロゴ

「オセロ(リバーシ)のプログラミングについて少しだけ解説」

 

毎年、5月~6月に Scratch Day in Tokyo が開催されております。ここ数年、私は、出展させていただいておりまして、今年2019年に出展したコンテンツの1つが、ScratchでつくったオリジナルAI搭載のオセロ(リバーシ)です。こちらで遊ぶことができます。

 

 

さて、日経ソフトウエア2019年9月号に Python で作るリバーシが掲載されていました。私の一番の興味は、私が作ったものとどこが違うのかということ。今号は、UI編となっており、AI編は次号に待つのですが、プログラムを知らない人には、石を置いたらどうやって石をひっくり返すのか見当もつかないでしょう。

 

プログラムを実現しようとするときには、動きを分解して考える必要があります。身近な例で言うと、例えば歯磨きです。歯磨きの手順を書き下すことができますでしょうか。Eテレの人気番組、Why!?プログラミングのジェイソンをプログラミングのコーナーと同じことを言っています。間違った命令手順や、命令が抜け落ちていると、うまく動きません。

 

オセロ(リバーシ)において、石を置いたら挟んだ石をひっくり返す、をどうやって実現するのか、プログラミングをするときに欠かせないのが、分解して考える力です。どういう状態であれば、ひっくり返すことができるのか、どこをひっくり返すことができるのか、実際にプログラミングコードを書く前に、言葉にして考え、ときに、歯磨きの例と同じようにに書き下します。

 

それができないうちに、プログラミングコードを書くことはできません。自分で実現したいものを懸命に考えることで、分解して物事を理解する力と、論理的に組み立てる力が身につくのです。この能力は、新しいものを作り出す力に他なりません。学校ではなかなか習得できない能力です。自分で訓練するしかないのです。

 

と、大層に物申してみましたが、何のことはない。自分でゲームを作ってみようという遊びの延長の中で、少しずつ身に付きます。教科書どおりに教科書にあるものを写経するかのようなものではないのです。自分で作りたいものを、パソコン画面内で実現することに意義があります。いずれ、社会問題に興味を抱けば、アプリはもちろん、社会を大きく変えるSNSのようなシステム開発に至るかもしれません。

 

そうそう。私のプログラムと日経ソフトウエアのプログラムで大きく違っていたのは、手番の考え方。ゲームのルール上は、黒の次は白、白の次は黒、石が置けなかったらもう一度というアルゴリズム。私は、このアルゴリズムどおりにプログラムしたのですが、どうもきれいに記述できていない。コンピューター上、表現しやすいように、バグ(プログラム上のミス)が無いように書く必要があるのですが、さすがに日経ソフトウエアの方が秀逸でした。初めは黒で、交互に確認し、石が置ける方の手番、とプログラム上記述する方が論理上美しい。

 

こんな、何が違うの?と思われるようなちょっとした物事の捉え方の差で、プログラムが書きやすいか、記述ミスが少ないかが決まってきます。今度、私のプログラムは、修正しておきます。一見、動きに差は無いんですけどね。