開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの機能制限無料版、light版)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13章(新しいクラスの作成と既存クラスの変更), 13.6(練習問題の続き)、対話的ベビードラゴンを解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
対話的ベビードラゴン
コード(TextWrangler)
#!/usr/bin/env ruby
#encoding: utf-8
class Dragon
def initialize name
@name = name
@asleep = false
@stuff_in_belly = 10
@stuff_in_intestine = 0
puts "#{@name}が生まれました。"
end
def feed
puts "#{@name}にご飯をあげます。"
@stuff_in_belly = 10
passage_of_time
end
def walk
puts "#{@name}をトイレにつれていきます。"
@stuff_in_intestine = 0
passage_of_time
end
def put_to_bed
puts "#{@name}を寝かしつけます。"
@asleep = true
3.times do
passage_of_time if @asleep
puts "#{@name}がいびきをかいて、部屋が煙だらけです。" if @asleep
end
if @asleep
@asleep = false
puts "#{@name}はゆっくり目覚めます。"
end
end
def toss
puts "#{@name}に高い高いをします。"
puts "#{@name}が笑ってあなたの眉毛が焦げます。"
passage_of_time
end
def rock
puts "#{@name}をやさしくあやします。"
@asleep = true
puts "#{@name}は少し居眠りをします。"
passage_of_time
if @asleep
@asleep = false
puts "しかし、やめると起きてしまいます。"
end
end
private
def hungry?
@stuff_in_belly <= 2
end
def poopy?
@stuff_in_intestine >= 8
end
def passage_of_time
if @stuff_in_belly > 0
@stuff_in_belly -= 1
@stuff_in_intestine += 1
else
if @asleep
@asleep = false
puts "#{@name}が突然めを覚まします!"
end
puts "#{@name}がお腹をすかせています。我慢できなくてあなたを食べました。"
exit
end
if @stuff_in_intestine >= 10
@stuff_in_intestine = 0
puts "うわっ、#{@name}がおもらしを・・・・・・"
end
if hungry?
if @asleep
@asleep = false
puts "#{@name}が突然目を覚まします!"
end
puts "#{@name}のお腹が鳴っています。"
end
if poopy?
if @asleep
@asleep = false
puts "#{@name}が突然眼を覚まします!"
end
puts "#{@name}がうんちのためにしゃがみ込みます。"
end
end
end
print 'ペット(ベビードラゴン)の名前を入力: '
name = gets.chomp
pet = Dragon.new name
while true
print 'コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:'
case command = gets.chomp
when 'f' then pet.feed
when 'w' then pet.walk
when 'p' then pet.put_to_bed
when 't' then pet.toss
when 'r' then pet.rock
when 'q' then break
else puts '入力内容を確認してください。'
end
end
入出力結果(Terminal)
./sample.rb ペット(ベビードラゴン)の名前を入力: ノーバート ノーバートが生まれました。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:a 入力内容を確認してください。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:q $ ./sample.rb ペット(ベビードラゴン)の名前を入力: ノーバート ノーバートが生まれました。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:f ノーバートにご飯をあげます。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:t ノーバートに高い高いをします。 ノーバートが笑ってあなたの眉毛が焦げます。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:w ノーバートをトイレにつれていきます。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:p ノーバートを寝かしつけます。 ノーバートがいびきをかいて、部屋が煙だらけです。 ノーバートがいびきをかいて、部屋が煙だらけです。 ノーバートがいびきをかいて、部屋が煙だらけです。 ノーバートはゆっくり目覚めます。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:r ノーバートをやさしくあやします。 ノーバートは少し居眠りをします。 しかし、やめると起きてしまいます。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:p ノーバートを寝かしつけます。 ノーバートが突然目を覚まします! ノーバートのお腹が鳴っています。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:p ノーバートを寝かしつけます。 ノーバートが突然目を覚まします! ノーバートのお腹が鳴っています。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:p ノーバートを寝かしつけます。 ノーバートが突然目を覚まします! ノーバートのお腹が鳴っています。 ノーバートがうんちのためにしゃがみ込みます。 コマンド(ご飯(f)、トイレ(w)、寝かす(p)、遊ぶ(t)、あやす(r)を入力:p ノーバートを寝かしつけます。 ノーバートが突然めを覚まします! ノーバートがお腹をすかせています。我慢できなくてあなたを食べました。 $
今回の周ではirb(インタラクティブRuby)も少しずつ活用してみることに。
まだ上記の本を入手してないのでまた最初から。
本書を続けつつ、上記の本を早く入手してそっちに切り替え。
0 コメント:
コメントを投稿