ゲーム作ってます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
スタート地点近くの木に話しかけてください