2012年9月15日土曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 13(新しいクラスの作成と既存クラスの変更), 13.6(練習問題の続き)、対話的ベビードラゴン を解いてみる。

その他参考書籍

対話的ベビードラゴン

コード(TextWrangler)

sample.rb

#!/usr/bin/env ruby1.9
# -*- coding: 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 poppy?
    @stuff_in_intestine >= 8
  end
  
  def passage_of_time
    if @stuff_in_belly > 0
      @stuff_in_belly = @stuff_in_belly - 1
      @stuff_in_intestine = @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 poppy?
      if @asleep
        @asleep = false
        puts "#{@name}が突然目を覚まします!"
      end
      puts "#{@name}がうんちのためにしゃがみ込みます。"
    end
  end
end

puts "ベビードラゴンの名前を入力"
name = gets.chomp
pet = Dragon.new name
while true
  puts "コマンドを入力(f(餌)/w(散歩)/p(寝かしつけ)/t(遊ぶ)/r(あやす))"
  command = gets.chomp
  case command
    when /^\s*$/ then break
    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
    else puts 'コマンドを確認してください。'
  end
end

入出力結果(Terminal)

$ ./sample.rb
ベビードラゴンの名前を入力
ノーバート
ノーバートが生まれました。
コマンドを入力(f(餌)/w(散歩)/p(寝かしつけ)/t(遊ぶ)/r(あやす))
あ
コマンドを確認してください。
コマンドを入力(f(餌)/w(散歩)/p(寝かしつけ)/t(遊ぶ)/r(あやす))

$
$ ./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
ノーバートを寝かしつけます。
ノーバートが突然目を覚まします!
ノーバートがお腹をすかせています。我慢できなくてあなたをたべました。
$

0 コメント:

コメントを投稿