RPGエディタでwhile文を使う

投稿者:            mini mosmoss 投稿日:2017/07/16 13:14

このブログは、
「if文を使って、RPGエディタで一通り作れます
 入力補助で選択肢のcase文も出せるし…
 whileって必要?どういう時に使うの?」
という読者層向けの記事です

自在に使えるようになることを目指さず、
ふーんって感じと、コピペ&改変で使える感じを目指します

whileの基本的な説明・解説が載っているページ
スクリプト言語のマニュアル
スクリプト/つくってみよう0
スクリプト/はじめてのRmakeスクリプト / 第03回
スクリプト/はじめてのRmakeスクリプト / 第04回


whileでできること(RPGエディタ用)

1、やめるを選ぶまで繰り返す選択肢

要点
・入力補助でcase文の選択肢を作る
・選択肢の中に「やめる」を入れておく
・エディタに書かれたcase文をwhile文ではさみループさせる
・「やめる」を選んだときだけwhile文のループを脱出するようにしておく

#状況説明
#おいしそうに湯気を立てているスープの前にプレイヤーは立っている
#まず、スープを飲むか飲まないか選択し、飲んだ場合、HPが少し回復し、その後、おかわりかごちそうさまを選択する
#おかわりを選ぶ限りスープを飲み続け、ごちそうさまを選んだら選択肢がでないようにする


speak("トマトベースの豆とベーコンのスープが\nおいしそうに湯気を立てている")

case speakWithSelect(2,"飲む","飲まない", 
    "飲みますか?")
  when 0 #飲む を選んだ場合

    gochi=false #ごちそうさまを選んだときの条件に使う変数、falseを入れておく

    while !gochi #変数gochiがtrueになっていない=falseの間くりかえす
       speak("スープを飲んだ……")
       speak("\n「……うまい」")
       speak("\n「ベーコンとトマトのコクが\n 豆の素朴な味わいを引き立てている」")
       
       addPlayerHP(50)

       speak("体力が回復した")

         case speakWithSelect(2,"おかわり?","ごちそうさま?", 
    "")
           when 0 #おかわりを選んだ場合
              speak("\n「……何杯でもいける」")
    
           when 1 #ごちそうさまを選んだ場合
              speak("\n「……うまかった」")

              gochi = true #変数gochiをtrueにしてwhile !gochi ループを脱出
    
         end #case speakWithSelect(2,"おかわり?","ごちそうさま?",  "")

    end #while !gochi

   when 1 #飲まないを選んだ場合

       speak("\n「勝手に飲むのはやめておこう……」")
    
end #case speakWithSelect(2,"飲む","飲まない",  "飲みますか?")



2、沢山のイベントに一度に指示を出す

要点
・まとめて指示を出したいイベントに
「event1」「event2」「event3」…
「兵士1」「兵士2」「兵士3」…
など、文字+順番に並んだ半角数字、のイベント名をつけておく
(イベント名はエディタ左上のイベント名設定ボタンから変更できます)
・while文を使って、イベントの数字分一度に指示を出す


#状況説明
#「g1」~「g6」というイベント名の6つの透明イベントがある
#これをすべてキャラクタのイベントに変更して向きを左に向ける

#出現のグラフィック
i=1                                  #「g1」から「g6」を変更するので始めの数字1をiに代入
while i <7                        #「g6」が最後になるので6より一つ大きい7とする
e="g"+i                           #eはイベント名"g"に1~6をくっつける作業、できたイベント名はeに代入
setEventCharacter(e,35137 )  #eのイベントを数字のキャラクタIDに変更する
d=1                                #左を向ける場合1、正面は0、右は2、後ろは3
setEventDirection(e,d)   #eのイベントをdの向きに変更する
i=i+1                              #iを一つずつ増やしてwhileの最初からやり直す
end                                #while i <7




上の応用として、rand()関数をwhileの中で使うことで、
変更先のキャラクタや向きをランダムに指定できる

使用素材
兵士(寝)右向き
兵士(寝)左向き

#状況説明
#さっきまでピンピンしていた兵士たちが強敵の前に壊滅状態…という状況を作る
#「g1」〜「g14」というイベント名の14のキャラクタイベントを作る
#自然な感じを出すため、倒れる兵士の向きはランダムに設定したい
 
#倒れ兵士のグラフィック
i=1
while i <15
e="g"+i
r=rand(2)
r=33526+r   #左向きに倒れる兵士と右向きに倒れる兵士をランダムで設定する
setEventCharacter(e,r )
d=rand(4)    #さらに向きを4方向からランダムで決定する

setEventDirection(e,d)
i=i+1
end


上の二つはイベントが同時に変化するように見えます
コンピュータの処理速度が高速なためです
次の応用は、番号順に少しの時間差で、変化させるパターンです

#状況説明
#「j1」〜「j20」というイベント名の20のキャラクタイベントを
#少しの時間差で番号順にキャラクタ変更させる

i=1
while i < 21
event="j"+i
setEventCharacter(event,26650)   #26650は変化先のキャラクタID
i=i+1
waitTime(100) #この位置でwaitTime()関数で100ミリ秒を静止させる、数値を変えて時間差を調整、1000ミリ秒が1秒
end



特に3つ目の応用などは、
時間差を何秒にするか決めてなくて見ながら調整するといった場合、
while文を使わずに40行を使って書く場合と比べて修正の手間が大きく省けることがわかると思います。
このように、while文で書くと、修正や調整が簡単になり、管理しやすくなります。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

コメントはありません。