見出し画像

Retro-gaming and so on

五目ならべ

「コンピュータの思考ルーティン」はさておき、技術的な話をすると当然、五目並べをプログラミング「出来る」ことは射程範囲になる、と言うことは予想は付くと思う。
ただし、三目並べは3x3の盤面で行うゲームだが、五目並べは当然5x5の盤面で行うゲームじゃない。いろんなサイズが考えられるが、最大で19x19の範疇でゲームを行わないとならない。
したがって、勝敗判定関数の「作業」もちとデカくなる、と言うことは言えるだろう。
また、5個の「連珠」状態を判別するのもちと面倒くさいだろう。この辺上手いことプログラムするには、1つ目の方策としては「ランレングス圧縮」のアルゴリズムの応用、っつーかそのまま「適用する」ことが考えられる。ランレングス圧縮は「連続した量」にその「連続した回数」をタグとして付加する。と言うことは当然、白や黒がある行、列、斜めで「それぞれ何個連続したか」が分かる、ってことだ。元々「圧縮」の為のアルゴリズムはそのまま「白あるいは黒」石が何個連続してるか教えてくれるアルゴリズムだ、ってことになる。こういう「本来の使い方じゃない使い方が出来る」と言うのがアルゴリズムの面白いトコだと思う。
もう一つの方策としては、単に行、列、斜めの情報を「文字列」にしてしまうことだ。そうすれば、モダンな言語なら黒を調べるには白と空白を「区切り文字にして」分割したリストを得ることが出来るだろう。白に対しても同様なので、結果、解として返されたリストに含まれる「黒」とか「白」の「文字列」の長さを調べればいい、ってことになる。
いずれにせよ、「どう五目並べをコンピュータ側にプレイさせるか」以外の部分の実装は、三目並べ+α程度で実装可能だ、ってことにはなる。

ところで以前書いたが、任天堂は囲碁のゲームは出していない。一方、ファミコンの初期に五目並べ、は出している。
こいつは難易度が3段階選べるゲームではあるんだけど、「初級」でも結構強いんだよな。


割に容赦がないゲームだ。そしてこれも広義では人工知能だ、ってことだ。
盤面は囲碁オフィシャルの19路盤より小さい15路盤を使ってるが、15x15 = 225の交点がある盤面、ってこたぁ、三目並べで用いたような「重み付け」と言う手法はあまり現実的じゃないだろう。
現代のコンピュータより遥かに貧弱な性能(それでも発表当時は破格の性能だったが)ファミコンでも「結構強い」と言うのは、一体どういう思考ルーティンをもたせてたのだろうか?すごく気になる。気にならない(笑)?
2024年の僕らは果たして1983年の任天堂に(五目並べじゃなくってプログラミングとして)勝てるのか(笑)。興味が尽きない。
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「ファミコン」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事