話しかける回数で、イベントを変えるスクリプトに関する質問(質問掲示板

投稿: User icon mini 退会したユーザー 投稿:2011/12/03 20:47:03(最新:2011/12/04 20:03:04)
if !getFlag("初期化したかどうか")
setFlag("初期化したかどうか", true)
setVariable("話しかけた回数", 0)

setVariable("話しかけた回数",
getVariable("話しかけた回数") + 1)

if getVariable("話しかけた回数") == 1
speak("兵士「一戦目は、『部長ズ』です。」")
speak("山口部長「**先生に言っておくから」")
stopBGM()
playBGM(38728)
startTurnBattle(13283, 13283, 13280, 13280)
stopBGM()
playBGM(83)


if getVariable("話しかけた回数") == 2
speak("兵士「二戦目は、『大沼カップル』です。」")
speak("大沼「ストーカーサイコ―!!!」")
stopBGM()
playBGM(38728)
startTurnBattle(13281, 13282)
stopBGM()
playBGM(83)


if getVariable("話しかけた回数") == 3


if getVariable("話しかけた回数") == 4



if getVariable("話しかけた回数") == 5







end
end
end
end
end
end


という風に、掲示板を見てつくってみたのですが、二回目に話しかけても、バトルが始まりませんでした。

もう自分の力では、これ以上無理なのですが、どうすればいいですか?

※ ここで出ている名前は、こういうキャラでゲームを作っていますが、名前はてきとうです。

よろしくおねがいします。

コメントする

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

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/04 20:03, 履歴)
gc72さま>

分からないところについて
質問してみることも大切ですが、

まずは、自分で理解できるところまで
しっかりと調べてみて、
理解できた通りかどうか
簡単なスクリプトを書いて
テストしてみましょう。


もし、よろしければ
こちらにもスクリプトの基本部分について
掲載しておりますので、
ご一読いただけましたら幸いです。

Rmakeで自由なゲームをつくろう / 第01回 スクリプトって何?
User icon mini 退会したユーザー(投稿日:2011/12/04 19:20, 履歴)
ありがとうございます。

>超基本です。

基本もできていないのか…
すごいですね、言い方が悪いかもしれませんが
aoihikawaさんの言いますように回答を書いていただきました。
「こいつ、回答を書かないとわからないかな」なんて思わせてしまったんでしょうか。情けないですorz

aoihikawaさま、rurun9さま
ありがとうございました。
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/04 18:16, 履歴)
rurun9さま>

