ファミコンソフト「じゅうべえクエスト」は、
ニコニコ動画のとあるゆっくり実況RTAで有名なソフトで、
私もその動画で名を知ったソフトです。
その中で、ゲーム中2位の威力を誇る「ミサイルポッド」という武器が、
「鉄パイプ」を仲間の特殊能力により変換できるという。
変換成功率は驚異の24%(クソみたいなアイテム変換率)
変換失敗、リセットして再開に約11秒
RTA走者としてはここら辺を、実機検証するのにかなり時間がかかることでしょう。
その時間を軽減するために作成したシミュレーターがこのプログラムです。
RTAにアイテム変換を組み込む際には、まずこのシュミレーターで時間を計測てチャートを組んでいただくことで、RTA捗りますね!
ということで、みんなRTA走ろう!
コード
puts "ミサイルをいくつ作りますか?" use_missile = gets.tr("0-9", "0-9").to_i def item_conversion_rate(weight = 24) #クソみたいなアイテム変換率定義 rand <= weight/100.0 #24%の確率でtrueを返す end missiles = 0 #ミサイルポッドの初期値 reset = 0 #ミサイルポッドの初期値リセ回数の初期値 while missiles < use_missile do #作りたいミサイルの数になるまでアイテム変換を繰り返す sleep 11 #こ↑こ↓をコメントアウトで結果だけ見れます item_conversion_rate(weight = 24) reset = reset + 1 if item_conversion_rate(weight = 24) == true then missiles += 1 puts "○ いいぞ〜これ(幻聴)" elsif item_conversion_rate(weight = 24) == false then puts "× ポッチャマ...(幻聴)" else end end puts "必要なミサイルポッド数:#{use_missile}" puts "リセ回数:#{reset}" puts "作成までにかかる時間:約#{reset*11}秒"
実行した時の動画
仕様
・必要数を入力すると、その数のミサイルポッドが作られるまでアイテム変換が続きます。
・最後に表示される時間は実行回数×11秒(変換失敗、リセットして再起動に約11秒)
・変換は11秒に1度実行される。※結果ただけ見たい場合はこの記述を消した方がいい。絶対に消したほうがいい。人生のロスタイム。
今回学んだこと
・sleep X ←Xのところに秒数
>ターミナルの表示にディレイをかけられる(等速にリアル感を出す必要はない(戒め))
・完成するとゴミコードが倍あることに気づく
>知識不足だと書く量も調べる量も多いから時間がかかる。はっきりわかんだね。
今回ハマったところ
・確率を出すメソッドの結果を変数に入れてはいけない
>item_conversion_rate(weight = 24)をそのままメソッドで使うと長いからといって変数に代入したら結果が固定されて永久ループした(結果がtrueの時は必要ミサイル数で止まる。)
・最初はなぜか実行結果を全て配列にぶち込んで、それをeachで表示しようとしてた。覚えたことを使いたくて全然スマートじゃないし、今回の仕様に向いてないから普通に積んだのでボツ
・実際の実行時間を表示させるメソッド使おうとしたけど、難しそうなので今度やります。
参考にした記事
▼Rubyで指定の確率でtrueを返すメソッドはありますか?
https://ja.stackoverflow.com/questions/33416/ruby%e3%81%a7%e6%8c%87%e5%ae%9a%e3%81%ae%e7%a2%ba%e7%8e%87%e3%81%a7true%e3%82%92%e8%bf%94%e3%81%99%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%81%af%e3%81%82%e3%82%8a%e3%81%be%e3%81%99%e3%81%8b
結論
biim兄貴はアイテム変換を倍速にしてくれるRTA実況者の鑑
元ネタ
2:22〜あたりから
コメント