Threes!のクローン作ってみた

最近久しぶりにがっつりめに風邪を引きました。休むほどではないのですが、体力なのか年なのか、やたらと長引いています。どれくらい長引いているかというと、一週間くらい咳と鼻水がずっと出てるくらい、でしょうか。
これだけ治らないのは記憶にないくらい久しぶりなので、鼻うがいというのも試してみてます。鼻がつまりすぎているとなかなか難しいもんですね、これ。

Threes!について

Android/iOSで遊べるゲームです。非常にシンプルなルールなんですが、かなり絶妙な難易度でして、寝る前とかに始めるとついつい何回もやってしまって、寝る時間を逃がす程度にはハマっています。
有料ですが、動作などもサクサクと動作しますし、基本的にやればやるほど上達する感が大分いいかんじです。よければいかがでしょうか?

公式
https://play.google.com/store/apps/details?id=vo.threes.exclaim

発端(というか動機)

何げなくページ巡回をしていたら、以下のページが目にとまりました。
Vim界隈だけではないと思いますが、有名人の id:thinca さんが、threes!のVim版を作ったということでした。

threes.vim 作った:永遠に未完成

これを見て、「そうだ、Go言語で何作ろうかと思ってたけど、これ作ろう」、ということで作りました。
制作期間はとりあえず2日くらいなので、リファクタリングとか何もできてねーですが、一通り動作するようにはなってます。

動作させるとこんな感じです。

h,j,k,lで動作、qでとりあえず今のゲームを終了します。これ以上動かせなくなった場合でも同様に終了します。終了すると、現在のスコアを表示して終わります。

動作、スコアの表示とかは、とりあえずゲームをしながら調べたので、間違ってる可能性も非常に高いですが、まぁそこはそれということで。
それと、sttyを内部で利用している関係上、Windowsでは動きません。

作ってみて

Go言語はやはりRuby/Python/Perlではなく、Cとかの方に近いと再認識しました。特に配列やスライス関係のリテラルとかで。
やっていると、配列をがりがり弄るよりは、map/filterとかをできたら楽なのになー、という点が多くありました。まぁ、パフォーマンスを考えると配列を直接いじったりした方が早いのかもしれませんが、毎回rangeを打つよりは、map/filterでやりたいなー、と思う今日この頃でした。

それ以外では、基本的に標準ライブラリだけでやっています。標準ライブラリが大事な所をカバーしているため、その辺はあまり苦労しませんでした。
一番苦労したのはやっぱり配列とかスライスを直接走査したり操作したりしなければならないところが多かった、という点でしょうか。まだGo言語の設計についていまいちよく理解していないので、もっといいやりかたはあると思います。

しかし、大分久しぶりに形があるものを作った気がします。最近そんなもの作ってないなー、と思いながら作ってました。いやー、やっぱりゲーム関係は作ってて楽しいですね。