トピック
こう subwars

敵CPの思考ルーチン

RTS系にアクション要素を足して バトルシミュレータでも作ろうかと 考えてみてはいるのですが 見事に思考ルーチンで詰まりました。
4そうだね
プレイ済み
返信[1]
親投稿
こう subwars
回避などは集団で動く生物の動きを 参考にすれば良いのですが、CPの 側から攻撃させる方法がいまいち 良いものが思いつきません。 どなたか案は無いでしょうか?
1そうだね
プレイ済み
返信[2]
親投稿
こう subwars
大まかなルールですが 一定のコスト内でデッキを組み、 自機を旗艦として複数対複数で 戦闘を行い、敵旗艦を倒した 時点で勝ちというものです じゃんけん的な相性は取り入れたり する予定が無いですが、ある程度 射程不利や火力不足といったものが 編成によっては出てきます
1そうだね
プレイ済み
返信[3]
親投稿
プログラムに関してはド素人以下なので何も言えませんが… 攻撃的なCPだと、射程も気にせずとにかくユニットを前進させたり。 防衛的なCPは、低コストのユニットを盾にしながらジリジリ接近し、高威力の攻撃を叩き込んできたり。また射程には中々入ってきません。 他にもコストや相性を優先したり、旗艦を積極的に狙う、特定の行動をしないと、自ら動かずひたすら防衛…とか。こういうヤツは、シミュレーションやってるとよく見ますけど。 えーっと、あれ?これ質問の答えになってないゾ…? プチコンド素人以下の私はお役に立てそうもありません。しかし応援は(密かに)します…以上、独り言でした((
1そうだね
プレイ済み
返信[4]
親投稿
こう subwars
どもです 見れる頻度が減ってるので 返答も薄くなっちまうんですが もし良ければ思いつき次第 書いてって貰えると有り難いです
0そうだね
プレイ済み
返信[5]
親投稿
すぎ field2050
思考ルーチンを作るなら基本はランダムです。ランダムで動かせるルールとか下地ができていれば、優先順位、点数評価など作っていくとできます。将棋を最初に作ろうとしていたころ。途方に暮れていたとき、先輩がまず駒を動かせるものを作れればいいんじゃないと言ってもらってキッカケになったことがあります。
1そうだね
プレイ済み
返信[6]
親投稿
こう subwars
ランダム稼働は別プロジェクトの 横スクロールゲーから技術流用 お気に入り投稿にありますので もし良ければ((
0そうだね
プレイ済み
返信[7]
親投稿
すぎ field2050
4/21の投稿をダウンロードしてみました。画像ファイルがとれないようでした。逃げるルーチンができるならば、逆に敵に向かうルーチンもいけるはず。コンピュータのできる環境があるならばCODE VS 4.0がRTSテーマで参考になりますが、難易度はMAXです。
0そうだね
プレイ済み
返信[8]
親投稿
こう subwars
画像ファイルが取れない? というと...?
0そうだね
プレイ済み
返信[9]
親投稿
こう subwars
あー コンマの位置変わってますorz 再公開しました
0そうだね
プレイ済み
返信[10]
親投稿
りきすけ rikisuke
移動マップを配列である程度区切ってマス目状に設定して、このマスにいる☆☆ユニットはこちらの方向にいく確率○○パーセントというデータをマッピングする、というのはどうでしょうか?
0そうだね
プレイ済み
返信[11]
親投稿
あきと SideBurnsM
壁があるか無いかで難易度が変わりますがとりあえず敵の場所に向かって移動するという機能を作った後、自分の射程範囲に入ったら止まって攻撃するという機能の追加、その後攻撃モードの防御モードを作って自分から攻めていくか、ベースの近くで敵を迎え撃つかの比率をユニット毎に持たせるとか作るとそれなりの動きをする 気がします。
1そうだね
プレイ済み
返信[12]
親投稿
こう subwars
自機側CPはユーザにある程度 制御してもらって負荷を軽減しつつ... 要素は 距離 数 射程 火力 ユニットの性質(相性?) ですかね。ちょっと考えてみます
0そうだね
プレイ済み
返信[13]
親投稿
こう subwars
ちょっとあまりにも厄介だったので 防御側から作ってみます 手強い...
1そうだね
プレイ済み
返信[14]
親投稿
こう subwars
防衛側の素材(?)として 魚の群れの回避行動を使ってみてます ご想像の通りうまくいってませんが...
0そうだね
プレイ済み
返信[15]
親投稿
あきと SideBurnsM
boidは組み込んでみようと思ったこともありましたが、計算量が多すぎるかもしれません。 とりあえず複数キャラクターの群れがその配置のまま敵に向かうような動きに簡略化した方がいいと思いますよ。
0そうだね
プレイ済み
返信[16]
親投稿
こう subwars
それなら一応成功しているのですが... そこからの発展が上手く行ってません アルゴリズム化とでも言うのでしょうか どうも想定と違う動きをします
0そうだね
プレイ済み
返信[17]
親投稿
こう subwars
最終的な目標 回避 周囲の味方に角度を合わせる 周囲の味方に速度を合わせる 複数の団体に分裂しても戻る を保ちつつ攻撃を行う ってこれ かなり重そうですね... 弾や味方CPの処理は 最終的にかなり削ることになるかな
0そうだね
プレイ済み
返信[18]
親投稿
あきと SideBurnsM
興味が沸いたので試しにお互いを全滅させるというのを組んでみました。 忍者が手裏剣を投げ合います。 公開キー【ESVVN33J】 ファイル「RTS_TEST」 確かに隊列をキープできないですね、難しい。あと「どこを狙うのか」という意思決定を作るのも難しそう。 このプログラムでは一番遠い敵を決めうちで向かうようにしました
1そうだね
プレイ済み
返信[19]
親投稿
こう subwars
ありがとうございます 最終的にくっついちゃいますね... 恐らく以下のパターンで書けるのですが 相変わらず上手く行ってません 敵の攻撃に対して直角に逃げる (近いものを優先) 周囲の味方と一定距離を保つ 周囲の味方にスピードを合わせる 周囲の味方に角度を合わせる 他に味方グループがあれば、 そのグループの中心に近付く
1そうだね
プレイ済み
返信[20]
親投稿
こう subwars
恐らく基礎的な事が出来て無いのかな 周囲味方の位置取ろうとしたんですが どこ間違えてるのか、うんともすんとも。
0そうだね
プレイ済み
返信[21]
親投稿
あきと SideBurnsM
結構な回数で当たり判定や距離取得を行うので計算量が多くなってしまいますね。 頑張ってください! 私もパラメーターを変えれば近距離、遠距離の兵も作れそうなので何か作れないか考えてみます。 動作を確認するのはこまめにPRINTするしかないですね
0そうだね
プレイ済み
返信[22]
親投稿
こう subwars
あまりにも混乱してたので 一旦紙に整理しました こうして書いてみると簡単なのに ざっとプログラムに起こすと 途端にスパゲティなんですよね
0そうだね
プレイ済み
返信[23]
親投稿
こう subwars
プログラムが久々すぎて テスト用のミサイルがやっと完成 これからルーチン組みます
1そうだね
プレイ済み
返信[24]
親投稿
こう subwars
SP同士がヒットしたら座標ではなく いくつのSPと衝突したかを求める という事は出来るのでしょうか? どなたかご存じないでしょうか?
0そうだね
プレイ済み
返信[25]
親投稿
すぎ field2050
SPHITSP(500)で500番のスプライトと衝突したスプライトの番号を戻します。相手のスプライトにSPCOLの定義必要です。一つずつかえってきそうなので、ぶつかったものをSPCLRなどで排除していけば数えることはできます。 最近使ったばっかりなので、正確ではないかもしれません。
0そうだね
プレイ済み
返信[26]
親投稿
こう subwars
SPCLRだと利用停止しますよね... 座標でやるしかないのかな
0そうだね
プレイ済み
返信[27]
親投稿
りきすけ rikisuke
SPFUNCで、管理番号500と当たっているSPがhitの変数を1ずつ増やしていく、というやり方があるのかなと思う。
0そうだね
プレイ済み
返信[28]
親投稿
あきと SideBurnsM
サンプル作ってみました。公開キー【RDKXC3HV】 一番下の関数をコピーすれば流用できます。(配列HITSも宣言してください) SPHITSPに当たり判定を行う番号の範囲を渡す機能で実現してます。
0そうだね
プレイ済み
返信[29]
親投稿
あきと SideBurnsM
何のサンプルなのか書いてないので説明。 自作関数SPHITSPM(MY,ST,ED)は、 スプライトMYがST~EDまでのスプライトと重なっているか判定して全ての番号を配列HITSに格納します。関数の返り値は重なったスプライトの数になります。サンプルではハカセを動かすと左上に重なったスプライトの数、あとは重なったスプライトの番号が羅列されます。
0そうだね
プレイ済み
返信[30]
親投稿
こう subwars
各ユニットの動作 検出範囲内に味方がいれば 味方との距離を調整する(主に味方の 次フレームでの移動量をいじくる) 接近対象や距離維持の対象が 極端に少ない場合 近くにいる味方とグループを作り 近くのグループに近づく 敵の攻撃が近い場合 他の行動よりも優先して回避する この中の個体数検出でつっかえてたんです ありがとうございます
0そうだね
プレイ済み
返信[31]
親投稿
こう subwars
やっとこさ一機制御できました 個体数を増やして、↑の関数入れて、 攻撃出来るようにして...先は長そうです
0そうだね
プレイ済み
返信[32]
親投稿
こう subwars
このゲーム出来たら3D化してみたいです 一通り完成したら とりあえずポリゴンからかな? いつになるのかはともかく。
0そうだね
プレイ済み
返信[33]
親投稿
こう subwars
wiiUでしょうなあ 最適化されてない群行動とポリゴンを 同時に動かそうもんならどうなるか 火を見るよりも明らかで。
0そうだね
プレイ済み
返信[34]
親投稿
あきと SideBurnsM
半熟英雄みたいな表示ならいけるかも。
1そうだね
プレイ済み
返信[35]
親投稿
こう subwars
円弧の描画ってどうやるんでしょ?
0そうだね
プレイ済み
返信[36]
親投稿
あきと SideBurnsM
楕円じゃなくて扇形ってこと? 円を描く命令の2ページ目に書いてあるとおりだと思うけど。
0そうだね
プレイ済み
返信[37]
親投稿
あきと SideBurnsM
GCIRCLE命令の2ページ目ね。
0そうだね
プレイ済み
返信[38]
親投稿
こう subwars
ほうほう 調べてみます 明日暇なんで作業が進むといいんですが...
0そうだね
プレイ済み
返信[39]
親投稿
こう subwars
テストが近いので群行動より負担の軽い 別のもの作ってます。6月中頃から再開します プロジェクト内のHUD2が↑で言ってる奴です ファイル名通りのものが入ってます
0そうだね
プレイ済み
返信[40]
親投稿
こう subwars
ちょっとだけアップグレード
0そうだね
プレイ済み
返信[41]
親投稿
あきと SideBurnsM
???これは全く別物なのかな。 あとから合体して一つのプログラムになるとかではなく。開発フォルダみたいのが丸々入ってたけど。
0そうだね
プレイ済み
返信[42]
親投稿
こう subwars
SAMPLE・・群行動の一機のみのサンプル HUD・・HUD 最終的にはくっつくけど いつのことになるやら... ある程度更新したもの全部入れてます それぞれ数字の大きなものが最新版です
0そうだね
プレイ済み
返信[43]
親投稿
こう subwars
今現在 群行動のほうは とりあえず味方と一定距離を保ち、 敵の攻撃に対して直角に回避する というものを作っています 何か付け足すべきものを挙げて 頂けるとありがたいです 自機側は自機をある程度動かせて、 攻撃や撤退を選べるのが理想...かな...?
0そうだね
プレイ済み
返信[44]
親投稿
こう subwars
空き時間に作ってみた、ポリゴン表示の サンプルです。表示優先の処理と光源の 処理だけどうやっても出来なかったのですが、 どなたか出来る方いらっしゃいませんか?
0そうだね
プレイ済み
返信[45]
親投稿
あきと SideBurnsM
とりあえず頂点を直接操作するのはやめて、ポリゴン面を増やしても描画できる構造にソースを書き直したほうが良いと思います。 理想はDATA分で頂点、線分・面を読み込んでDATA文の書き換えだけで表示も変わるのが理想です。
0そうだね
プレイ済み
返信[46]
親投稿
こう subwars
DATAぐらいなら何とか... 自分が今の知識でやると やたらと重くなりそうですが... 余計な計算をしない 余計な描画をしない 当たり判定をつける ってのもなかなか難易度高そうですね 奥から順に描画する 光源の位置を考えて色を変える この2つはどうなってるんでしょかね
0そうだね
プレイ済み
返信[47]
親投稿
あきと SideBurnsM
DATA文から読み込んだ配列で計算するので重さは変わらないと思いますよ。 奥から描画するものすごく簡単な方法は面を構成する3頂点のZ座標の平均を取ってソートする事で描画するジュンバンヲ決めるというものです。 その先に外積を使用して面に直角なベクトルと視点との内積で面が裏向きだったら描画しない表裏判定、光源との内積から陰影をつける処理に繋げて行くことになると思います。
0そうだね
プレイ済み
返信[48]
親投稿
こう subwars
内積はもう少しで習いそうです 外積はホーミングで散々お世話に... 未だに何やってるのか判りませんが。 裏向きかどうか判別してるってことは ifより描画の方が重いんでしょうか
0そうだね
プレイ済み
返信[49]
親投稿
あきと SideBurnsM
Zソートしてもめり込む描画はどうしても発生してしまうので描かなくていいものは除外した方が見映えがよくなりますよ。 もちろん負荷も下がります。
0そうだね
プレイ済み
返信[50]
親投稿
こう subwars
流れとしては データ読み取り データ書き換え Zソート 描画 で良いのでしょうか
0そうだね
プレイ済み
返信[51]
親投稿
あきと SideBurnsM
READしたモデリングデータは丸々とっておいて、コピーして使うようにします。 なのでループ内では 移動、回転、拡大縮小 Zソート (裏表判定) (陰影処理) 透視変換 描画 かと。
0そうだね
プレイ済み
返信[52]
親投稿
こう subwars
コピー...? DATAにあるのは初期座標だけって事ですか? コピー先は何処に... Zソート→描画が上手くいかないのは 自分だけだと信じたい
0そうだね
プレイ済み
返信[53]
親投稿
あきと SideBurnsM
頂点、線分、面データのうち、実際に計算で内容が書き変わるのは頂点だけです。 配列POINT,VERTEX,POLYをDATAから読み取ったらPOINTの中身をWPOINTに毎フレームコピーして計算を行うようにします。 もちろん移動XYZ、回転RX,RY,RZも必要です。(拡大するならそれも) 描画するときはVERTEX,POLYも使いますが書き換えはしないのでそのまま参照するだけです。
0そうだね
プレイ済み
返信[54]
親投稿
こう subwars
DATAから頂点、線分、面データを読み取る ループ 頂点データをコピー 演算 ソート (ry ループエンド ですかね 面や線分のデータとは?
0そうだね
プレイ済み
返信[55]
親投稿
あきと SideBurnsM
線分は必要ないかもしれないけど面データは必要なはず。 GTRIで三角形を描く際に使う3点をリストにしたもので、後々は3点の順番がポリゴンの向きを決めたりします。
0そうだね
プレイ済み
返信[56]
親投稿
こう subwars
遅くにありがとうございます 面と線分に関してはいまいち掴めないので サンプルが組めてから改めて支援願います あと 6月中頃から群行動ルーチンの 再開出来そうです
0そうだね
プレイ済み
返信[57]
親投稿
こう subwars
ちと整理(?) DATAには各頂点の初期座標や初期角度 面のデータ(?)を入れる 実行後、配列に座標などを代入 ループに入る 配列から演算/描画用配列にコピー 回転量、それに伴う移動量などから 頂点座標を上書きする
0そうだね
プレイ済み
返信[58]
親投稿
こう subwars
上書きしたデータを保存用の配列に戻す 描画用配列を面のZ座標でソート 表裏の状態から描画対象かどうか判断 角度の状態から色を補正 座標データをスクリーン用に補正 描画 ってな感じですかね 毎フレームソートしてるけど
0そうだね
プレイ済み
返信[59]
親投稿
あきと SideBurnsM
計算後のデータを戻す必要はありません。 毎回計算して描画に使うだけで次回になにか影響するわけではないからです。 毎フレームソートは必要ですね。
0そうだね
プレイ済み
返信[60]
親投稿
こう subwars
分かりました 3Dでの群行動... 実現したら面白いだろうなぁ
0そうだね
プレイ済み
返信[61]
親投稿
こう subwars
Zソート 保存用配列(枚数,各xyz頂点,各xyz角度) から処理用配列にコピー 処理用配列からさらに 頂点配列(px[],py,pz,rx[],y,z)にコピー それぞれを書き換えて SORT PZ,PX,PY,RX(ry 処理用配列に順番に戻す
0そうだね
プレイ済み
返信[62]
親投稿
こう subwars
二重FORかなんかで前詰めしながら 描画用配列に描画するものだけコピー 影付け&座標補正して描画 この流れでいくと DATA:完全に初期座標や初期角度等のみ ゲームスタート時等に使う 保存用:初期座標や初期角度等 ゲーム中はこいつからコピーしてくる 処理用:そのフレームにおける座標や角度 ただし相対座標 描画用:描画するための色データや 相対からモニタ座標に補正したデータ ってことですかな
0そうだね
プレイ済み
返信[63]
親投稿
こう subwars
速度を上げるには? ifを減らす 描画を減らす やたら複雑なループを減らす 配列アクセス回数を減らす 要らない座標計算も減らせば (別ポリゴンで同座標の頂点等) 恐らくは最速なのだろうけど それやってる間にテスト終わりますな
0そうだね
プレイ済み
返信[64]
親投稿
あきと SideBurnsM
角度配列なんていらないと思いますよ。 とりあえず頂点に対しての移動・回転・拡縮をかけるとほぼ全頂点が動いてしまうのでいらない座標計算というものじたいぎなくなります。速度を上げる前に正しく表示されるか目指しましょう。
0そうだね
プレイ済み
返信[65]
親投稿
こう subwars
来週の火曜以降に再度トピ立てます 一応群行動の開発再開です それまでここは開けておきますので 何か気になる事があれば書き込んで下さい
0そうだね
プレイ済み
返信[66]
親投稿
こう subwars
書き込んで下さいって書いておきながら 自分から書き込んでいくスタイル グラフィックではなくて スプライトをポリゴンの様に表示する ような方法がよく見受けられますが ざっくり言うとどんなやり方なんですか?
0そうだね
プレイ済み
返信[67]
親投稿
あきと SideBurnsM
よくあるわけではありません。 バグ太郎さんがPVER-G3Dで実装した方法ですね。三角形ポリゴンをスプライトで擬似的に近似して表示する方法です。 実行したときのスプライト面を見てみると分かるのですが、2点を固定して1点を移動させた三角形をたくさん用意して一番近い形の三角形を使ってポリゴンの代わりとして表示しています。
0そうだね
プレイ済み
返信[68]
親投稿
こう subwars
SPでのポリゴン作品 コミュだけでもいくつか見ますよ? いつの日かやるのか...? いや多分やらないでしょうか 夏休みは長いので そこで現行の作品がどこまで進むか それ次第ですかね
0そうだね
プレイ済み
返信[69]
親投稿
あきと SideBurnsM
それはグラフィック面にGTRI命令を使って三角形を描画しています。もうひとつ海外のプチコンで縦長スプライトで立体迷路を表現してるプログラムがあります。
0そうだね
プレイ済み
返信[70]
親投稿
こう subwars
スポーキーメイズ...でしたっけ よくやる気になりますよねあーゆーの... せっかく休みが長いので 敵ルーチンの構築を遺伝で行おうかと 真面目に考える今日この頃
0そうだね
プレイ済み
返信[71]
親投稿
こう subwars
やっと手が空いた... とりあえず新規に投稿しますので 協力して頂ける方やどうなるか見たい方 コメントしてみてください
1そうだね
プレイ済み