[過去ログ] 一人で完成まで頑張るの寂しいからかまって [無断転載禁止]©2ch.net (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
791: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/15(木)03:18 ID:BBzmqpLY(1/2) AAS
>>790
俺は 1 じゃ無くて >>60
792: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/15(木)23:38 ID:BBzmqpLY(2/2) AA×

793: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/16(金)10:18 ID:KbkqyE7G(1) AA×

794: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/21(水)04:33 ID:RUOoQd+z(1/2) AAS
JSプラグインで、変数番号の変数にアクセス出来る様にした
変数番号をアドレス、変数番号の変数をポインタ外し、として扱った

getEfxAdr nDst nSrc:
 nDst = &nSrc;
 nSrcの変数番号をnDstに入れる

getIndVar nDst pSrc:
 nDst = *pSrc;
 pSrcの変数番号が指す変数の値をnDstに入れる

setIndVar pDst nSrc:
 *pDst = nSrc;
 nSrcの値をpDstの変数番号が指す変数に入れる

getEfxAdrSwitch bDst pSrc:
 bDst = &pSrc;
 pSrcのスイッチ番号をbDstに入れる

getIndSwitch bDst pSrc:
 bDst = *pSrc;
 pSrcの変数番号が指すスイッチのOn/OffをbDstに入れる

setIndSwitch pDst bSrc:
 *pDst = bSrc;
 bSrcのOn/OffをpDstの変数番号が指すスイッチに入れる
795: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/21(水)04:33 ID:RUOoQd+z(2/2) AAS
プラグインの引数に変数番号では無く、変数の名前を与える事で
変数の並びを変えた時の修正ミスや手間が省ける

「変数名から変数番号(アドレス)を得る方法」
・キャッシュ[変数名] に値が入っているなら
 ・キャッシュ[変数名] を変数番号として返す
・ループ
 ・$dataSystem.variables[i] == 変数名 なら
  ・キャッシュ[変数名] = i
  ・i を変数番号として返す

「$dataSystem.variables[]」に
ツクールの変数が変数番号順に入っている
796: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/25(日)06:44 ID:Gy2RzjYB(1/2) AAS
構造体の配列をプラグインで管理した

&foo は変数名 foo を指定する参照渡し
struct は、プラグインのサブ・コマンド
struct iter は、サブ・コマンドのサブ・コマンド

BkkSprite struct init &ctrlHead &iterHead &iterTail &max
BkkSprite struct alloc &ctrlHead

init で管理領域を設定して
alloc で実際にスタック上にデータ領域を確保する

BkkSprite struct iter isBegin &ctrlHead &result
BkkSprite struct iter isEnd &ctrlHead &result
BkkSprite struct iter begin &ctrlHead
BkkSprite struct iter end &ctrlHead

イテレータの終了チェックと、イテレートの開始/終了

BkkSprite struct iter at &ctrlHead &idx

イテレータの値を直接指定して、そこへ飛ぶ

BkkSprite struct iter ++ &ctrlHead
BkkSprite struct iter -- &ctrlHead

イテレータを進める

基本的に要素の削除は無くて
代わりに使用中フラグをメンバーに入れて置くか
またはスタックごと開放して、リセットで最確保する
797: 60 某犬犬 ◆HzfAAjcl8nz1 2020/10/25(日)07:20 ID:Gy2RzjYB(2/2) AAS
データへのポインタを列べたイテレート領域を使って
構造体のメンバーにアクセスする(管理領域とは別物)

「構造体 Tank のイテレート領域」
Tank.type
Tank.x
Tank.y

BkkSprite getIndVar n Tank.type

で Tank のメンバー type を変数 n に読み込む
Tank.type はイテレート領域のポインタ変数名

BkkSprite setIndVar Tank.type n

は、逆に変数 n の値をメンバー Tank.type に書き出す

要するに、スタック上のデータ配列に対して
メンバー名でアクセスする為の仕組み

モトローラの680x0系アセンブラが分かる人なら
「ディスプレースメント付きアドレスレジスタ間接アドレッシングモード」
見たいなものと言えば伝わるだろう

ツクール2003では、コモンイベントのコマンドで実装してたけど
MVは「変数番号の変数」が使え無いのでプラグインにした
798: 60 某犬犬 ◆HzfAAjcl8nz1 2020/11/06(金)04:44 ID:R9EDHC1C(1) AAS
被弾時の爆発が何処かを弄ってる内に描画できなくなったけど
MVの変数は設定した上限を超えるとアクセス出来ない様だ
2003ではおkだけど、多分変数番号の変数で扱える為なのだろう
見た感じコードには何処にも間違いが無さげで数日ハマった
799: 60 某犬犬 ◆HzfAAjcl8nz1 2020/11/11(水)13:37 ID:0pHfwJIV(1/3) AAS
爆発はテクスチャ・アニメの種類毎に
「けむり」「閃光」「炎」に別けて画像をロードする
構造体の配列は共有してるので
描画する時は種類を見て別々に処理する

「けむり」のアニメをゆっくり目に描画しながら
始めに「閃光」を一度だけ生成して
一定フレーム毎に「炎」も生成する

「けむり」のアニメが終わったら
マップや戦車を再生成して次の対戦に遷移する
800: 60 某犬犬 ◆HzfAAjcl8nz1 2020/11/11(水)13:44 ID:0pHfwJIV(2/3) AAS
砲弾のチャージ・ゲージは、飾りの付いた外枠と
上下にグラデーションが掛かったゲージを組み合わせる
ゲージをチャージ率に応じて横方向に縮小表示する
801: 60 某犬犬 ◆HzfAAjcl8nz1 [age] 2020/11/11(水)13:56 ID:0pHfwJIV(3/3) AAS
対戦開始時の「Ready」表示中は
射撃禁止/移動おkで、間合いを取れる
「GO!」で射撃禁止フラグをOffにする

爆発中は射撃と移動の両方を禁止にする
802: 60 某犬犬 ◆HzfAAjcl8nz1 2020/11/13(金)16:00 ID:Ne4OzMjC(1/2) AAS
砲弾四種

「スタンダード」単発、高速、早チャージ
 通常弾

「バースト」二連発、高速、遅チャージ
 通常弾を発射後、チャージ率x90%で最発射

「スプレッド」三分裂、低速、遅チャージ
 発射後カウンタが0になったら
 通常弾二つ生成とそれ自身を通常弾に変える

「サイト」着弾地点表示、フェイント
 発射後、予想地点にレティクル描画
 左右の移動で速度微調整
803: 60 某犬犬 ◆HzfAAjcl8nz1 [age] 2020/11/13(金)16:18 ID:Ne4OzMjC(2/2) AAS
マップ選択と障害物の生成をやった

キャラ名を[x][ ]か(x)( )に変更して
メニューから「\N[1]」で表示して
チェックボックスとラジオボタンにした
マップの選択はチェックボックスで選んだ中から
ランダムに選ばれる

マップの種類に応じて、障害物を描画
効果はまだ未実装
804: 60 某犬犬 ◆HzfAAjcl8nz1 2020/11/14(土)08:40 ID:HwzKAcsU(1) AAS
マップと障害物の三種を実装した
「草原」「林」視覚的に隠れられる
「岩地」「岩」水平方向の弾除け
「砂漠」「流砂」移動速度を半減
805: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/10(水)15:48 ID:YnlIq0em(1/5) AAS
「草原」の「林」だけ戦車より手前に描画した
スプライトのZ座標を使って実装しようとしたが
ツクールのプライオリティ処理が
機能していないっぽいので
別のスプライトを手前に確保して回避した
806: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/10(水)16:41 ID:YnlIq0em(2/5) AAS
AIを実装し始めた
・AI
 ・行動トリガー
 ・行動
 ・学習トリガー

・弾避け
 ・敵が射撃
 ・左、中、右に移動
 ・敵の着弾

・射線外し
 ・ランダム
 ・左、中、右の山の裏へ移動
 ・敵の着弾

・ランダム移動
 ・ランダム
 ・左、中、右に移動
 ・敵の着弾
807: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/10(水)16:42 ID:YnlIq0em(3/5) AAS
・チャージ
 ・AIがチャージ開始
 ・敵の左、中、右を狙う
 ・AIの着弾

・発射
 ・敵が射線上に入る
 ・発射
 ・無し

・山越え
 ・AIの着弾
 ・砲身を上下
 ・無し

「行動トリガー」で行動が発生して
「学習データ」を元に「行動データ」を設定する
「行動データ」によって毎フレームの行動を決める

「学習トリガー」で学習が発生して
「学習データ」を調整する
808: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/10(水)17:00 ID:YnlIq0em(4/5) AAS
学習の例として「弾避け」の場合

・敵が射撃したら
左、中(移動無し)、右の比率に応じて
乱数で移動先を決める

・敵の着弾で当たらなければ
選んだ行動の比率を+2して
それ以外の比率を-1する

・当たった場合は
選んだ行動を-20して
それ以外を+10する
809: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/10(水)17:10 ID:YnlIq0em(5/5) AAS
・正しい選択をしたっぽいなら
微妙に正の強化学習をして
・間違っていたなら
ペナルティとして多めに
負の強化学習をする

ゲームを繰り返すにつれて
どんどん強くなって行く(と良いなー)
リセットするか終了すると初期化
810: 2021/02/11(木)04:47 ID:BxaEkDQn(1) AAS
音も自分でやってる?
音やろうと思ってもちょっと無理かなあって思ってる
811: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/11(木)18:58 ID:0LtU3bBr(1) AAS
SE はデフォ素材のを再生速度変えたりして使ってる
BGM はフリー素材
作曲は時々やりたい病になるけど、出来無い
812: 2021/02/12(金)22:53 ID:1LHSZjPr(1) AAS
再生速度、変えるってのがあるのか

商用にする場合、フリーでも著作権問題になる場合あったかも
813: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/17(水)18:06 ID:PoSk5NNh(1/2) AAS
チャージ、発射、山越えを仮実装した

・常にチャージし続けて、弾道計算が当たりなら発射
・目標に当たらなければ、砲身角度を上げて
 ロフテッド軌道で山越えを狙う
・当たるかランダムで角度を多めに下げる
814: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/17(水)18:13 ID:PoSk5NNh(2/2) AAS
弾避けを仮実装した

・敵弾が発射されたら
 左、中(その場)、右のステップ座標を指定する
・移動処理で指定座標へ向けて移動する
815: 60 某犬犬 ◆HzfAAjcl8nz1 2021/02/21(日)15:39 ID:/QexS5oq(1) AAS
AIが敵の方向を向く様にした

移動の指示が無い時か、画面端にいる時に
前方に敵が居なければ、振り向く様に
移動先を一歩後ろへと指示する
816: 60 某犬犬 ◆HzfAAjcl8nz1 2021/03/13(土)16:46 ID:nG7hvE7Y(1) AAS
ランダム移動を実装した

乱数 % ランダム・フレーム数
が 0 ならランダムにステップ移動
移動距離は弾避けの値を流用

学習は、敵の弾が外れる度に
ランダム・フレーム数 += 1
当たったら
ランダム・フレーム数 -= 10
817: 60 某犬犬 ◆HzfAAjcl8nz1 2021/03/21(日)14:05 ID:IeCjnlr6(1/2) AAS
「射線外し」を実装した
敵から見て、山頂の1ブロック向こう側は
ロフテッド軌道でないと当て憎いので
そこに隠れる様に移動する

乱数 % フレーム数
が 0 なら隣の山陰まで移動

学習は、敵の弾が外れる度に
 移動先 += 2%
 移動先以外 -= 1%
 フレーム数 += 1
当たったら
 移動先 -= 20%
 移動先以外 += 10%
 フレーム数 -= 10
818: 60 某犬犬 ◆HzfAAjcl8nz1 2021/03/21(日)15:35 ID:IeCjnlr6(2/2) AAS
CPU 同士で対戦させてみた
強い順に
1.ノーマル
2.バースト
3.スプレッド
4.サイト

サイトは AI にフェイントは逆効果
スプレッドは溜めと弾速遅すぎ
バーストは溜め遅い割に奮闘
ノーマルは普通が一番強いっぽい

負けると、チョコマカ動く様になるし
動き過ぎると、狙える弾数が減って
更に負ける傾向が有る
819: 2021/05/10(月)17:27 ID:019Yj2Ms(1) AAS
出来た
820: 60 某犬犬 ◆HzfAAjcl8nz1 2021/05/20(木)18:17 ID:fb4MItLz(1) AAS
プレイヤー2をテンキーで動かせる様にした
スクリプトでテンキーのキーの名前を
変えて初期化した

Input.keyMapper[98] = 'down_numpad'

デフォだとカーソルとテンキーに
同じ名前が付けられてるので
語尾に '_numpad' を加えた

内部的には4人同時プレイ出来る様に
作ってあるので、2番目のCPU以外の
プレイヤーに割り当ててる
1-
あと 182 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.052s