星田オステオパシー

Racketで何か・・DD&D020 バッドステータス実装チャンレジ3

今日も続きをやりました!
 バドステの優先順位を決めないといけない気がする・・ということで一応書き出してみました。うーん、こんな感じ?
 Sleep,Poison,Paralisys,silenceは時間経過で回復する。Sleep,ParalisysはPhaseをスキップする、と。

 Sleep状態になるとCHARACTER-Aliを参照してBATTLE-TEXTに’SLEEPと0のドットリストを送り込む。ドットリストは通常攻撃と型を合わせるためで数値に意味はない(つけても良いけど)。問題はどこに書くか・・
 多分On-tickだと思うけど、念の為にOn-keyに書いてみる。が、駄目!

 テストとしてSLEEPのみやってみる。最初、On-tickのケツに追加したら型くずれでエラー。見直してOn-tickを理解した。あ、最終的にBATTLE型を返す必要があり、その前に条件付き破壊的変更を書きまくることで自動処理が可能なのか!なるほどなるほど・・

 とりあえず睡眠だけテストで書いてみる。キャラの状態を表示するのはアクティブになったときなのでC-LISTの先頭がHEROで状態異常があれば表示する、と。ちなみに、もしかしてこの表示の後に直接BATTLE構造体の書き換えが出来るかも?とテストしたのですが・・無理でした!to-drawに渡す関数は最後は画像データでないと駄目、と。ま、そりゃそうか(^_^;)

 で、PHASEをスキップして手番が次へ回ると状態異常リストの0より多い数値が−1されるという処理をどこに書くか・・まあ、PHASE終了で必ず行うphase-turn関数に忍び込ませることにしました

 結果・・現在メッセージ表示だけで実際は動けるのですが、ここでPHASEエンドすると・・

 オッケイ!ケツに回ったtawaの第一要素(SLEEP)が2から1に減ってる、成功だ!
 だが、色々実験していて不具合発覚。攻撃終了やPHASE終了キーで手番を回した場合にはちゃんと動くのに、移動力を使い切った時のPHASE終了では手番が移動するだけで状態異常のリストが更新されない(つまりPHASE数も更新されてないと思われる)

 上は改善したコードなんだけど・・キー入力での移動は別の関数にやらせてるんだけど、そこで移動力を使い切る(car new-move)が0になった時点でphase-turn(今回から状態異常の効果時間減少も追加)を行って、C-LISTのCARをCDRのケツにつけるようにしてたんだけど、この飛ばした先の関数で破壊的変更を行っても反映されないと言うわけか・・
 うーん、そうなると一体どうすれば・・考えること2時間

 On-keyに直接渡す部分で条件ワケをすることで解決出来ることが判明!狙ったとおりの動きにすることが出来たのだった(^o^)

 なるほどなるほど・・今回でOn-keyやOn-tickでのルールがだんだん分かってきたな。

 という訳で次回はその他の状態異常も追加して、SLEEPだったらダメージ倍とか全員石化で全滅とか色々と揃えていこう!どうなることかと思ったけど、そろそろ終わりが見えてきたんじゃないかな?
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事