以前からRustが気になっていたので、慣れも含めてRustでオセロゲームを作ってみた。

othello

https://nowaai.github.io/wasm-othello/

コンソールゲームでもいいのだが、やっぱりブラウザ上で遊びたい。
そこで、WebAssemblyを吐いて、それをブラウザ上で動かすことにした。

当初は、GUIのCanvasの描画も、オセロゲームの計算も、WebAssemblyにやらせていた。 しかし、Rustの厳格な所有権システムのおかげで、クリックイベント周りのコードが参照カウンタまみれになってしまい、動いたもののあえなく断念。

wasm-tetrisもそうしているようだが、ツラさがうかがえる…)

次に、オセロの計算エンジンはWebAssemblyに、Canvasの描画はJavascriptに担当させ、役割分担させることにした。 ボードの状態管理と裏返る石の計算はWebAssemblyが行い、描画に必要な石の差分データだけをJavascriptの方に送る。 これで、GUIのコードと計算部分のコードが切り分けられ、すっきりした。

https://github.com/nowaai/wasm-othello

所有権周りでコンパイラに怒られながら書き上げたが、まあだ慣れた感じはしない。
ifが式であるところとか含めてRustは好きなので、さらなら習熟にトライする。