回答例を書いてしまいましたか(w
優しい(w
Nyan mini rurun9(投稿日:2011/12/04 18:10, 履歴)
>何もなりませんでした

そりゃー何もならんでしょうな(2度目
一度指摘された部分を直してすらいないのだから、思い通りに動く筈がないでしょう?

>Rmake記法
>調べましたが

嘘はいけません。
リンク先を全部読むだけで「pre 表記の書き方」がちゃんとあります
単に書いてある事を読んですらいないのは、調べた、とは言いません


さて。
話しかけた回数で分岐するイベントスクリプトをつくるんですよね。
最初に考えるのは、回数を数えるための変数を用意する事
if !getVariable("回数")
 #変数に中身が無い場合は0を入れる
 setVariable("回数",0)
end
#話しかけたので回数を1増やす
setVariable("回数",getVariable("回数")+1)

speak("今 ",getVariable("回数")," 回目だよ")
#続く
これで話しかけた回数を数えられるようになりました

次に、回数により分岐する処理をつくります
#続き
if getVariable("回数")==1

elsif getVariable("回数")==2

elsif getVariable("回数")==3

elsif getVariable("回数")==4

elsif getVariable("回数")==5

else
 setVariable("回数",0)
 speak("回数をリセットしたよ")
end
超基本です。ワカリマセンじゃなく理解してないだけです。やる気あるのか疑われるくらいの初歩です
こうした根本的な書き方に関しての説明が、最初にリンクを貼った「スクリプト言語のマニュアル」あたりに書いてあるんですよ
知りたい事だけが直接書かれているワケではないけれど、少しずつ覚えていかないと更に複雑なゲームを作る事が全くできなくなっちゃいますよー
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/04 18:10, 履歴)
コピペでは思ったように動くとは限りません。
「なぜ、動かないのか」を解説しているだけですから。

仕組みを理解して
「どう、動かしたいか」にあわせて
自分で考えて改良していく必要があります。


まず、最初のポイント「初期化する」
そして、「回数によってスクリプトを分岐させる」
さらに、そのそれぞれの「スクリプトの中で何を実行する」
というように、手順に沿って作ってみてください。
User icon mini 退会したユーザー(投稿日:2011/12/04 17:45, 履歴)
aoihikawaさんありがとうございます
コピペさせていただきました
テストプレーをすると、話しかけても何もなりませんでした。
もう一度、どうすればいいか、教えてください。
よろしくお願いします。
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/04 14:47, 履歴)
if、elsifの後に入る条件式が
実行条件です。

スクリプトを整形しなおしてみると
getVariable("話しかけた回数") が「1」のときに
実行するスクリプトがないことがわかります。

修正前
if !getFlag("初期化したかどうか") 
  setFlag("初期化したかどうか", true) 
  setVariable("話しかけた回数", 0) 
  setFlag("初期化したかどうか", false) 

  setVariable("話しかけた回数",0) 
  setVariable("話しかけた回数",getVariable("話しかけた回数")+1) 




  getVariable("話しかけた回数") == 1 
  speak("兵士「一戦目は、『部長ズ』です。」") 
  speak("山口部長「**先生に言っておくから」") 
  stopBGM() 
  playBGM(38728) 
  startTurnBattle(13283, 13283, 13280, 13280) 
  stopBGM() 
  playBGM(83) 

elsif getVariable("話しかけた回数") == 2 
  speak("兵士「二戦目は、『大沼カップル』です。」") 
  speak("大沼「ストーカーサイコ―!!!」") 
  stopBGM() 
  playBGM(38728) 
  startTurnBattle(13281, 13282) 
  stopBGM() 
  playBGM(83) 

elsif getVariable("話しかけた回数") == 3 

elsif getVariable("話しかけた回数") == 4 

elsif getVariable("話しかけた回数") == 5 



end 



修正後
if !getFlag("初期化したかどうか") 
  setFlag("初期化したかどうか", true) 
  setVariable("話しかけた回数", 0) 
  setFlag("初期化したかどうか", false) 

  setVariable("話しかけた回数",0) 
  setVariable("話しかけた回数",getVariable("話しかけた回数")+1) 




elsif getVariable("話しかけた回数") == 1 #elsif文がなかった 
  speak("兵士「一戦目は、『部長ズ』です。」") 
  speak("山口部長「**先生に言っておくから」") 
  stopBGM() 
  playBGM(38728) 
  startTurnBattle(13283, 13283, 13280, 13280) 
  stopBGM() 
  playBGM(83) 

elsif getVariable("話しかけた回数") == 2 
  speak("兵士「二戦目は、『大沼カップル』です。」") 
  speak("大沼「ストーカーサイコ―!!!」") 
  stopBGM() 
  playBGM(38728) 
  startTurnBattle(13281, 13282) 
  stopBGM() 
  playBGM(83) 

elsif getVariable("話しかけた回数") == 3 

elsif getVariable("話しかけた回数") == 4 

elsif getVariable("話しかけた回数") == 5 



end 

Cdv30200 aoi icon mini aoihikawa(投稿日:2011/12/04 14:39, 履歴)
{{{code
#スクリプト
a = 0
if a == 0
  b = 1
end
}}}


 ↓

#スクリプト
a = 0
if a == 0
  b = 1
end
User icon mini 退会したユーザー(投稿日:2011/12/04 14:10, 履歴)
書き込みありがとうございます。
下のように書き換えたのですが、今度は、一回目に話しかけた内容と変わりませんでした。


if !getFlag("初期化したかどうか")
setFlag("初期化したかどうか", true)
setVariable("話しかけた回数", 0)
setFlag("初期化したかどうか", false)

setVariable("話しかけた回数",0)
setVariable("話しかけた回数",getVariable("話しかけた回数")+1)




getVariable("話しかけた回数") == 1
speak("兵士「一戦目は、『部長ズ』です。」")
speak("山口部長「**先生に言っておくから」")
stopBGM()
playBGM(38728)
startTurnBattle(13283, 13283, 13280, 13280)
stopBGM()
playBGM(83)

elsif

getVariable("話しかけた回数") == 2
speak("兵士「二戦目は、『大沼カップル』です。」")
speak("大沼「ストーカーサイコ―!!!」")
stopBGM()
playBGM(38728)
startTurnBattle(13281, 13282)
stopBGM()
playBGM(83)

elsif


getVariable("話しかけた回数") == 3

elsif


getVariable("話しかけた回数") == 4

elsif

getVariable("話しかけた回数") == 5



end

どうすればいいですか?

>Rmake記法

調べましたが、どうすれば枠の中に入れるのかわかりません。
前に、何かで『囲む』と教えてもらった気がしますが、囲むとは、
文の上下左右に書くんですか?
そして、何を書けばいいんでしょうか?

よろしくお願いします。
Nyan mini rurun9(投稿日:2011/12/04 13:24, 履歴)
Rmake記法
を使って、スクリプト部分を枠の中に入れた方が見易いですよ


>何もならない

そりゃー何もならんでしょうな
話しかけた回数をカウントする位置、がif文の中にありますよね?
「初期化」==falseのときに「初期化」=trueにしてるので、ココを通過するのは1回ポッキリです
しかも
setVariable("回数",0)
setVariable("回数",getVariable("回数")+1)
続けて書いてるから常に「回数」は1のまま
つまり「回数」を数える事ができていないワケです

とりあえず紙に枝分かれする樹形図でも書いて考えてみてはどうでしょ?
User icon mini 退会したユーザー(投稿日:2011/12/04 12:06, 履歴)
書き込みありがとうございます。

二回目に話しかけても何もなりませんでした。(エラーは出ていません)
どうすればいいですか?


if !getFlag("初期化したかどうか")
setFlag("初期化したかどうか", true)
setVariable("話しかけた回数", 0)

setVariable("話しかけた回数",
getVariable("話しかけた回数") + 1)

getVariable("話しかけた回数") == 1
speak("兵士「一戦目は、『部長ズ』です。」")
speak("山口部長「**先生に言っておくから」")
stopBGM()
playBGM(38728)
startTurnBattle(13283, 13283, 13280, 13280)
stopBGM()
playBGM(83)

elsif

getVariable("話しかけた回数") == 2
speak("兵士「二戦目は、『大沼カップル』です。」")
speak("大沼「ストーカーサイコ―!!!」")
stopBGM()
playBGM(38728)
startTurnBattle(13281, 13282)
stopBGM()
playBGM(83)

elsif


getVariable("話しかけた回数") == 3

elsif


getVariable("話しかけた回数") == 4

elsif

getVariable("話しかけた回数") == 5



end
Nyan mini rurun9(投稿日:2011/12/04 02:10, 履歴)
if文はendで閉じないといけません。
endで閉じる前に次のifを書くと、それはネスト(入れ子)になります。
if getFlag(a)
  if getFlag(b)
    speak("ココを通過するのはaがtrueで、しかもbもtureだった場合")
  end #b終
  speak("こちらはaがtrueなら必ず通ります")
end #a終
なので「話しかけた回数」が1のときのif文の中に、回数が1以外のときの処理を入れても無駄になっちゃうんですね。

「話しかけた回数」によって分岐するのだから、if~elsif~endにするかもしくはcase~when~endで良いと思います。


参考
ヘルプ/スクリプト言語のマニュアル
スクリプト/つくってみよう0