我正在通过Rails the Hardway工作,并参加练习45,其中包括进行文本冒险,其中每个房间都是它自己的类,并且有一个引擎类可以将您从一个类引导到另一个类。此外,必须有几个文件。
我正在使用的代码允许我在类或方法之外使用引擎但是如果我从第三个类调用Engine类,我收到一条消息,说Falcon(类名)是单元化的。
我将游戏基于星球大战,非常感谢您提供的任何帮助 - 即使这意味着以不同的方式解决问题。
runner.rb:
module Motor
def self.runner(class_to_use, method_to_use = nil)
if method_to_use.nil? == false
room = Object.const_get(class_to_use).new
next_room.method(method_to_use).call()
else
room = Object.const_get(class_to_use).new
puts room
end
end
end
map.rb require_relative' runner' require_relative'characters'
class Falcon
def luke
puts "It works!"
end
def obi_wan
puts "this is just a test"
end
end
characters.rb
class Characters
include Motor
puts "You can play as Luke Skywalker or Obi-wan Kenobi"
puts "Which would you like?"
character = gets.chomp()
if character == "Luke Skywalker"
puts "The Force is strong with this one."
Motor.runner(:Falcon, :luke)
elsif character == "Obi Wan Kenobi"
puts "It's been a long time old man."
Motor.runner(:Falcon, :obi_wan)
else
puts "I have no idea what you're saying."
end
end
答案 0 :(得分:0)
characters.rb
require 'map.rb'
答案 1 :(得分:0)
你可能没有朝着正确的方向前进。您不需要此Motor
模块,也不应该在puts
类内部进行get
和Character
调用。不知道您对编程了解多少,但解决方案包括一些基本的数据结构知识,如构建链接的房间列表(以便每个房间知道哪一个是下一个)和递归以在此列表上导航。
首先创建一个Room
基类:
class Room
attr_accessor :description, :next_room
def initialize( description, next_room )
@description = description
@next_room = next_room
end
end
然后是一个角色:
class Character
attr_accessor :title
def initialize( title )
@title = title
end
end
然后你会建立地图:
first_room = Room.new( 'Some room', Room.new( 'Golden Room', Room.new( 'Black room', nil ) ) )
然后你应该创建另一个类,它将从命令行读取并在房间之间移动Character
。