0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ローラ姫のお誘いを断る(Ruby繰り返し処理)

Last updated at Posted at 2019-02-13

redoとは

繰り返し処理をやり直す方法。
これを使用し、ローラ姫救出の際のイベントを再現してみる。

追記(2019/2/14)
標準入力バージョンを追加しました。

Ruby version

ruby 2.4.1

ローラ姫救出イベントとは

ドラゴンクエスト1にて、囚われの女王ローラ姫を救出する際に聞かれる選択イベント。周知の通りいいえが通用しない。

実装

sampleメソッドを使用し、選択肢をランダム化。
はいが出ない限り、無限ループ。

rola.rb
prince = ['ローラ']
prince.each do |prince|
	print "#{prince}:わたしを おしろまで つれてかえってくれますね? =>"
	answer = ['はい','いいえ'].sample
	puts answer
	if answer == 'いいえ'
		puts "#{prince}:そんな、ひどい…"
	end
	redo unless answer == 'はい'
	puts "#{prince}:うれしゅうございます。ぽっ"
end

# 出力は以下の通り
mbp:ruby mac$ ruby rola.rb 
ローラ:わたしを おしろまで つれてかえってくれますね =>いいえ
ローラ:そんなひどい
ローラ:わたしを おしろまで つれてかえってくれますね =>いいえ
ローラ:そんなひどい
ローラ:わたしを おしろまで つれてかえってくれますね =>はい
ローラ:うれしゅうございますぽっ

もし断ることが可能だとしたら、、、

一定回数いいえをした場合、別イベントを起こす設定をしてみる。
今回はいいえを2回したら、王様からクレームがくるようにしてみる。

rola.rb
prince = ['ローラ']
count = 0
prince.each do |prince|
	print "#{prince}:わたしを おしろまで つれてかえってくれますね? =>"
	answer = ['はい','いいえ'].sample
	puts answer
	count += 1
	if answer == 'いいえ'
		puts "#{prince}:そんな、ひどい…"
	end
	redo if answer != 'はい' && count < 2
	count = 0
	if answer == 'はい'
		puts "#{prince}:うれしゅうございます。ぽっ"
	else
		puts "王様:おお、ゆうしゃよ。ことわるとはなにごとだ。"
	end
end
# 出力は以下の通り
mbp:ruby mac$ ruby rola.rb 
ローラ:わたしを おしろまで つれてかえってくれますね =>いいえ
ローラ:そんなひどい
ローラ:わたしを おしろまで つれてかえってくれますね =>いいえ
ローラ:そんなひどい
王様:おおゆうしゃよことわるとはなにごとだ

標準入力を追加し、自分で選択したい

answer = gets.chompを追加し、対応。
.chompをつけ忘れると、戻り値が/nの改行スペース有りで返されるためうまくいきません。

rola.rb
prince = ['ローラ']
prince.each do |prince|
	puts "#{prince}:わたしを おしろまで つれてかえってくれますね?"
	puts "はい or いいえ"
	answer = gets.chomp
	if answer == 'いいえ'
		puts "#{prince}:そんな、ひどい…"
	end
	redo unless answer == 'はい'
	puts "#{prince}:うれしゅうございます。ぽっ"
end
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?