偶然?(質問掲示板

投稿: User icon mini 退会したユーザー 投稿:2011/07/29 11:19:29(最新:2011/07/30 20:18:30)
case rand(10)
  when 0
    speak("おや?敵がアイテムを落としていった。")
    giveItem(7431)
    speak("濃縮回復薬を手に入れた!")
  when 1
    speak("おや?敵がアイテムを落としていった。")
    giveItem(7432)
    speak("濃縮魔法薬を手に入れた!")
end

敵を倒すと10分の2(約分して5分の1)でアイテムを落とすようにしたのですが、
何故か毎回アイテムを落とすんです。(5回ぐらい連続です。)
これってcase文の使い方間違ってますか?

コメントする

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

コメント一覧

Michael mini ミカエル(投稿日:2011/07/30 20:18, 履歴)
>>tdakeikakuさん
おお!スマートでかっこいい^^
これなら見やすくて作りやすそうです。
ありがたく使わせていただきます。
   mini ___(投稿日:2011/07/30 13:38, 履歴)
>>takumi2310さん
偶然だと思いますよー。
確率っつっても所詮確率なので、
試行回数が少ない場合はどうしても偏ってしまうかと。

10000回ループで、どちらも大体10%くらいになりますよ。

>>ミカエルさん
else文は必要なければ取り除いてしまってもいいんですよっと。
やりたいこととは変わってしまうかもしれませんけど、
共通部分を関数化するとなんか格好良く見える気がします。
def F_func(drop , name)
 i = rand(drop) 
 if(i == 0) 
  setEventCharacter("カード" , 9697) 
  setFlag(name , true) 
  return true
 else
  return false
 end 
end

setFlag("ドロップ", F_func(180 , "ミカエルカード"))
setFlag("ドロップ", F_func(30 , "リリスカード"))
setFlagまで中に突っ込んでいい気もしますけどね。
Michael mini ミカエル(投稿日:2011/07/29 21:26, 履歴)
あ、20%か
Michael mini ミカエル(投稿日:2011/07/29 20:50, 履歴)
takumiさんもアイテムのドロップに挑戦なんですね。
僕も次に武器とか防具のドロップに挑戦しようかと思ってたとこです。
僕はスクリプトの知識ゼロから始めたので苦労してます;;
こういうスレは助かります^^case文って良さそうですね。
その場合はどちらもドロップ率は10%なんですかね。
ちなみにカードのときはif文を使ってみました。

i = 0
i = rand(180) #ドロップ率は0.56%
if i == 0
setEventCharacter("カード", 9697)
setFlag("ミカエルカード", true)
setFlag("ドロップ", true)
else
end

i = 0
i = rand(30) #ドロップ率は3.33%
if i == 1
setEventCharacter("カード", 9697)
setFlag("リリスカード", true)
setFlag("ドロップ", true)
else
end

複数のアイテムのドロップ率変えたいときは
一番良いスクリプトって何でしょうか?
良かったらアドバイスお願いします!
User icon mini 退会したユーザー(投稿日:2011/07/29 11:54, 履歴)
あ、↑のでアイテム貰えないときありました。
5連続は偶然のようです。失礼しました。
002 1  mini ugonight(投稿日:2011/07/29 11:28, 履歴)
一回変数に代入するとか?
a = rand(10)

case a
   when 0
    speak("おや?敵がアイテムを落としていった。")
    giveItem(7431)
    speak("濃縮回復薬を手に入れた!")
  when 1
    speak("おや?敵がアイテムを落としていった。")
    giveItem(7432)
    speak("濃縮魔法薬を手に入れた!")
end