昔から麻雀AIに興味があって、ちまちまと麻雀AIを開発してきた。
大学生の時には強化学習に挑戦したくて麻雀AI同士を戦わせるための環境を作っていた。
ゲーム系の環境を作るときは実際にそのゲームをプレイできるUIがあったほうがバグに気づきやすい。
そこでReactを使ってUIを作った。それがこれである。
大学生のときに作って未完成のままなので、かなりのバグがある。
最近、また麻雀AIを作る気力が湧いてきたので、このときのコードをリファクタしようと思ったのだが、そこでふと気づいた。
「なんでReactでUI作ってんの?」と…。
ゲームアプリでフロントエンドとバックエンドを分ける方式にすると必要な情報を漏れなくやり取りする必要がある。
一般的なWebアプリではやり取りするデータの形式がある程度決まっているのに対し、麻雀ゲームでやり取りするデータの形式はてんでバラバラだ。
ツモとかポンとかリーチとかプレイヤーの選択した行動によってデータの性質が全く異なるし、必然的に型定義も面倒になってくる。
しかも麻雀とかいうゲームのルールが複雑すぎるせいで絶対に考慮漏れが発生するのでそのたびに手戻りも発生する。
もちろん型定義もやり直しだ。
誰だよ!麻雀のルールをここまで複雑にしたやつは!
大学生の時に未完成のまま放りだしたのも型定義するのめんどくせーって感じだった気がする。
冷静に考えればUIもゲームの実装の一部としてPythonで書いて、単体のソフトウェアとして完結したほうが絶対楽に決まっている。
ゲーム部分とUI部分でデータのやり取りをする必要がなくなるし、いちいちReactのサーバを起動したりエディタを2つ起動したりする必要もなくなる。
将来的にブラウザ上でAIと対戦できるようなプラットフォームを作りたい場合でも、まずはプロトタイプを作ってバグをある程度取り除いてからの方が良い。
冷静に考えたら当然の帰結だけど、実はこの事実に気付いたのは昨日だ。なんか寝て起きたら気付いた。
自分の方針を疑っていない状態で自分の非効率さに気付くのってマジでむずい。
世間の人はどうやって疑うモードにスイッチを入れているんだろうか?
良いものを効率良く作るなら常に万物に対して疑問を呈さないといけないんだろうけど、それってめちゃくちゃ脳が疲れそうだな。
コメント