トレイトを使わずにRustの型推論で手抜きが出来ないか?の検証から始めよう!
結果から言うと出来ませんでしたけどね!
あ〜前にPut_chで型指定が無くてよかったのはクロージャだったからか〜ガックリ
明言されてしまった
他になにか質問ないか?と言われたので、ついでにライフタイムについて聞いてみた。今の所、必要に迫られたことがないのだが?
あ、参照を保持ってのは使ったことなかったな・・そういう発想が浮かばなかっただけかもだけど
うーん、シチュエーションとしてはありそうだけど・・?
つまり、関数をチェインさせて使う時に参照を破棄するってことか?これはプログラミング学習日記行きで
コレに至っては全く理解の外、これも学習日記でやる
なるほど・・ゲーム的なものを作ってる限りは使わなくても良さそうかな?でもRustやるんだったら避けては通れないんだろうなぁ
その後、Animalがテキトーにぶらつくって部分を書いて実行したがエラーは無いのに思ったように動かない問題に遭遇。理屈では合ってるはずなのに・・とClaude先生に聞いてみると・・
主な原因はIter()が不変参照なのを全く考慮してないところかな
というわけで、メソッドの引数を全部&mut selfに変更して・・。
これは画面に現在の座標にあるAnimalインスタンスを表示する部分。
こちら、確定した方向に一歩踏み出す部分(古い座標はクリアする)
メインではUpdate_animalを実行、そこでAnimalStatus::で場合分けして各種メソッドを呼び出すと。
Noma_movingはランダムな方向にAnimal.directを変更してGo_straightへ行くというもの
MainでUpdate_animalを呼び出す際に、捕まってるもの以外とフィルターする。頻度は適当に100ミリで
よっしゃキタコレ!範囲を制限してないのでむちゃくちゃになってるけど、ようやく狙ってた動きが実現できた!
いや、理解できてないけどね。でも可変参照はIter_mutってのは覚えておこう。
ふんふん、返り値がない場合だな
別のところへ返り値を出す場合にはmutはいらんな
じゃあmut selfを使うのはどういう時なのだ?と。
なるほど、まずは新たなselfを作る時か・・
む!インスタンスを破棄?これは知りたかった事なので詳しく聞く
ふーん、まあこれはどっちも分かるけど・・思ってたのと違う。なんかこう、直接インスタンスを指定して削除とか出来るのかと思ってたんだが
うーん?
おお、この方法ならイメージが湧く
おお!OK、OK、retainを使うパターンを覚えておこう!これ良いじゃないか
ま、インスタンスの削除は置いといて、Animalたちがステージ外に出てしまうのを防ぐためにちょっと書き換え
かかか、完璧すぎる!
ま、次から作るときは全角文字列を使ってやろう
じゃあ続いてBulletでAnimalをハントする部分にかかるか・・Mainでの場所はこの辺りじゃないかな?ここにHit判定でTrueの場合にAnimalインスタンスの内容を書き換えるメソッドを呼び出すものを書けば良さげな気がする。
ヒットした場合、ステータスも書き換えるけど、1秒だけバックグラウンドを赤にして分かりやすくしたいな・・Trueの中で複数の手続きを行う場合どうすれば良いんだっけ?あと、これだとゲーム全体が止まってしまうけど・・ほかは動かしつつ、表示だけ決まった時間行うって面倒そうだし・・とりあえず、このコードをClaude先生に渡して教えてもらうか
お〜セミコロンで出来るのか、OK!
あ、コレコレ!うーん、想像してたよりは面倒でもないな・・でも、これだとスコープの問題が出てこないか?
やっぱりな・・
おっ!?書いてくれるのか・・ほうほう・・
おおっ!こ、これだー!欲しいけど諦めていた機能。これがあれば、Sleep状態からの復帰やSleep時の睡眠時グラフィックなんかも実装できる!
Crosstermプログラミング・・ますます面白くなってきやがったぜ・・
つづく