goo blog サービス終了のお知らせ 

星田オステオパシー

施術者は引退しちゃって美味しいバイト生活をしつつプログラミング学習とか自由研究をして野垂れ死ぬまでの備忘録

Rustでトランキライザーガン その19 また借用の問題

2025-01-15 09:08:18 | プログラミング
 ではゴリラの破獄メソッドを作っていくか!最初はこういうのを考えました。Animal.specialのところにUncahinってのを設定して・・と

 でも、普通に行動が変わるだけなのでSpecialとかいらなくない?と思い直してAnimalStatusに入れることにしました。ということはつまり、他の特殊能力もココで設定できるのでSpecialフィールドは不要になったということで・・

 各インスタンスごとの頻度で行う行動をUpdate_animalからActionフィールドの値によって変更して送り込む

 こういう感じでChaseも追加しよう


 Mainループの中で各インスタンスを引数にして、Speedに応じた頻度でUpdate_animalにPlayerとかTruckを送り込む。


 ActionがUnchainだった場合にはこういう感じで・・Truckの座標をチェックしてそこへ向かっていくと。座標が同じになった場合の処理はまだ書いてない



 Claude先生にOKをもらったので同じ座標になった場合の処理を書く。捕まっていたAnimalのActionをNomalに戻して、座標をTruckと一緒にして解放すると

 はっきりいって今回は完璧だろ!と思って実行してみると・・え?何コレは?Second mutableどーのこーの・・

 うげー!出たよ借用権。参ったなぁ・・

 うーん・・これは却下やな。ForでUpdateすることに意味があるんだから

 これは理解できる

 出来るかな?イメージとしてはRacketで散々やったように環境をまるごと持ち運んでリレーさせるって感じだからなぁ・・根本的に作り直す羽目になりそう

 コードを提供した結果・・

 いや、だから特定の動物だけを渡しても、結局Animalsを変更したいんだからスコープの関係上駄目なんでしょ?

 まあ、現実的にはこれになりそうかな

 更に、Unchain_movingのコードを渡してみる。するとようやく納得してもらえたようだ(←すごいことだけどね)。なるほどIDか・・新たなインスタンスを作るんじゃなくて、Actionで使いまわすだけだから出来そうだな


 でも現実問題としては一番変更が楽なインデックスベースになるだろう。最初からコレにしておくべきだったな


 後でまとめて処理か・・例の一挙に前座標のキャラクターを消す時に考えたパターンか。今回は採用しないけど、考え方は面白いしエレガントなので勉強することにしよう

 ところで今回の問題。もしかしてForで扱うAnimalsをIter_mut(可変)にしてるから問題なのであってただのIter()なら大丈夫だったのか?と質問

 あ、そーなんだ!勉強になるなぁ・・

 実は、もはやトランキライザーガンでやってみたかったことはほぼ実現できたので、とっとと次のゲームに行こうと思ってるんですが・・ま、最後は動くようにしてから立ち去るか・・次回は改修をやりまぁす!

 



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Rustでトランキライザーガン... | トップ | 「クーロン黒沢」オンライン... »