
さて、借用の又貸し問題で動かなかったコード、本当にClaude先生が書いてくれたコードで動くのか?動くならそれを学習するとしよう・・Animalsをイテレータにしたら駄目だったということでインデックスで選択するものに変えてくれたわけだが・・

同じエラーじゃないかw

エラーメッセージを与えてみると改善策が・・・さすがだぜ!

というわけでこうなったのだが・・そう、もう分かりますよね?やっぱりエラーです。あ〜このパターン・・これはもう駄目かもな。

というわけで、出来るだけコードを書き換えずに済む方法は・・と(結局)自分で考えて提案。マジかよ!好感触

やるじゃない俺!素晴らしい気づきだぜ!

でも駄目でしたw。どうもイテレータにしてるとかどうとかそういう問題では無いっぽいのだが・・Claude先生に報告すると苦し紛れに新たに関数を・・

2つ追加して複雑な手順を提案し始めた・・駄目だこりゃ!

一応コピペで試してみたけどやっぱり駄目、エラーの箇所も増えてるし!

Loop内のこの処理で、Update_animalメソッドでAnimalsを引数にするから駄目なので・・Loop内の初期化と同じレイヤーで処理をすることで引数として渡さないようにしないといかん

つまり、このActive_animalメソッドの内容を1つ上のレイヤーに上げてやれば解決するのでは?

というわけで、Active_animalメソッドの内容をLoop内の第一レイヤーで処理してしまう事を考える

つまり、ここの部分をMatchのUnchainアームに放り込めば行けるはず・・と思ったんですけど結局はそこでAnimalをイテレータ的に使う事になるので意味がないのであった。うーん・・こうなったら・・

Jailedの解放をAnimalを関数やメソッドに送ることで行うのではなくて、関数を完全独立で作ってフラグで呼び出すようにするしかねぇ。Mainでフラグを収納する変数を設定して・・

フラグがTrueだった場合にJailedを集めて各種フィールドを変更する関数を一番浅いレイヤーで実行する


つまりこういう感じでUnchainするAnimal(ゴリラ)の更新だけはここで行い、Jailedの解放を完全に切り離すってのでどうだ!


となると別に他の部分を無理やりこのレイヤーに持ってこなくても良かったのだが・・もう書き換えるのが面倒なのでとりあえずテストだけでもやってみよう。一応、Claude先生にも「このようにすれば借用の二重問題に触れずに実行することが出来ます」と偉そうに言われたが・・いや、俺が考えたんだからな!

結果・・・完璧だーっ!!
なるほどね・・今後はFlagsという構造体を予め作っておいて、その中に各種フラグを収めるようにすると良いかも。そもそもGame構造体を作っておけば、いくらでもFlagを格納できて多重借用の問題はそれで解決できそうだ。もはやCrosstermで作れぬゲームは無いのではないか!?
就寝にはまだ時間があったので「効果音」について実装を考える。発砲音は別にいらないけど、Animalが隣接して森にいる場合にアラート音が発生するようにするとスリリングでいい感じであろうと

Linux用のサウンドパッケージのインストール方法を教えてもらって実行・・

Beepクレートさえ入れてしまえば、なんとたったこれだけの記述(しかも半分以上はエラーハンドリング)で音が出るのだ!Rustの面倒な手続きに慣れて来たので、当たり前の事がありがたく感じる


一方で多様な音声を再生できるRodioでは・・こんなクソ面倒な手順が必要になる。これはBeepクレート一択であろう
残念ながらバイト先の元Chromebookマシンはスピーカーが死んでてイヤフォンも持ってきてなかったのでテストと実装は次回に持ち越し。
このアラート機能を実装して、プレイヤーのミス判定、面クリア、ゲームオーバーを実装したらもう完成だ!凝ろうと思えばまだまだ手間をかけられるけど、そこまでやるんだったらとっとと次のゲームなり言語なりに挑戦したほうが良いだろう。
あとCrosstermでやりたいことと言えば・・
・通信を使ったネット対戦(出来るのか?)
・ハッシュマップを使ったデータ管理
そのため、次回のCrosstermでのゲーム作りチャレンジは「桃太郎電鉄もどき」の作成予定だ!うちの甥っ子が電車好きなので、彼を笑わせるようなゲームを目指して作ってみるとしよう!