てすと

たかろぐ

自分のログを刻みます。

オセロアプリの制作開始

こんばんは、開発合宿も無事終えることができて、今度は自作アプリを開発することに精を出し始めました。

アプリの題材は、自分が好きで時々やることがあるオセロでいきたいと思います。

調査

どうせ作るなら、既存の有り触れているオセロアプリとは、差別化を図ったものにしたいと思ったので、 片っ端から関連アプリをダウンロードしてみて、どんなものがあるのか調査していました。

数少ないオンライン対戦アプリで、おそらく最もアクティブユーザが多いアプリでもあると思います。 レートがあって、自分の近い実力の人とマッチングするので、初心者〜熟練者まで楽しめるアプリになっていると思います。 リアルタイム観戦機能もあるし、切断時の処理もしっかりしています。 因みに、僕のレートは1950〜2000辺りを行ったり来たりしてます...orz

こちらもオンライン対戦が可能なアプリとなっていますが、レートという概念はありませんありました(2018/3/24追記)。 このアプリの特徴的な所は、少し違ったオセロ対戦ができる所で、いくつかあるキャラクターの中から一つ選択してセットすることができ、 対戦時にはセットしたキャラクター効果(例えば、一度だけ「待った」できる等)が使用できます。

リバーシ初心者向けのアプリです。 13段階のレベルから選べるコンピュータ対戦があり、対戦が終了した後はどの手が良くて、どの手が悪かったのか振り返ってくれます。 解説も丁寧だし、落ち着きのあるデザインだし人気が出るのは納得ですね。

AIのレベルが100以上あるアプリです。 オフラインで、一人または二人で遊べるようになっています。 オンライン対戦機能はありませんが、UIが綺麗だし、好みの問題かもしれませんが石をひっくり返す時の音も良いです。

他にも、もう10個くらいインストールしてみましたが、書ききれないのでこれくらいにしておきます。

アプリの方針も、何となく頭の中で定まってきたので、楽しみつつ開発頑張っていきたいと思います!

技術構成

技術的な構成としては、アプリ側はReact Native + TypeScript + Redux + (Rust)辺りで考えています。 個人的な目標としては、可読性があって、メンテナンスしやすいコードを作り上げることです!

因みに、RustはAI部分で使いたいと考えています。 C/C++と同程度の速度メモリ安全なのでクラッシュする心配が薄いのが主な理由です。 また、ビットボード実装する時には64bit整数で盤面を表現するのですが、JavaScriptには32bit整数しか無く不便な点、 Rustを学んでおくと、最近よく聞くWebAssemblyとかにも応用が効きそうだと思った点、後は単純に触ってみたかったからです(笑)

Webで調べていたら、React NativeからでもRustが動かせるみたいなので、明日はその辺やってみたいと思います。

また、オンライン対戦も実装したいと考えているので、AWS + Docker + {何かしらのサーバサイド言語・フレームワーク}とかも使うと思います。 何の言語にするかは、まだ確定ではないのですが、Scala + PlayFramework辺りになるかなぁと思います。