星田オステオパシー

RacketでCLIラピュタ04 バトル関数を作り始める

 
 実は家でダラダラしながらP150までページデータ作りをやっておりました。そして宿直の今夜・・遂に戦闘イベントページに遭遇。これを待ってた!データが無いと作れませんからね。
 敵データを見てみると・・あれ?HPが無い。あ、そうか・・行動力Ap比べで早く2回優勢になった方が勝ちだからか・・


 このMasterのページ数を参考にしてEnemiesに敵構造体リストを流し込む関数。これはもう構造体のスロット名を変えるだけで

 ナウシカとは違って戦闘後に負けてもゲームオーバーにならず必ず勝敗によって別ページに飛ばされるようなのでページデータはこういう感じで・・買ったらC-list(157 124)のCarへ飛ぶ。負けたらCadrへ。


 さて・・ここからが問題だ。今回の戦闘では開始時に手持ちの武器から1つ選んでその戦闘を行う(戦闘後武器は廃棄される)。そのために手持ちの武器を表示して選択させるという動作が必要。まずは選択肢を表示する関数を・・もちろん、ナウシカでのショップ関数をコピーして多少改造したら大丈夫だってのは分かってるんですけど・・
 あれをもう一度イチから思いつく自信が無い!そして自信が無いが故にイチから思いつかねばならん!と思うわけ。
 まずはアイテム(構造体)リストからAttスロットにBuki属性を持つものを抜き出してリストにする。奇跡的に書けたw

 Buki属性を返す部分は別関数att-listに。
 手持ちのアイテム(候補)リストから所持数1以上のもののみフィルター。ここまでは出来る。問題はこの所持品で、かつ、Buki属性のものを選び出す方法。どうだったったっけなぁ〜・・・苦闘2時間。諦めてショップ関数をちょっとカンニング、あ、Memberか・・それとCompose notの二重掛けであるものだけフィルター出来るんだった。もう忘れてる!悲しいなぁ・・
 で、Lambda(x)で取り出した手持ちの連想リストのCarをMemberのキー?にしてBuki属性の構造体を取り出すつもりだったのに・・連想リスト返ってる!
 まあしっかり武器属性かつゼロではない・・ので半分正解って所か。

 なんか気持ち悪いので納得できるまで考える。Compose notを一つ外すと・・Buki属性関係無しでゼロではないリストが返る。あ、Buki属性のリストとの照合が無効になってるか・・

 で、もう一回こっち。あ、そうか・・Memberの対象リストってのはLambda(x)で作られるリストか。memberはここでは#tか#fでフィルターになってるだけだから・・あれ?

 じゃあ普通にmemberで良くない?やっぱり!
 スゲぇ!ナウシカの時もたまたま動いてたのかw また勘違いしてたよ〜(-_-;)
 いや、でもまあコレでまた少しだけど理解が進んだ。

 で、ようやく武器リストの選択肢表示部分。このCametanさんのをとりあえず丸パクリさせていただきまして

 まあ出来ましたけど。こちらもイチから書ける気がしない。このMatch-lambdaをMapに食わせるという発想が湧かないよなぁ・・

 というところでもう1時半を回ってしまったのでココまで。コピペで済ませないで良かったなぁ・・と言うのが今夜の感想です!
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

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