星田オステオパシー

Racketで何かゲームらしきものをつくれ!010 アイテム使用関数

 今日も宿直プログラミングやって行きます!

 まずはモジュール化関連。(provide (all-defined-out))だけって、シンプルな書き方で分かりやすい!もっとツールで分離したかったけど、僕が作ったのは内部に特定の構造体を参照してるものばっかりだったので駄目だった・・今度からはCametanさんのみたいにツール化出来るように考えて書かないといかんなぁ



 折角なので各データを別モジュールにする。今回早速威力を思い知らされました・・・すごく書きやすかったです


 で、いよいよアイテム使用関連。結局使えるアイテムは回復系だけなので回復ポイントを新しくスロットで作って対象外は#fにする


 オッケイ、item構造体のリスト、item-listから回復効果のあるものだけを抜き出せる。問題は、実際に持っている装備品リスト(master-equip env)とのリレーションだが・・


 どうやったら良いんだ?片方は連想リストのインデックス部分、片方は構造体の名前スロット部分。流れとしては現在の持ち物(master-equip env)連想リストからアイテム名を取り出してきて、それをキーにして構造体リストから同じ名前のアイテムをフィルターして使用可能アイテム一覧を出したいのだが・・。
 ここで前回Cametanさんにいただいた「構造体の中身をチェックするようには出来ない」というお話。そこでアイテム名だけのリストを作る。これとmemberを組み合わせれば・・・


 と、思ったのだけどmemberってリストの#t以降を全部返すという謎仕様(これは以前から疑問だった)。いや、あったら#t返してくれたらfilter出来るんだけど・・。無かったら#fが返ってくるので使用対象外はこうやって返せるんですよねw。


 じゃあ更にそれに(compose notを合体させたら逆が返ってくるか?・・返ってきた!compose凄い!


 じゃあ選択肢にするためにenumerateを・・あれ?


 あ、こういう出力だったのか・・


 match-lambda部分とformat部分のパターンを変更しまして・・出来た!


 という訳で後はショップ関連のコピペみたいなものなので・・出来た!
 まずはサブ関数を・・現在手持ちで回復機能ありアイテムリストは何度も使うので独立させました


 READ部分、今回はちゃんとINPUT部分を統合しました

 EVAL部分は・・ほぼコピペですかねぇ。hpの回復とアイテム減少を処理して、銀貨0変化とhpが初期値より多くならないようにキャップをつけてPRINT&LOOP(今回処理がシンプルなので合体版です)に渡して・・と言う感じで。

 こんな感じで0になったらリストにも出てこないし大丈夫だな!現在hpが表示されないのは不親切なので、次回表示するように変更しよう。表示と言えば・・パンを「使う」ってどうなんだ?というのもありますねぇ・・葡萄酒もあるし傷薬もあるので「食べる」ではなぁ・・このためだけにまた識別用フラグをつけるのも・・傷薬以外は「口にした」にして、傷薬の場合だけ表示部分で「使った」にする分岐を入れるか・・

 と、ここで1時になったので今日はこれまで・・ま、本当はEVAL・PRINT・LOOP部分は6時に起きてまた書いてました(昨夜は興奮して全然寝付けなかった上に、ウズウズして結局6時から書いてると言うね)。あ〜水曜日が待ち遠しい。

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

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

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