星田オステオパシー

Racketで何か 四人のキング07 BATTLE関数突入

前回シンボル関係で恐ろしい間違いをしていたのに気づいたのでチェック!

 *map*にはシンボルのカード名がリストになって入ってるんですが・・'()とListを混同していて、このシンボルの羅列でインスタンスをコントロールできると思ってました(^_^;) 今更!?って感じですが


 じゃあListでリストを作るって事なんですが、そうなるとリストの中身は(当たり前ですけど)評価された値?のリストなんですよね。となると、当初予定していたSymbol->stringでマップを作ることができないワケで・・・


 しょうがないのでCARD構造体にスロットを追加して名称を付与。それでString形式の一次元マップデータを作ることにしました。
 手順としては
・CARDインスタンスSA〜CKまでを作ってシャッフル→
 ・それは残しておいて今後List-refで呼び出すのに使う
・そのリストを上の画像の方法でString形式に変換→
 ・マップ表示用に利用する
 と。


 という訳で構造体の戦闘にNAMEスロット追加


 PLAYER-ITEMには持ち物をListするわけだけど


 ドットリストを使った個数の管理が出来ない模様。もとから今回はアイテムは同種でも1つ1枠で行こうと思ってたのですが問題はGOLD。GOLDも同じITEMリストで管理しようと思ってたのですがドットリストが使えないのでは別の方法を取るしかないか


 しょうがないのでCARDにGOLDスロットを作ることにしました


 前回でっち上げていた述語「Satisfy-item?」を書く。要するに第一リストにある要素が全部全部第二リストに含まれているか?というのをチェックするもの。イベント発生要件となるアイテムが複数あった場合にも対応できるようにするため。
 出来たけど、作ってから「こんな必要そうなものが組み込みで存在しないのだろうか?」と気になってGPT!


 ついでなのでGPTならどう書くか?というのもチェック。なるほどCond使うか・・


 ちなみにやっぱり組み込みで存在しましたw


 同じく強制的にプレイヤーの座標を変化させる関数の実験。


 具体的には犯罪を起こしてバレたり捕まったりすると中央のJOK(ジョーカー)に送り込まれるので、そのための関数。


 上の2つの関数を使う運試し関数、一応ここに完成した(と言いつつ、CARD-SECONDはCARD-FIRSTの間違いです。コードでは修正済み)


 更に追加で運試しその他の条件で強制的にプレイヤーのステータスが変化する事があるのでそのための関数、のための実験。薬草とかポーションの時にも使い回しできるかな。さしあたってHITP(体力)の場合だけを書いておく、と。


 コード本編ではこういう感じ。


 で、実際のCARDインスタンスはこういう感じで・・・。ま〜まだ変わるだろうけど。'SELECTで戦闘を行うかどうか?の関数を呼び出して、そこから'(LUCK-TRY ...の先頭にある'LUCK-TRYをキーにして運試し関数を呼び出して、その後に続くのは成功の時の効果と失敗の時の効果。次のスロットは降参可能かどうかの引数。#fだった場合には降参不可能。これをキーにして降参するかどうかの選択肢を表示したり、降参した場合の効果を記述すると。


 'SELECTで呼ばれた場合戦闘するかどうかを選べる。更に戦闘を選んだ場合でも特定の条件が揃えば運試しを行う事が出来るので、その判定も。CARD-FIRSTが#fの場合には選択後すぐにBATTLE開始。運試し可能であれば運試しを行うかどうかを尋ねるLUCK-TRYを呼ぶ(CARD-FIRSTに内蔵)。そもそも戦闘を行わない場合には次のPHASEへ。


 運試しするかどうかを尋ねる関数。Yesなら運試し関数LUCKへ。行わないならすぐBATTLEへ


 運試しをする場合、成功した場合と失敗した場合の処理があるんだけど引数は全部CARD-FIRST内にリストのリストとして内蔵しておく。



 ’BATTLEでとりあえず呼び出すのはBattle-readってことで。運試しに勝った場合にはWORLD-WINが#tになってるので、ここでステータスの変更など。メッセージ表示部分とかはまだ固まってないので仮でそのまま書いてます。
 で、EVALには行かずにLOOP先としてREAD2ってのを作る事にしました。ナウシカの時でいうとINPUTにしてたヤツ


 READ2。BATTLE-LOOPのループ先なのでプレイヤー・敵それぞれのHPなどを表示して行動選択を許すと。最初に敵リストがNullってれば戦闘終了、これはBATTLE-LOOP部分に移すかも。
 降参オプションはCARD-SECONDが#tだった場合なのでその処理も。WHENって無茶苦茶便利だな!
 後は数字を入力してEVALへ・・ってところで今日はココまで。

 次回はBATTLE-EVALを完成させたいっすね。敵が複数なのは大丈夫だと思うけど、味方が増える可能性があるらしいので、そこはちょっと苦戦しそうかな。※四人のジャックには無さそうなんだけど・・四人のキングかクイーンに死霊術使いのプレイヤーがいてゾンビを味方に出来るっぽいんですよねぇ

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

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

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