戦闘モジュール3
忙しいのですごく簡単なスクリプトを書いてみる。行動順、回避、技などを考えなければ非常に楽である。
同じようなのを作ったのは2年以上前になるのか・・・月日が経つのは早い。
ゾークとローグのあいのこみたいなのを作りたいのだが、まずはこのくらい単純なものから作っていこうか。
前のやつはそのまま拡張して複雑なものを作れるものだが、最初からしっかりしたデータを作っていくのは面倒である。
(defun battle (data-a data-b) (let ((max-a (cadr data-a)) (max-b (cadr data-b))) (while (and (plusp (cadr data-a)) (plusp (cadr data-b))) (format t "~%〈~A ~A/~A ~A ~A/~A〉~%" (car data-a) (cadr data-a) max-a (car data-b) (cadr data-b) max-b) (labels ((ndm (n m) (let ((c 0)) (dotimes (a n (+ c n)) (incf c (random m))))) (damage (p1 p2) (let ((dmg (max 0 (- (ndm (nth 2 p1) (nth 3 p1)) (nth 4 p2))))) (if (zerop dmg) (format t "~Aの攻撃! ~Aはダメージを受けていない!~%" (car p1) (car p2)) (progn (format t "~Aの攻撃! ~Aは~Aダメージを受けた!~%" (car p1) (car p2) dmg) (decf (cadr p2) dmg)))))) (damage data-a data-b) (damage data-b data-a)) (refresh-screen) (do-events))) (if (plusp (cadr data-a)) (format t "~%~Aは倒れた!~%~Aの勝利!" (car data-b) (car data-a)) (if (plusp (cadr data-b)) (format t "~%~Aは倒れた!~%~Aの勝利!" (car data-a) (car data-b)) (format t "~%相打ちとなった!~%引き分けだ・・・")))) ;例 (名前 HP n m DEF) ダメージ計算: 攻撃側:nDm − 被ダメ側:DEF (battle '("きのこ族" 30 2 6 2) '("たけのこ族" 50 1 7 3)) | 〈きのこ族 30/30 たけのこ族 50/50〉 きのこ族の攻撃! たけのこ族は3ダメージを受けた! たけのこ族の攻撃! きのこ族はダメージを受けていない! 〈きのこ族 30/30 たけのこ族 47/50〉 きのこ族の攻撃! たけのこ族は4ダメージを受けた! たけのこ族の攻撃! きのこ族は4ダメージを受けた! ...中略... 〈きのこ族 3/30 たけのこ族 19/50〉 きのこ族の攻撃! たけのこ族は7ダメージを受けた! たけのこ族の攻撃! きのこ族は5ダメージを受けた! きのこ族は倒れた! たけのこ族の勝利!