Hextrategy やっと戦略アルゴリズムができた


2019年 6月 22日

 や、やっとできた。

 建築と政府の実装要素を入れた戦略アルゴリズム、なんと 3ヶ月もかかった。

 むずかし~い、今回は改めて思ったけど、初心者は 1MAPゲームとか STGのような単純なゲームを作るのを心がけた方が良いね。

 戦略のプログラムは予想以上に頭がこんがらがる、慣れもあるんだろうけど、これはコーエーが戦略ゲーム独占なのもうなずけるかな。

 STGだと当たり判定のような数学的な難しさはあるけど、一度出来てしまえば後は繰り返しなので、ある意味そんなに難しく無い。

 しかしこの戦略は、色々な要素をどんな順番でどう評価して動かすか、これはもう頭使う。

 はじめの頃に書いたけど、ゲームプログラムの難しさ 1MAP → ADV・STG → RPG → SLG だと思う。

 収入も無いのに、もう丸 2年も時間を使ってしまって、これは失敗だったと考えてる。

 みなさんはもう少し完成の目処の立つ簡単な作品を完成させて行く事をお勧めします。

 少しずつステップアップするのが良いと思います。
 
 

 さて、途中経過を「難しい、完成しない」と言って書いてると「精神論なんかいらねえんだよクズ!」という人がいるみたいなので、今回は途中経過を一切書かなかった。

 でも流石に更新の間が開きすぎてるので、これからはまた途中経過を記事にする事にする。

 しかしねえ、実際にやってみると適性もあるのかもしれないけど、プログラムだけでも相当大変だよ。
 
 
 まだ一応一通り動いただけで、バグ取りはこれからなのだが、あっという間に時間が過ぎて更新が空き過ぎるので、ここで一回発表する事にした。
 
 
 すこしだけ見てみる


 
 
 隣接する国で、一番弱い国を攻める

 HEXの上の数字は戦力値。

 脅威の無い国は配備無し、隣接する脅威値に応じて戦力配備する。

 これバグだけど赤国の上の HEXの城が消えてる。
 
 
 人員に余裕があると政府配置してくれる、これはデバッグ表示だが、政府の所

 左は部隊配備、wp1はその勢力の総戦力、wp4は必要な総防衛力、wpnは攻めるのに必要な戦力、wpbは隣接する敵国の戦力
 
 
 戦力が足りないときは TALENTを引い人員を補充してくれる。

 この画面は確認のためで、CPUはいずれ表示はしないようにする。
 
 

 右の赤国に警察署が建設された。

 という辺りで概要は終わりにする。
 
 
 
 それではソースの解説をする。

 メインソースはこんな感じになった

 
 
 最初の repeat plbはプレイヤー最大数の事。

 dependent_set ; 一時属領一覧セット
  mpn(pn)という変数にその勢力の(pn = プレイヤーNo.)占領している国を入れる。

 mana_point ; マナポイント
  属領から上がるマナポイントを加算。

 un_it_found ; ユニットとアイテムの発見
  属領から発見されるユニットとアイテム。

 プレイヤーの部分はプレイヤーが手動操作する国で、そちらへジャンプするので今回は関係ない。

  pmu_rst pn ; ユニット配置解除
  peq_rst pn ; 装備解除
  まずその勢力の全てのユニットと装備を全解除します。

 hrs_copy ; 英雄のユニット操作順列コピー
 his_copy ; 英雄のアイテム操作順列コピー
  その勢力のユニットとアイテムの順列を操作用の一時変数順列にコピーします。

mpn234_per ; 魔術、マナ、治安の順列
  属領のデータ、2=魔術、3=マナ、4=治安の順列をつくります。

 
 
human_set ; 人材
 人材を発掘する用の国を 1つ選びます。

 
 
blacksmith_set ; 鍛冶
 アイテムを発見する用の国を 1つ選びます。

 
 
castle_set ; 城配備
 これはユニットとアイテムの 1番の国が城のある本国だった場合、だったかな?

 
 
equipment_set1 ; 仮装備、装備と列の順列のセット
仮装備してその勢力の最強部隊戦力値(wpb)を出します。

 
 
hdn_cal ; 隣接国脅威値を算出
 属領の各必要防衛値を出します。
 総数は wp4にまとめられます。

 
 
attack_point ; 攻勢点
 属領に隣接する一番弱い国を一つ選んで攻め込む国を設定します。
 攻める国は matpに格納されます、必要戦力は wpnです。

 
 
 ここまでは情報収集のための仮配備だったので、もう一度装備と配備をリセットします。

pmu_rst pn ; ユニット配置解除
peq_rst pn ; 装備解除

hrs_copy ; 英雄のユニット操作順列コピー
his_copy ; 英雄のアイテム操作順列コピー

hrt1c=0 : hrt2c=0 : hrt3c=0 ; 列の順番カウントをリセット
hrt1qc=0 : hrt2qc=0 : hrt3qc=0 ; 装備列の順番カウントをリセット

repeat hub ; 列の順列をリセット
hrt1(cnt)=0 : hrt2(cnt)=0 : hrt3(cnt)=0
loop

mpn234_per ; 魔術、マナ、治安の順列
 
 
 今度は実配備になります。

human_set ; 人材
blacksmith_set ; 鍛冶
castle_set ; 城配備
 
 
 防衛戦力が足りない場合は部隊配備と外交官を優先して終わります。

 
 
 必要な戦力がある場合は攻勢点(matp国)を攻めます。
 最大自領 3国から攻めるようにしてますけど、バグなのかまだ機能しません。
(なんと if win_syorif=2と書く所を win_syorif=2とだけ書いてました。
 この「if抜け」はプログラムに慣れてくると結構やらかします。
 しかも書いてあるという思い込み前提なので、発見がしにくいという(笑))

 
 
force_set ; 部隊配備
 防衛戦力配備をします。

 
 
 内政です。

police_set ; 警察要請
 治安回復のため警察を最優先します。

 
 
diplomacy_set ; 外交要請
 今見たらプログラムが間違ってますね、機能してません。
 調整しないと。

 
 
government_set 1 ; 政府
 政府の配属をします。
 1というのは 3国や 5国以上無いと配備しないモードです。

 
 
mana2_set ; 第二マナ地
 人材を発見する第二候補地、マナを伸ばすようにします。
 それからユニット登録が満杯の場合に、人材府を建設します。
 条件が複雑なので非常に苦労したソースですが、まだちゃんと機能するかどうか未確認です。

 
 
magic2_set ; 第二魔術地
 アイテム発見の鍛冶屋の第二候補地、魔術を伸ばすようにします。
 第二候補地 1つで良いため、マナ地よりは単純です。

 
 
market_set ; 市場
 人口を伸ばす場所を 1つ選びます。

 
 
build_syo ; 建設処理
 以上の建設要請を元に建設を行います。

 
 
 各属領の領主配備をします。

 
 
government_set 0 ; 政府
 最後に人員が残ってるようなら政府に配属します。
 
 
 
 以上説明するだけで嫌になりますけど参考までにしました。
 まだ倉庫のプログラムも残ってるし終わってません。

 これを 3ヶ月思考錯誤しながら毎日ジリジリと進めていた訳です。
 いやほんとに大変だよコレ。
 
 
 8月の夏休み販売を計画してたけど、終わりそうにないなあ。
 
 

コメントを残す

メールアドレスが公開されることはありません。