Skip to content

Instantly share code, notes, and snippets.

@Taishikun0721
Last active December 2, 2020 09:27
Show Gist options
  • Save Taishikun0721/e96cb70cbe6de526bade36177950d8b3 to your computer and use it in GitHub Desktop.
Save Taishikun0721/e96cb70cbe6de526bade36177950d8b3 to your computer and use it in GitHub Desktop.
たこ焼き屋さんプログラム

たこ焼きプログラム

オブジェクト指向の練習の一環で、Rubyでたこ焼きプログラムを作成してみた。

要件

  1. たこ焼きは6個パックか8個パックから選べる。
  2. たこが1個入りか2個入りか選べる。
  3. 最初にタコの在庫を決める事が出来る。
  4. タコが足りなくなったら売り切れでプログラムが終了する。

実行例

たこ焼き何個いる? 6個? 8個? press...6 or 8
8
タコは何個入りがいい? press...1 or 2
2
たこ2個入りの8個パックできたでー!
残りのタコは84個!
たこ焼き何個いる? 6個? 8個? press...6 or 8
1
たこ焼き何個いる? 6個? 8個? press...6 or 8
6
タコは何個入りがいい? press...1 or 2
1
たこ1個入りの6個パックできたでー!
残りのタコは78個!
たこ焼き何個いる? 6個? 8個? press...6 or 8
8
タコは何個入りがいい? press...1 or 2
2
たこ2個入りの8個パックできたでー!
残りのタコは62個!
たこ焼き何個いる? 6個? 8個? press...6 or 8
8
タコは何個入りがいい? press...1 or 2
2
たこ2個入りの8個パックできたでー!
残りのタコは46個!
たこ焼き何個いる? 6個? 8個? press...6 or 8
6
タコは何個入りがいい? press...1 or 2
2
たこ2個入りの6個パックできたでー!
残りのタコは34個!
たこ焼き何個いる? 6個? 8個? press...6 or 8
8
タコは何個入りがいい? press...1 or 2
2
たこ2個入りの8個パックできたでー!
残りのタコは18個!
たこ焼き何個いる? 6個? 8個? press...6 or 8
8
タコは何個入りがいい? press...1 or 2
2
たこ2個入りの8個パックできたでー!
残りのタコは2個!
売り切れ!終わり!
class Takoyaki
def start(stock)
order = Order.new(Ask.how_many, Tako.new(Ask.tako_count))
return close if stock.run_out?(order.comsumption)
puts "たこ#{order.tako_count}個入りの#{order.takoyaki_count}個パックできたでー!"
stock.limit = stock.decrease(order)
puts "残りのタコは#{stock.limit}個!"
stock.run_out?(Ask::TAKOYAKI_ANOUNT.min) ? close : start(stock)
end
private
def close
puts "売り切れ!終わり!"
end
end
class Tako
def initialize(count)
@count = count
end
def count
@count
end
end
class Order
def initialize(takoyaki_count, tako_count)
@takoyaki_count = takoyaki_count
@tako_count = tako_count
@comsumption = comsumption
end
def takoyaki_count
@takoyaki_count
end
def tako_count
@tako_count.count
end
def comsumption
takoyaki_count * tako_count
end
end
class Stock
def initialize(limit)
@limit = limit
end
def limit
@limit
end
def limit=(new_limit)
@limit = new_limit
end
def decrease(order)
limit - order.comsumption
end
def run_out?(count)
limit <= count
end
end
class Ask
TAKOYAKI_ANOUNT = [6, 8]
TAKO_COUNT = [1, 2]
def self.how_many
puts "たこ焼き何個いる? #{TAKOYAKI_ANOUNT.join('個? ')}個? press...#{TAKOYAKI_ANOUNT.join(' or ')}"
count = gets.to_i
return how_many unless TAKOYAKI_ANOUNT.include?(count)
count
end
def self.tako_count
puts "タコは何個入りがいい? press...#{TAKO_COUNT.join(' or ')}"
count = gets.to_i
return tako_count unless TAKO_COUNT.include?(count)
count
end
end
takoyaki = Takoyaki.new
stock = Stock.new(100)
takoyaki.start(stock)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment