ファーストガンダムのOP "翔べ!ガンダム" をruby化してみた。
翔べ!ガンダム
fly_gundam.rb
require_relative 'mobile_suit/gumdam'
def fire_up(ms)
3.times{ ms.fire_up }
ms.instance_eval do |you|
you.rush
if you.fighting_spirit && you.fighting_spirit.burn?("怒り")
enemy = you.search("巨大な敵")
3.times { you.shoot_up(enemy) } if enemy
end
end
ms.strike("正義の怒り")
end
def get_up(ms)
3.times{ ms.get_up }
ms.instance_eval do |you|
you.shout
if you.grief && you.grief.sink?("絶望")
you.drive_off("恐怖")
3.times { you.go_up }
end
end
ms.burn("渦巻く血潮")
end
def renew(ms)
3.times{ ms.renew }
ms.instance_eval do |you|
you.reach
if you.heart && you.heart.trembling?("愛")
you.desire("平和")
3.times { you.fly }
end
end
ms.fly("銀河")
end
gundam = Gundam.new
[:fire_up, :get_up, :renew].each do |action|
send(action, gundam)
puts "機動戦士 #{gundam.name} #{gundam.name}\n\n"
end
mobile_suite/gundam.rb 実装例
gundam.rb
class Property
def initialize(parts)
@parts = parts
end
def burn?(what)
@parts == :fighting_spirit && what == "怒り"
end
def sink?(what)
@parts == :grief && what == "絶望"
end
def trembling?(what)
@parts == :heart && what == "愛"
end
end
class Gundam
attr_reader :fighting_spirit, :grief, :heart
def initialize
@fighting_spirit = Property.new(:fighting_spirit)
@grief = Property.new(:grief)
@heart = Property.new(:heart)
end
def name
"ガンダム"
end
def fire_up
puts "#{name}は燃え上がる"
end
def rush
puts "#{name}は走る"
end
def search(target)
target
end
def shoot_up(target)
puts "#{name}は#{target}を撃つ"
end
def strike(property)
puts "#{name}は#{property}をぶつける"
end
def get_up
puts "#{name}は立ち上がる"
end
def shout
puts "#{name}は叫ぶ"
end
def drive_off(what)
puts "#{name}は#{what}を払う"
end
def go_up
puts "#{name}は行く"
end
def burn(what)
puts "#{name}は#{what}を燃やす"
end
def renew
puts "#{name}はよみがえる"
end
def reach
puts "#{name}は掴む"
end
def desire(what)
puts "#{name}は#{what}を願う"
end
def fly(what = nil)
puts name + (what ? "#{what}へ向かって" : "") + "翔ぶ"
end
end
実行結果
ガンダムは燃え上がる
ガンダムは燃え上がる
ガンダムは燃え上がる
ガンダムは走る
ガンダムは巨大な敵を撃つ
ガンダムは巨大な敵を撃つ
ガンダムは巨大な敵を撃つ
ガンダムは正義の怒りをぶつける
機動戦士 ガンダム ガンダム
ガンダムは立ち上がる
ガンダムは立ち上がる
ガンダムは立ち上がる
ガンダムは叫ぶ
ガンダムは恐怖を払う
ガンダムは行く
ガンダムは行く
ガンダムは行く
ガンダムは渦巻く血潮を燃やす
機動戦士 ガンダム ガンダム
ガンダムはよみがえる
ガンダムはよみがえる
ガンダムはよみがえる
ガンダムは掴む
ガンダムは平和を願う
ガンダム翔ぶ
ガンダム翔ぶ
ガンダム翔ぶ
ガンダム銀河へ向かって翔ぶ
機動戦士 ガンダム ガンダム
いいわけ
- 解釈の違いについては適当に判断しましたのでご容赦願います。
- gumdam.rb は、結果を得るための実装例です。たとえば、敵を探すのが面倒なのでごまかしましたのでご容赦願います。
- 柔軟性に欠ける部分も多々ありますが、これはサンプルなのでご容赦願います。
- そもそもこんな投稿をしたことを容赦願います。