1

これまでに学んだRubyに基づいた追加のクレジット演習として、短いテキストベースのゲームを作成しています。クラス間で変数の読み取りと書き込みを行うのに問題があります。私は多読し、これを行う方法についての説明を探しましたが、あまり運がありませんでした。@インスタンス変数を使用してみattr_accessibleましたが、理解できません。これまでの私のコードは次のとおりです。

class Game
  attr_accessor :room_count

  def initialize
    @room_count = 0
  end

  def play
    while true
      puts "\n--------------------------------------------------"

      if @room_count == 0
        go_to = Entrance.new()
        go_to.start
      elsif @room_count == 1
        go_to = FirstRoom.new()
        go_to.start
      elsif @room_count == 2
        go_to = SecondRoom.new()
        go_to.start
      elsif @room_count == 3
        go_to = ThirdRoom.new()
        go_to.start
      end
    end
  end

end

class Entrance

  def start
    puts "You are at the entrance."
    @room_count += 1
  end

end

class FirstRoom

  def start
    puts "You are at the first room."
    @room_count += 1
  end

end

class SecondRoom

  def start
    puts "You are at the second room."
    @room_count += 1
  end

end

class ThirdRoom

  def start
    puts "You are at the third room. You have reached the end of the game."
    Process.exit()
  end

end

game = Game.new()
game.play

クラスが次に進む部屋を認識できるように、さまざまなクラスに変数をRoom変更させたいと思います。また、クラスの継承を実装せずにこれを実行しようとしています。ありがとう!@room_countGame

4

1 に答える 1

3
class Room
  def initialize(game)
    @game = game
    @game.room_count += 1
  end

  def close
    @game.room_count -= 1
  end
end

class Game
  attr_accessor :room_count

  def initialize
    @room_count = 0
  end

  def new_room
    Room.new self
  end
end

game = Game.new
game.room_count # => 0
room = game.new_room
game.room_count # => 1
room.close
game.room_count # => 0
于 2012-09-24T22:51:01.447 に答える