星田オステオパシー

RacketでCLIラピュタ08 イベント関数をガーッと書いて、画像データをゴーッと整える

昨夜は宿直でいつもどおり楽しくコード書いてたんですけど、途中でどうにもハマってしまって深夜2時で中断。まあ、その辺は学習日記の方に・・

え〜前回、日曜日の夜に書いた後、翌朝からちょっと驚くほどやる気が出てしまってダラダラと続きを進めてました。

 まずはアイテムドロップ関数。Match-letを使って書いてみたくなったので・・ただ、アイテムの増減はHPACでやることにしたので使わないんですけどね!

 で、それをMapとMatch-letで書いたらどうなんのかな?と書いてみたり・・これは学習日記でやったヤツですね。まあ、使わないんですけどね

 アイテムを所持してるかをチェックする。Argの1つ目にアイテム名、2つ目に持ってた場合の行き先、3つ目に持ってなかった場合の行き先と。

 HPAC関数(実はアイテムも)。ArgをMatchで分けて引数4つの時にはアイテムもイジるように、と。あ、後ろにtestとあるのは未テストです。まず一気に書いてしまうテンションだったので

 END関数。そう言えば途中でHPが0以下になった場合の処理をmainに入れないとなぁ・・

 武器が減っていたら初期状態まで戻すというページがあるので

 武器リセット関数。言うまでもなく間違ってますw これと同じ問題をアイテムゲット関数でやらかしてたわけ(^_^;)

 後はサイコロ関係のバリエーションが多いので、もうまとめるのは諦めて個別で作ってます


 一度目はページを選べるが二度目に来たときには強制的にあるページだけしか選べない・・という仕様のページのための関数。Eventが真の時にはmain-inputの時と同じようにページを選べるようにする

 今回のチャレンジ要素の一つが3発だけ使えるランチャーの存在。3発の限定で、扉や壁を壊して進むことが出来る。壊した壁は次からは自由に移動できる・・というもの。うーん・・考えた末に、イベントOFF条件だったTrackへのページ追加を全ページではなくて何度も通過する可能性があって再びイベントが起きたら不自然なページに限定することに。そしてまさかの遊びスロットだったPpageが輝くときがやって来た!HPACなどの場合はそのページ自体の数値を入れておき、壁が通過可能になる場合には通過した先のページに元ページを入れておけば・・再現できるじゃないか!

 P220に到達した段階でP246をTrackにConsしてイベント発生をOFFにする。よっしゃ!

 と、思ったのもつかの間・・同じページでランチャー使用が複数可能な場合がある(-_-;) これだと上の手が使えない・・・

 というわけで、しょうがないので専用のイベント関数を書く。ランチャーの残弾がある場合のみランチャーで行ける選択肢を表示する。残弾がない場合はすでにTrackに登録されてるページ(つまり行ったことがある)ページのみを選択肢として表示するように、と。テストはまだだけろ理屈としては行けるはず

 という訳で難関P208はこんな感じで。行動力回復の泉は何回も使えたらゲーム的にはおかしいので(現実的にはおかしくないが・・)、YESNO関数は自前でTrack追加して・・と。実はSC関数は他でも有用だったので流用する事に。

 ムスカ戦ではランチャーを使えるwのでちょっと特殊処理。最初はBL(Battle with Launcher)関数って作るつもりだったけど、考えたらPageで場合分けしてEval部分だけ別で用意すればイイのでこういう感じで。

 で、ここから昨夜の宿直。テストのためにPagesインスタンスを一気にリストにして

 Yes-no関数のテスト

 Yes-noオッケイ

 数字入力のInput-num関数

 Input-num関数オッケイ


 よっしゃガンガン行くぜーっ!と思ったのだが・・。前回Let Loopで書いたアイテムゲット関数をMapで行くか!と。以前の学習日記でテストしてたんで大丈夫だと思ってたんですが・・Argの連想リストが複数あるものを使ってテストすると(単数ならHPACで行うので)


 ファーっ!なんじゃこりゃ!
 うーん・・ArgのP139の鍵AとP139の鍵B、それぞれについてEquipにAlis-consしてしまってる・・まあ、考えたらそうなんですが。コレ困ったなぁ・・

 ナウシカの時に書いたのはLet Loopを使ってこういう感じ・・
 あ、(let loop ((Equip Equip))・・・・(loop (cdr Equip)) だけで良かったわ。

 うーん、Mapを使ってはどうしても出来ない。けどリストを使う限りは高階関数で絶対に出来るはずなのになぁ・・というところで2時過ぎてたので断念。

 ネタバレですけど解決しました。次回はもう終わらせる勢いで進めるデ!




  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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

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