
まず前回のBattle-Read2関数なんですけど、最後のEvalに渡す部分をちょっと変更しました。最初はシンプルに「味方は単体、敵は複数」っての想定してたんですけど、これは後で「複数vs複数」にすると大変な予感がする・・と危険予知が働いて最初からそっちに挑戦することにしました。エラい!

変えたのは最後のココ。構想としてはCommand-listってのに味方の攻撃対象をIntのListで保存してEvalに渡そうって寸法

で、でっち上げたInput-command関数を書く。敵の数までの数値でターゲットを決めて、Playerの味方分だけ繰り返して入力してConsして保存すると。後はEnemyからPlayerへの攻撃対象を同じようにListでつくれば組み合わせで戦闘の処理が出来るんじゃないかな?と

というわけでBattle-Eval関数を作っていくか・・しかし何を思ったかテキスト打ち専用マシンを宿直室に持ち込んでのコーディングに挑戦。とにかく見通しが悪いのでほぼ疑似コードみたいなもの・・。で、帰宅後に()の数合わせやインデントを入れて整形したものが上の画像になります。今度から日本語でやるとしよう(^_^;)
大まかな流れは良いんだけど、PlayerをLoopで回しつつ、PlayerごとにEnemyをLoopで回す入れ子Loopにしないといけないと気づいて書き直し。

自分用に注釈を付けつつ考えをまとめて・・と。これをまずはEnemyでLoop回すようなのに書き換えて、それをPlayerでLoop回せばListのListが出来て、それを元にしてPrintと再生成をすると

今回は判定用のロジックがメインなのでさすがにテストをする事に。エラい!テスト用に最小構成の関数にしてちゃんと動くかチェックしつつ挑戦。
ちなみに、上の 2 '(2 3 1) 1の場合、Player1は敵の2番めを狙ってるので
Nanimonai Ippouteki bousen になるはずなんだけど・・w
そして・・・2 時間後(^_^;)
あのさぁ!プログラミングしてると「自分の頭の悪さを思い知ることが出来る」って言葉を聞いたことあったんだけど、今回も大いに思い知らされましたワ!
なんかこんなのむちゃくちゃ簡単そうなのに、頭の中で延々とお手玉が繰り返されて全然書けないでやんのw
宿直先で書いてたので手書きのメモを書くことが出来なかった・・という言い訳はあるけど、それにしてもねぇ。思うに結局プログラミング能力って脳の短期記憶力に左右されるんじゃなかろうか?「あっ!そうか」と思って組み立てようとカーソルを動かしたらもうワケが分からなくなってるという事故多発。

というわけで出来上がったのがコチラ。結果的に言うと、外のLoop(Player)で回す際に1から始まるカウンタ(P-count)を設定しておいて、中のLoopで回す際にも同じように1から始まるE-countを作り、Playerの1つ目のターゲット番号とE-countが合致したらタイマン。
↑で無い場合でP-countとCar enemy-attack-listが同じならPlayerが一方的に狙われてるので防戦。
P-countとCar enemy-attack-listが違っていて、なおかつE-countとPlayerのターゲットが合致していたら一方的に攻撃する
いずれとも違うなら交戦は発生してないので何もなし。
これを

このPlayerをCdrしつつ回すLoopで回すと・・
やったぜ!とうとう想定通りの動きをしてくれた!後はこれを加工してPlayer構造体とかEnemy構造体を組み入れてやれば・・・まだ先は長いな。
ところで、今回のお互いのターゲットをListにして突き合わせて・・って方法、これもしかしてFor/listあたりで簡単に出来るんじゃないか?と言う考えがチラチラと頭をかすめてたんで、一度通常のプログラミング学習の一環としてやってみようと思います。