滅するまでの記録

滅するまでの記録

滅するまでの記録です

プログラミング学習日記 2025/09/20 戦闘からの逃走システムを一気に片付ける、なぜならば・・

 特定のスキルを持っていればペナルティを受けない・・という部分だけど、どうせスキルを持っていれば良い効果があるというのもあるだろう。同様のことはアイテムでも起きるだろう・・ということであらかじめ4つのフィールドを用意しておいてやる

 

 で、HandleStoryNodeの中でフィールドをチェックしてゼロ値じゃなければデータを変更すると

 

 TOMLのOutcome内に発生する効果、今回はHPの増減を記述しておきゼロ値じゃなければHPに適応すると

 

 こういう感じかな。テストは・・するまでもなかろう(慢心)

 

 続いて・・・あ、逃走出来るパターンもあるのか

 とりあえずどこかに戦闘離脱OKのフラグを埋め込まないといかんが・・Enemyに埋め込むか?戦闘前に逃げられる場合にはescape_beforeを文字列のonで、規定のターンで逃げられる場合にはescape_halfwayって感じで、こっちはターン数なのでintで良かろう

 Outcomesスライスから条件に適合する選択肢を抽出するためにイテレータで回すので・・判定用のキーを設定する。

 構造体のEnemyに該当するフィールドを作って・・タイプミスしてるぞ!

 ペナルティが一定の数値ならばIntで良いんだけど今回は文面から察するにランダムなのでまたもや新たなフィールドhpchangerandomを追加する

 どんどん増えるなぁ

 判定はEnemy構造体の中に放り込んでいるのでEnemiesループの中で書いたが・・考えてみたらEnemyじゃなくてNode直下に書いて戦闘自体を開始する前に判定すべき。修正するか~

 というわけで逃走用の判定キーはNode構造体直下に設定しなおし

 Node構造体にフィールド追加・・増えすぎィ

 戦闘開始前に判定を書いて、Breakの代わりにReturn nilすることでメソッドから脱出。その前に念の為にEscapeBeforeを無効にして、CurrentConditionを次のものに変更して、ペナルティのHP変更を行う

 

 じゃあテストを・・開始前に逃走、成功してNextNodeIDへ移動もOK

 Nを選んだ場合には通常通りで戦闘開始。武器の持ち替えは先にやるべきだな・・。でもまあ、とりあえず戦闘前逃走についてはOKだ!

 

 続いてシナリオで設定された戦闘ラウンド時に逃走するかどうかをチェックする場合も書いてしまう。Enemiesループの外でRoundnumを設定しておいてラウンド終了時に+1して設定されたターン時に闘争するかどうかY/N。うーん、これってそのラウンド以降は毎回逃げるかどうか聞くべきか?でもそうなると自動戦闘の手軽さが失われるしなぁ・・

 ではテスト!ありゃ・・想定通りの動きなってる!すなわち逃走システムは完成したのだった、やった!

 

 今回、本当はもうちょっと小分けにするつもりだったんだけど

 図書館でリクエストていたEffective TypeScriptが到着したと連絡があったのだ。折角なので借りていられる3週間でなんか動くものを作りつつ読み進めようと!

 というわけで次回からしばらくTypeScript挑戦編となります(^o^)