rustでゲームを作ってみて
かねてよりやっていたrustでのゲームの開発をしていました。
ひさびさのRustだったので、借用権とか所有権とかコアになる仕様を忘れていたのにびっくり
2日間で、すこしだけゲーム作成に対してイメージがつかめたような気がします。
というのも、最初は仮面ライダーのゲームを作りたいという願望から始まった企画だったので、頭の中でイメージがあってもそれをどうやって作ればいいのかが全くイメージがつかめませんでした。
ですが、2日間やってみて気づいたのがゲームを手軽に作るという考えではなく、
「子どもがキャンバスにキャラクターを動かしたらコントローラーを持ってそれを動かせるようにする。」というイメージが一番しっくりくるのではないのか?と気づきました。
最近オブジェクト指向についての資料を趣味で作ることがあり、SOLIDの原則とSmalltalkについて調べまくりました。Smalltalkの設計思想の一つにこんなのがありました。
「再帰設計の基本原理は、部品が全体と同じ力を持つようにすることだ」
この考えはオブジェクト一つ一つは全体に影響を与えるほどの大きな力を持つということだと考えています。現にSOLIDの原則でも明らかに一つ一つのオブジェクトをなんでもできる物を作ることよりも特化したオブジェクトのネットワークにするようになるようになっています。
子どもがゲームを作るという行為をお絵かきの延長線上でできるようにする。僕自身ができない人間だから、特別な知識(微積分、行列など)の知識がなくても筆を取ってキャラクターができてそのキャラクターがすぐにそのまま動かせるようになるというイメージならば、アラン・ケイの考えたオブジェクト指向に近いと思いました。
今回SDL2をrustで使える物を使っているのですが、&mutを使うことが多くてメモリの使い方をかなり考えないといけなさそうです。
というのも、&mutは生ポインタを使うのでメモリ安全でないポインタを使うことになります。すぐにどうこうなるというわけではありませんが、rustのメモリ安全ができるという利点を損なうことをしなければなりません。
しかし、ゲームのプログラムではもしかしたら、多少のメモリ安全を損なうことをしなければらないかもしれません。
ですので、直近ではメモリ安全を損なうやり方は使います。ただし、それを回避することができるようにはしたいです。
あと、できればこのゲーム開発でテスト駆動がrustでできるようにもなりたいです。これができれば、ある程度試しながらできるので僕のやり方にぴったりかもしれません。
(僕はメモリを頭で管理できるほどできがよくないので)
参考資料
Smalltalk:Wikipedia ja.wikipedia.org
実践rust入門