ゲーム作ってます4.5
投稿者:
taki
投稿日:2016/10/23 01:33
絶賛寄り道中
(試作1号完成)
ツイート
(試作1号完成)
#_/_/_/_/_/通常攻撃の場合のダメージ計算_/_/_/_/_/
def attack(a)
case getVariable("プレイヤーかどうか")
when 0
ii=1
when 1
ii=0
end
h_old=getVariable("ステータス")[ii][a][1]
getVariable("ステータス")[ii][a][1]=getVariable("ステータス")[ii][a][1]-floor(getVariable("行動キャラ")[2]*0.5)
if getVariable("ステータス")[ii][a][1]<0
getVariable("ステータス")[ii][a][1]=0
end
speak(getVariable("ステータス")[ii][a][0],"に",h_old-getVariable("ステータス")[ii][a][1],"のダメージ")
if getVariable("ステータス")[ii][a][1]==0
getVariable("ステータス")[ii][a][5]=1
speak(getVariable("ステータス")[ii][a][0],"はたおれた")
end
return
end
#_/_/_/_/_/通常攻撃の場合のダメージ計算ここまで_/_/_/_/_/
#_/_/_/_/_/回復の関数_/_/_/_/_/
def heal(a)
case getVariable("プレイヤーかどうか")
when 0
ii=0
when 1
ii=1
end
h_old=getVariable("ステータス")[ii][a][1]
getVariable("ステータス")[ii][a][1]=getVariable("ステータス")[ii][a][1]+20
if getVariable("ステータス")[ii][a][1]>getVariable("ステータス")[ii][a][2]
getVariable("ステータス")[ii][a][1]=getVariable("ステータス")[ii][a][2]
end
speak(getVariable("ステータス")[ii][a][0],"は",getVariable("ステータス")[ii][a][1]-h_old,"回復した")
return
end
#_/_/_/_/_/回復の関数ここまで_/_/_/_/_/
#_/_/_/_/_/RPGの戦闘を行う自作関数_/_/_/_/_/
# 1ターンに1回ずつ各キャラに順番が回ってくるタイプの
# 戦闘になっているはず
def battle()
#=====パーティや敵キャラのデータをコピーする配列の準備======
# 敵キャラなどデータを事前に作っておいて配列変数に読み込んで使用する
# 今回はサボってますが
setVariable("ステータス",createArray())
i=0
while i<2
getVariable("ステータス")[i]=createArray()
j=0
while j<2
getVariable("ステータス")[i][j]=createArray()
j=j+1
end
i=i+1
end
#=====配列の準備をする部分ここまで======
#=====配列にデータを入れていく部分======
# ちなみに配列の中身はこんな感じ
# a[A][B][C]
# A. 味方パーティか敵かを判断する部分
# 0→味方、1→敵 今回はこのように決めた
# B. パーティ内の誰かを表すための数字
# とりあえず今回は0→プレイヤーキャラ、1→助っ人
# C. キャラのステータスと状態を表す数字
# 0:名前
# 1:HP
# 2:HPの最大値
# 3:攻撃力
# 4:素早さ
# 5:行動可能かどうか
getVariable("ステータス")[0][0][0]=getValueFromCharacterParam(getPlayerParam(), 2)
getVariable("ステータス")[0][0][1]=getValueFromCharacterParam(getPlayerParam(), 6)
getVariable("ステータス")[0][0][2]=getValueFromCharacterParam(getPlayerParam(), 5)
getVariable("ステータス")[0][0][3]=getValueFromCharacterParam(getPlayerParam(), 9)
getVariable("ステータス")[0][0][4]=getValueFromCharacterParam(getPlayerParam(), 13)
getVariable("ステータス")[0][0][5]=0
getVariable("ステータス")[0][1][0]="助っ人"
getVariable("ステータス")[0][1][1]=50
getVariable("ステータス")[0][1][2]=50
getVariable("ステータス")[0][1][3]=10
getVariable("ステータス")[0][1][4]=1
getVariable("ステータス")[0][1][5]=0
getVariable("ステータス")[1][0][0]="スライムA"
getVariable("ステータス")[1][0][1]=floor(getValueFromCharacterParam(getPlayerParam(), 6)*0.7)
getVariable("ステータス")[1][0][2]=floor(getValueFromCharacterParam(getPlayerParam(), 5)*0.7)
getVariable("ステータス")[1][0][3]=floor(getValueFromCharacterParam(getPlayerParam(), 9)*0.5)
getVariable("ステータス")[1][0][4]=floor(getValueFromCharacterParam(getPlayerParam(), 13)*0.9)+1
getVariable("ステータス")[1][0][5]=0
getVariable("ステータス")[1][1][0]="スライムB"
getVariable("ステータス")[1][1][1]=floor(getValueFromCharacterParam(getPlayerParam(), 6)*0.7)
getVariable("ステータス")[1][1][2]=floor(getValueFromCharacterParam(getPlayerParam(), 5)*0.7)
getVariable("ステータス")[1][1][3]=floor(getValueFromCharacterParam(getPlayerParam(), 9)*0.7)
getVariable("ステータス")[1][1][4]=floor(getValueFromCharacterParam(getPlayerParam(), 13)*0.5)+1
getVariable("ステータス")[1][1][5]=0
#=====配列にデータを入れていく部分ここまで======
#=====ターンが回ってきたキャラのステータスをコピーする配列の作成=====
setVariable("行動キャラ",createArray())
#=====戦闘が続いているか終了するかを判定するフラグの設定=====
setFlag("戦闘継続",true)
#XXXXX戦闘のループここからXXXXX
# フラグ"戦闘継続"がtrueの間ループが続く
while getFlag("戦闘継続")
#=====味方パーティを表す配列の中身を素早さ順にならべかえる部分======
setFlag("交換の有無",true)
a=createArray()
while getFlag("交換の有無")
i=0
setFlag("交換の有無",false)
while i<getArrayLength(getVariable("ステータス")[0])-1
if getVariable("ステータス")[0][i][4]<getVariable("ステータス")[0][i+1][4]
j=0
while j<getArrayLength(getVariable("ステータス")[0][i])
a[j]=getVariable("ステータス")[0][i][j]
getVariable("ステータス")[0][i][j]=getVariable("ステータス")[0][i+1][j]
getVariable("ステータス")[0][i+1][j]=a[j]
j=j+1
end
setFlag("交換の有無",true)
end
i=i+1
end
end
#=====味方パーティを表す配列の中身を素早さ順にならべかえる部分ここまで======
#=====敵を表す配列の中身を素早さ順にならべかえる部分======
# と言いつつやっていることは味方と同じなので
# 一つのループにまとめた方が良いかも
setFlag("交換の有無",true)
a=createArray()
while getFlag("交換の有無")
i=0
setFlag("交換の有無",false)
while i<getArrayLength(getVariable("ステータス")[1])-1
if getVariable("ステータス")[1][i][4]<getVariable("ステータス")[1][i+1][4]
j=0
while j<getArrayLength(getVariable("ステータス")[1][i])
a[j]=getVariable("ステータス")[1][i][j]
getVariable("ステータス")[1][i][j]=getVariable("ステータス")[1][i+1][j]
getVariable("ステータス")[1][i+1][j]=a[j]
j=j+1
end
setFlag("交換の有無",true)
end
i=i+1
end
end
#=====敵を表す配列の中身を素早さ順にならべかえる部分ここまで======
#=====味方パーティでどのキャラにターンが回ってきたかを決める部分======
# pp_activeはキャラのステータスを一時的に記憶するための配列
# 後で敵と比較して素早さの高い方にターンが回るようにする
pp_active=createArray()
i=0
while i<getArrayLength(getVariable("ステータス")[0])
# 素早さの高いキャラから順番に行動可能かどうかを調べる
# 行動可能なキャラがいた時点でpp_activeにステータスをコピーして
# ループから抜け出す
if getVariable("ステータス")[0][i][5]==0
j=0
while j<getArrayLength(getVariable("ステータス")[0][i])
pp_active[j]=getVariable("ステータス")[0][i][j]
j=j+1
end
nacp=i
i=getArrayLength(getVariable("ステータス")[0])
end
i=i+1
# もしもパーティの中に行動可能なキャラが残っていなかった場合に
# ターンが終了しているかの判定に関するフラグを立てる
if i==getArrayLength(getVariable("ステータス")[0])
setFlag("ターン終了1",true)
j=0
while j<getArrayLength(getVariable("ステータス")[0][i-1])
pp_active[j]=0
j=j+1
end
end
end
#=====味方パーティでどのキャラにターンが回ってきたかを決める部分ここまで======
#=====敵パーティでどのキャラにターンが回ってきたかを決める部分======
# と言いつつやっていることは味方と同じなので
# 一つのループにまとめた方が良いかも
ep_active=createArray()
i=0
while i<getArrayLength(getVariable("ステータス")[1])
if getVariable("ステータス")[1][i][5]==0
j=0
while j<getArrayLength(getVariable("ステータス")[1][i])
ep_active[j]=getVariable("ステータス")[1][i][j]
j=j+1
end
nace=i
i=getArrayLength(getVariable("ステータス")[1])
end
i=i+1
if i==getArrayLength(getVariable("ステータス")[1])
setFlag("ターン終了2",true)
j=0
while j<getArrayLength(getVariable("ステータス")[1][i-1])
ep_active[j]=0
j=j+1
end
end
end
#=====敵パーティでどのキャラにターンが回ってきたかを決める部分ここまで======
#=====敵と味方で素早さを比較する部分======
# 素早さが同じ場合にはプレイヤー側のキャラを優先する
# 同時に行動するのがプレイヤー側かNPCかを判断するための
# 変数の設定も行っている
if ep_active[4]>pp_active[4]
i=0
while i<getArrayLength(ep_active)
getVariable("行動キャラ")[i]=ep_active[i]
i=i+1
end
setVariable("プレイヤーかどうか",1)
else
i=0
while i<getArrayLength(pp_active)
getVariable("行動キャラ")[i]=pp_active[i]
i=i+1
end
setVariable("プレイヤーかどうか",0)
end
#=====敵と味方で素早さを比較する部分ここまで======
#=====行動可能かどうかに関する変数をリセットする部分======
# 敵と味方のどちらにも行動可能なキャラがいない場合には
# ここで行動可能かどうかの変数をリセットする
# 行動可能なキャラがいる場合には行動を選択するための
# ルーチンを実行する
if getFlag("ターン終了1")&&getFlag("ターン終了2")
i=0
while i<2
j=0
while j<getArrayLength(getVariable("ステータス")[i])
# HPが0より大きければ行動可能に戻す
# HPが0以下の場合には行動不能のままにしておく
if getVariable("ステータス")[i][j][1]>0
getVariable("ステータス")[i][j][5]=0
end
j=j+1
end
i=i+1
end
setFlag("ターン終了1",false)
setFlag("ターン終了2",false)
else
#******ここからキャラクタの行動を決める部分になる******
if getVariable("プレイヤーかどうか")==0
# プレイヤーにターンが回った場合
#=====攻撃対象の配列を作る部分=====
# 敵単体に攻撃する場合に選択肢を示すため
# HPが0でないキャラの名前をリストにする
a=createArray()
aa=createArray()
i=0
ii=0
while i<getArrayLength(getVariable("ステータス")[1])
if getVariable("ステータス")[1][i][1]!=0
a[ii]=getVariable("ステータス")[1][i][0]
aa[ii]=i
ii=ii+1
end
i=i+1
end
#=====攻撃対象の配列を作る部分ここまで=====
#=====回復対象の配列を作る部分=====
# 味方単体を回復する場合に選択肢を示すため
# HPが0でないキャラの名前をリストにする
b=createArray()
bb=createArray ()
i=0
ii=0
while i<getArrayLength(getVariable("ステータス")[0])
if getVariable("ステータス")[0][i][1]!=0
b[ii]=getVariable("ステータス")[0][i][0]
bb[ii]=i
ii=ii+1
end
i=i+1
end
#=====回復対象の配列を作る部分ここまで=====
#=====プレイヤーに選択肢を示す部分=====
s=getVariable("行動キャラ")[0]+"のターン"
case speakWithSelect(4,"攻撃","全体攻撃","回復","全体回復",s)
when 0
case speakWithSelectArray(a,"どの敵を攻撃しますか?")
when 0
ii=0
else
ii=1
end
attack(aa[ii])
when 1
ii=0
while ii<getArrayLength(a)
attack(aa[ii])
ii=ii+1
end
when 2
case speakWithSelectArray(b,"誰を回復しますか?")
when 0
ii=0
else
ii=1
end
heal(bb[ii])
when 3
ii=0
while ii<getArrayLength(b)
heal(bb[ii])
ii=ii+1
end
end
getVariable("ステータス")[0][nacp][5]=1
else
# NPCにターンが回った場合
#=====攻撃対象の配列を作る部分=====
# 敵単体に攻撃する場合に選択肢を示すため
# HPが0でないキャラの名前をリストにする
a=createArray()
aa=createArray()
i=0
ii=0
while i<getArrayLength(getVariable("ステータス")[0])
if getVariable("ステータス")[0][i][1]!=0
aa[ii]=i
ii=ii+1
end
i=i+1
end
#=====攻撃対象の配列を作る部分ここまで=====
#=====ランダムにキャラを選んで攻撃=====
case rand(getArrayLength(aa))
when 0
ii=0
else
ii=1
end
s=getVariable("行動キャラ")[0]+"の攻撃"
speak(s)
attack(aa[ii])
getVariable("ステータス")[1][nace][5]=1
end
end
#=====戦闘が終了していないか判定する部分======
# プレイヤーとNPCのパーティでそれぞれHPの合計を調べ
# どちらか片方でも0だった場合にフラグ"戦闘継続"をfalseにする
# 互いに全滅していた場合にはプレイヤーの負けとして扱う
# 変数"結果"が0ならばプレイヤーの勝利1ならば負け
sum_hp_e=0
i=0
while i<getArrayLength(getVariable("ステータス")[1])
sum_hp_e=sum_hp_e+getVariable("ステータス")[1][i][1]
i=i+1
end
if sum_hp_e==0
setFlag("戦闘継続",false)
setVariable("結果",0)
end
sum_hp_p=0
i=0
while i<getArrayLength(getVariable("ステータス")[0])
sum_hp_p=sum_hp_p+getVariable("ステータス")[0][i][1]
i=i+1
end
if sum_hp_p==0
setFlag("戦闘継続",false)
setVariable("結果",1)
end
end
#XXXXX戦闘のループここまでXXXXX
end
#_/_/_/_/_/RPGの戦闘を行う自作関数ここまで_/_/_/_/_/
battle()
if getVariable("結果")==0
speak("victory")
end
コメントする
コメントするには、ログインする必要があります。
コメント一覧
うまくできたらtaki神社たちますね。
アイテム関係のデータ(装備・魔法含む)をRPGエディタのまま使う場合、
アイテムパラメータ配列の中身が必要になってくると思いますが、
配列の中身の検証を前にしてブログ記事を書きました。
多少の時短に役に立つこともあるかもしれません。
http://blog.rmake.jp/mosmoss/7607/
アイテム関係のデータ(装備・魔法含む)をRPGエディタのまま使う場合、
アイテムパラメータ配列の中身が必要になってくると思いますが、
配列の中身の検証を前にしてブログ記事を書きました。
多少の時短に役に立つこともあるかもしれません。
http://blog.rmake.jp/mosmoss/7607/
http://rmake.jp/games/26167/limited_play
ID:asdf
パスワード:asdf
スタート地点近くの木に話しかけてください