| 私はドラゴンライダーΦズです。
↓イベント全文ここから
@機動騎士団ナイトガンダム @妖霊烈伝デビルマイン
スタート: ChangeMap 戦闘フィールド.map StartBGM KnightGundamRPG_Field.mid CreateRPGCharacter 剣聖Z6 来栖川綾香 1 15 8 援護移動 100 100 CreateRPGCharacter 剣聖Z6 松原葵 1 1 2 援護移動 100 100 CreateRPGMonster 剣聖Z6 アンデッド(ザコ) 1 5 13 ランダム移動 50 50 Talk システム ナイトガンダムシステムのテストです。 End ForEach 味方 出撃 Switch Right(対象パイロット,4) Case "(ザコ)" "(汎用)" Skip Case Else 味方キャラ[対象パイロット] = 対象パイロット EndSw Next Ask 味方キャラ 誰を操作しますか? AutoMove 味方キャラ[選択] #Abs(Y() - Y(Args(1))) Exit
CreateRPGCharacter: If IsDefined(Args(2)) = 0 Then Create 味方 Args(1) 0 Args(2) Args(3) Args(4) Args(5) Else Launch Args(2) Args(4) Args(5) EndIf キャラクター[対象パイロット] = 対象パイロット キャラクター2[対象パイロット] = 対象ユニットID RPGキャラクター用行動パターン[対象パイロット] = Args(6) 攻撃行動率[対象パイロット] = Args(7) 反撃行動率[対象ユニットID] = Args(8) Return
CreateRPGMonster: Create 敵 Args(1) 0 Args(2) Args(3) Args(4) Args(5) キャラクター[対象パイロット] = 対象パイロット キャラクター2[対象パイロット] = 対象ユニットID RPGキャラクター用行動パターン[対象パイロット] = Args(6) 攻撃行動率[対象パイロット] = Args(7) 反撃行動率[対象ユニットID] = Args(8) Return
AutoMove: Do Wait Click If KeyState(32) = 1 Then Return ElseIf KeyState(37) = 1 Then If x(Args(1)) > 1 Then Move Args(1) (x(Args(1)) - 1) y(Args(1)) アニメ表示 Center Args(1) EndIf ElseIf KeyState(38) = 1 Then If Y(Args(1)) > 1 Then Move Args(1) X(Args(1)) (Y(Args(1)) - 1) アニメ表示 Center Args(1) EndIf ElseIf KeyState(39) = 1 Then If x(Args(1)) < Info(マップ,幅) Then Move Args(1) (x(Args(1)) + 1) y(Args(1)) アニメ表示 Center Args(1) EndIf ElseIf KeyState(40) = 1 Then If Y(Args(1)) < Info(マップ,高さ) Then Move Args(1) X(Args(1)) (Y(Args(1)) + 1) アニメ表示 Center Args(1) EndIf EndIf ForEach 行動対象のキャラクター In キャラクター If 行動対象のキャラクター = Args(1) Then Skip EndIf #↓CPUの攻撃用ルーチンここから #攻撃行動を起こす確率を決めるための乱数を設定 実際攻撃行動率[UnitID(行動対象のキャラクター)] = Random(100) #攻撃目標の探索 For 調査X座標 = 1 To Info(マップ,幅) For 調査Y座標 = 1 To Info(マップ,高さ) #操作キャラクターを弾き出した場合は処理を飛ばす。 If UnitID(行動対象のキャラクター) = Info(マップ,調査X座標,調査Y座標,ユニットID) Then Skip EndIf If Info(マップ,調査X座標,調査Y座標,ユニットID) <> "" Then #武器を調べて最大射程と最小射程を入れる。 For 武器番号 = 1 To Info(Unit(行動対象のキャラクター),武器数) 武器の最小射程[行動対象のキャラクター,Info(Unit(行動対象のキャラクター),武器,武器番号)] = Info(Unit(行動対象のキャラクター),武器,武器番号,最小射程) 武器の最大射程[行動対象のキャラクター,Info(Unit(行動対象のキャラクター),武器,武器番号)] = Info(Unit(行動対象のキャラクター),武器,武器番号,最大射程) For 射程範囲 = 武器の最小射程[行動対象のキャラクター,Info(Unit(行動対象のキャラクター),武器,武器番号)] To 武器の最大射程[行動対象のキャラクター,Info(Unit(行動対象のキャラクター),武器,武器番号)] #攻撃目標が武器の射程内にいるかどうか確認する。 If 射程範囲 = (Abs(X(UnitID(行動対象のキャラクター)) - X(Info(マップ,調査X座標,調査Y座標,ユニットID))) + Abs(Y(UnitID(行動対象のキャラクター)) - Y(Info(マップ,調査X座標,調査Y座標,ユニットID)))) And Party(行動対象のキャラクター) <> Party(Info(マップ,調査X座標,調査Y座標,ユニットID)) Then #反撃行動を起こす確率を決めるための乱数を設定 実際反撃行動率[Info(マップ,調査X座標,調査Y座標,ユニットID)] = Random(100) #実際の攻撃行動率と反撃行動率を調べて判定する If 実際攻撃行動率[UnitID(行動対象のキャラクター)] <= 攻撃行動率[行動対象のキャラクター] Then If 実際反撃行動率[Info(マップ,調査X座標,調査Y座標,ユニットID)] <= 反撃行動率[Info(マップ,調査X座標,調査Y座標,ユニットID)] Then Attack 行動対象のキャラクター Info(Unit(行動対象のキャラクター),武器,武器番号) Info(マップ,調査X座標,調査Y座標,ユニットID) 自動 Else Attack 行動対象のキャラクター Info(Unit(行動対象のキャラクター),武器,武器番号) Info(マップ,調査X座標,調査Y座標,ユニットID) 無抵抗 EndIf Else Call RPGキャラクター用行動パターン[行動対象のキャラクター] 行動対象のキャラクター Args(1) EndIf EndIf Next Next EndIf Next Next #↑CPUの攻撃用ルーチンここまで Next Loop While (0 = 0) Return
援護移動: If (X(Args(1)) - X(Args(2))) < 0 Then If (Y(Args(1)) - y(Args(2))) < 0 Then Switch Random(2) Case 1 Move Args(1) (x(Args(1)) + 1) y(Args(1)) アニメ表示 Case 2 Move Args(1) X(Args(1)) (Y(Args(1)) + 1) アニメ表示 EndSw ElseIf (y(Args(1)) - y(Args(2))) > 0 Then Switch Random(2) Case 1 Move Args(1) (x(Args(1)) + 1) y(Args(1)) アニメ表示 Case 2 Move Args(1) X(Args(1)) (Y(Args(1)) - 1) アニメ表示 EndSw Else Move Args(1) (x(Args(1)) + 1) y(Args(1)) アニメ表示 EndIf ElseIf (X(Args(1)) - X(Args(2))) > 0 Then If (y(Args(1)) - y(Args(2))) < 0 Then Switch Random(2) Case 1 Move Args(1) (x(Args(1)) - 1) y(Args(1)) アニメ表示 Case 2 Move Args(1) X(Args(1)) (Y(Args(1)) + 1) アニメ表示 EndSw ElseIf (y(Args(1)) - y(Args(2))) > 0 Then Switch Random(2) Case 1 Move Args(1) (x(Args(1)) - 1) y(Args(1)) アニメ表示 Case 2 Move Args(1) X(Args(1)) (Y(Args(1)) - 1) アニメ表示 EndSw Else Move Args(1) (x(Args(1)) - 1) y(Args(1)) アニメ表示 EndIf Else If (y(Args(1)) - y(Args(2))) < 0 Then Move Args(1) X(Args(1)) (Y(Args(1)) + 1) アニメ表示 ElseIf (y(Args(1)) - y(Args(2))) > 0 Then Move Args(1) X(Args(1)) (Y(Args(1)) - 1) アニメ表示 EndIf EndIf Return
ランダム移動: Switch Random(4) Case 1 Move Args(1) (x(Args(1)) - 1) y(Args(1)) アニメ表示 Case 2 Move Args(1) X(Args(1)) (Y(Args(1)) - 1) アニメ表示 Case 3 Move Args(1) (x(Args(1)) + 1) y(Args(1)) アニメ表示 Case 4 Move Args(1) X(Args(1)) (Y(Args(1)) + 1) アニメ表示 EndSw Return
↑イベント全文ここまで
このイベント文は登場させたキャラクターをRPGのように扱うためのものです。 移動はうまくいきましたが、CPUの攻撃用ルーチンを導入したところ、 処理が非常に遅くなってしまいました。
CPUの攻撃用ルーチンを変更して処理速度を早くしようと思うのですが、 私はこれ以外に思いつきません。 いい案はないでしょうか。
このイベントに使用しているユニット「剣聖Z6」には射程が重なる武器はありません。 処理は全てそれを前提に作っています。
|