让一个类将数据发送到调用另一个类的引擎

时间:2012-11-27 14:56:35

标签: ruby

我正在通过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

2 个答案:

答案 0 :(得分:0)

characters.rb

require 'map.rb'

答案 1 :(得分:0)

你可能没有朝着正确的方向前进。您不需要此Motor模块,也不应该在puts类内部进行getCharacter调用。不知道您对编程了解多少,但解决方案包括一些基本的数据结构知识,如构建链接的房间列表(以便每个房间知道哪一个是下一个)和递归以在此列表上导航。

首先创建一个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