カレンダー

2018/05
  
  
       

広告

Twitter

記事検索

ランダムボタン

マインスイーパーを

by 唐草 [2018/05/10]



 一昨日の晩、ふとマインスイーパーで遊びたくなった。Windowsをメインに使っていた前世紀は、マインスイーパーとソリティアの2つが起動時間の長いアプリの二大双璧だった。ところが、Macを使うようになって遊ぶ機会はほぼ無くなった。でも、Windows 8向けに提供されていたリッチな21世紀仕様のマインスイーパーは、マインスイーパーのためだけにWindowsを用意してまで遊んだものだ。
 それも数年前の話。最近は、マインスイーパーというゲームの存在自体を忘れかけていたぐらい縁が無かった。
 それなのに突然遊びたくなった。いったい、ぼくの脳内で何が起こったのだろうか?まったく分からないが、我慢できないぐらいに遊びたくなった。
 でも、手元にWindows環境はない。あるのは、MacとAndroidタブレットだけだ。
 2日経った今だから断言できるのだけれども、あの時のぼくの脳内は絶対にシナプスの接続がおかしくなっていた。それどころか、違法な薬物を投与されていたと言われても疑問がないほどに思考がおかしかった。
 ぼくが取った行動は、Google playストアでマインスイーパーアプリを探すことではなかった。
 HTML5でマインスイーパーを作るという方法をいささかの迷いもなく選んだのだった。
 マインスイーパーのアルゴリズムは簡単だ。「クリックしたマスが空だったら、周囲のマスを開く」というのを繰り返すだけ。簡単なリカーシブコール(再帰呼び出し)で実現できる。ただ、理屈が分かっていることと実装出来ることは別である。初めは、チェックしたマスの記録を取っていなかったので無限ループにはまってしまった。
 その後、いくつかの修正を経て、2晩、時間にして3時間ぐらいかけてどうにか必要最低限のマインスイーパーを実現した。いろいろなゲームのクローンを作った経験があるが、マインスイーパーのクローンを作るのは初めてだった。
 作ってみて分かったがマインスイーパーは、プログラムの教科書向けのアルゴリズムである。キモであるリカーシブコール部分は、理解が進みアルゴリズムが洗練されていく度に小さくなっていった。最終的に丁寧に書いて20行もない。
 今朝は、お手製のマインスイーパー(ただし、白黒で旗が立たない)で遊びながら出勤した。期待通りの時間つぶしになったが、高鳴る満足感は少なかった。だって、コードを書いているときの方が楽しかったんだもん。