while文1

投稿者:   mini rdjk5242 投稿日:2012/02/06 16:47

 speak("while文を使います。")
 speak("例として、お店の処理をします。")
 a=0

while a<1

case speakWithSelect(5,"刀","盾","槍","魔法","やっぱりやめる", 
    "なにをお求めでしょうか?")
  when 0
    speak("すみません、\n当店では取り扱っていないんです。")
  when 1
    speak("すみません、\n当店では取り扱っていないんです。")
  when 2
    speak("すみません、\n当店では取り扱っていないんです。")
  when 3
    speak("すみません、\n当店では取り扱っていないんです。")
  when 4
    a=a+1
end
end

 speak("このようにお店を作ることなどに使いやすいです。")
 speak("また、使用されているスクリプトを表示します。")

 speak("これで終わります。")
 goEnding()

コメントする

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

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/08 07:25, 履歴)
その通り、
今回はwhile文の条件として利用したため
trueでループON、falseでループOFFといった動作になります。


他にもif文の条件や
イベントの開始条件にも利用することが出来ます。

例:1度実行したら発生しなくなるイベント
有効条件:!(getFlag("Otakara01")) 「!()」で括るとtrueとfalseを反転する
speak("宝箱を開けた!")
setFlag("Otakara01", true)
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/08 07:10, 履歴)
カスタムメニューについてはRmakeの仕様で
メニューリストからカスタムパラメータを開く操作を行った時
ゲームシステム側がonShowCustomParameter()関数を
呼び出す仕組みになっているためです。
   mini rdjk5242(投稿日:2012/02/08 05:26, 履歴)
前に、メニューに現在のお金を表示することに挑戦したんですけど、
その時はまだ理解できなかったので、コピーするだけだったんですが
今日見直してみました。
setCustomParamMenuEnable(true) 
#カスタムメニューを表示可能にする
 setCustomParamMenuName("現在のGold") 
#カスタムメニューの名前設定
def onShowCustomParameter() 
#onShowCustomParameter()に以下のスクリプトを入れる 
  setCustomParamName(0, "お金") 
#カスタムメニューのインデックス0にお金の項目を入れる
  setCustomParamValue(0,getMoney() ) 
#お金の項目の内容を所持金にする。
end

でもこれってonShowCustomParameter() は呼ばないのに何で設定するんですか?
そして読んでないのにちゃんと作動するんでしょうか・・・
   mini rdjk5242(投稿日:2012/02/08 05:02, 履歴)
これって
loop = true

は、ループをONにする。
loop = false

は、ループをOFFにする。

ってことですよね。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/07 11:37, 履歴)
while文が「お店のスクリプトなどに便利」の意味が分かりました。

「やっぱりやめる」を選択するまで
お店のスクリプトを繰り返したかったわけですね。


こういった、続ける/続けないなどの2択の場合は
変数の値にtrue/falseを使用します。
loop = true 
while loop 
  case speakWithSelect(5,"刀","盾","槍","魔法","やっぱりやめる",  
    "なにをお求めでしょうか?") 
  when 0 
    speak("すみません、\n当店では取り扱っていないんです。") 
  when 1 
    speak("すみません、\n当店では取り扱っていないんです。") 
  when 2 
    speak("すみません、\n当店では取り扱っていないんです。") 
  when 3 
    speak("すみません、\n当店では取り扱っていないんです。") 
  when 4 
    loop = false
  end 
end
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/07 07:11, 履歴)
意味が分からない場合は
1行ずつ、それがどういった動作を行う処理になっているのか
順に辿るようにして考えてみましょう。

例として、上記側の動きを解説します。
setVariable("a",getPlayerPosX())   #"a"に現在のプレイヤーのX座標を取得して設定
speak("カメラが右方向に移動します")   #メッセージの表示
 
while getVariable("a") < getPlayerPosX()+128*11 #"a"が現在のプレイヤーのX座標+128*11になるまで繰り返し 
  moveCamera(true,getVariable("a") , getPlayerPosY()) #カメラの位置をX座標"a",Y座標現在のプレイヤーのY座標に移動 
  setVariable("a",getVariable("a")+0.1) #"a"に"a"+0.1を設定 
end #繰り替えしの始めに戻る
   mini rdjk5242(投稿日:2012/02/07 04:39, 履歴)
掲示板を見て、色々改良した版↓
 setVariable("a",getPlayerPosX())
 speak("カメラが右方向に移動します") 

while getVariable("a")<getPlayerPosX()+128*11
 moveCamera(true,getVariable("a") , getPlayerPosY())
 setVariable("a",getVariable("a")+0.1)
end


speak("カメラの位置を戻します") 
 setVariable("a",getPlayerPosX()+128*11)
while getVariable("a")>getPlayerPosX()
 moveCamera(true, getVariable("a"), getPlayerPosY())
 setVariable("a",getVariable("a")-0.8)
end
 moveCamera(false)

でもこれって意味がよくわからないんですけど・・・
   mini rdjk5242(投稿日:2012/02/07 02:54, 履歴)
これ考えてみたんですけど、

a=1
 b=1
 x=getPlayerPosX()+a
 y=getPlayerPosY()+b
 while a < 480  moveCamera(true,x,y) 

 a=a+15
 b=b+11
end


こんな感じでカメラってゆっくり動かせないですかね?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/06 17:48, 履歴)
例えば、先日の表示処理で
#変更前
setVariable("タイマー",createText(200, 1, 200, 200)) 
setText( getVariable("タイマー"), "あと"+(30-floor((getTime()/10)/100))+"秒") 
waitTime(1000) 
setText( getVariable("タイマー"), "あと"+(30-floor((getTime()/10)/100))+"秒") 
waitTime(1000) 
setText( getVariable("タイマー"), "あと"+(30-floor((getTime()/10)/100))+"秒") 
・ 
・ 
・

#変更後
setVariable("タイマー",createText(200, 1, 200, 200))

i = 0
while i < 10
  #この中をiが10未満の間繰り返す 
  setText( getVariable("タイマー"), "あと"+(30-floor((getTime()/10)/100))+"秒") 
  waitTime(1000)
  i = i + 1 #iをカウント
end

というようにスマートに纏めることができます。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/02/06 17:41, 履歴)
speakWithSelect関数と
while文は別です。

speakWithSelect関数は確かに
お店のスクリプトなどに便利ですが

while文は
繰り返し同様の処理を行ったり
配列の操作を行ったりする時に
便利な文です。