M5Paperで無限Wordleマシンを作る
いや作ったのは1年前くらいだけれども。
当時WordleがNYTに買収されるかされないかの頃で…Twitter上には謎の🟩🟨があふれ…かくいう私もちょっとハマっていた。でもWordleって一日一題なんですよね。問題制作者との駆け引き…Twitterで他の人の解き方を推測…そこがいい!ただ一人遊びゲームとして考えるなら、お題を考えるプログラムさえ書けば自分でできるはずです。
ちょうど手元にはM5Paperというお気に入りのデバイスがあり、ちょうどスマホくらいの画面サイズなのでWordleクローンもぴったりフィットしそうです。作った。
ビルドが面倒な人用にM5Burnerでも公開してみました。Poodleで検索すると出てくるはず
課題1:単語リスト
自分でWordleクローンを作ろうと思うと、多分一番のネックは単語リストじゃないかと思います。APPLEとかMAGICとか、とにかく5文字の英単語を網羅したリストが必要。これは単にランダムで答えを設定するという以外にも、入力された5文字が単語リストに無かったら解答を受け付けない(そうしないと単語ではない文字列で総当たりされるため)ために必要です。
いろいろ探して見つけたのはプリンストン大学が公開しているWordNetです。商用も含めて改変複製可の英単語データベースで、下記リンクの一番下から全見出し語リストをダウンロードできます。ここから5文字の単語でハイフンとか数字を含まないものを抜き出すプログラムを書いて、抜き出しました。
問題は見出し語なので三単現や複数形のSが含まれていないこと、逆にすごくマイナーな単語も含まれていることです。素のWordleより難しい。
課題2:フォント
M5Paperには内蔵ビットマップフォントがありますが、やはり大きい文字を表示するには外部フォントを使いたい。そこでTTFフォントを読み込む機能があります。
ただし、Wordle的な文字一つ一つの配置をしようと思うと、マス目の中に中央揃えで一文字ずつ配置しなければなりません。で、中央揃えのテキスト描画(drawCenterString()が多分それだがfontに渡すものが分からない)とか、テキストを描画したときの幅を返すAPI(textWidth()が多分それだがfontに渡すものが分からない)を探しても…見当たらなかったので…1年前は等幅フォントを使っていました。
しかしそうやって燻っていたところ、1文字print()してからgetCursorX()すれば文字の幅が分かるじゃんということに気づき…プロポーショナルフォントを使えるようになりました。やっぱ等幅よりプロポーショナルの方がたくさんフリーフォントがあるからね。スクリーンショットではOpen Sansを使っています。
課題3:スクリーンショット
別に課題じゃないんだけどM5Paperでもスクリーンショットを撮りたかったので、撮れるようにしています。上のPoodleだとパワーボタン押すとmicroSDカードにスクリーンショットを撮ります。このためにPGMの書き方を覚えた。
未来へ…
こういう一つのゲームしかできない単機能デバイスってもはやそうそう無いので、レトロでかわいい。白黒のシンプルなデザインから私の中では「無印良品が出してるWordleマシン」と呼んでいます。
あとM5Paperは電子ペーパー端末なので、詰まったらいったん電源を切ってもずっと状況が表示され続け、無限に考えることができます。そういうゲームにはいいかもしれない