簡體   English   中英

Ruby class inheritance 返回未定義的方法

[英]Ruby class inheritance returning undefined method

我正在編寫 Ruby 中的 Mastermind 游戲,並希望為游戲添加更多功能,讓玩家可以選擇成為“codemaker”或“codebreaker”。 為此,我創建了兩個名為 Codebreaker 和 Codemaker 的類,它們繼承自 Players class。

由於未知原因,當我創建 Codebreaker 的實例時,然后調用它應該從 Players Class 繼承的 random_code 方法,我收到“未定義的方法隨機播放”錯誤消息。 然而,這種方法在更簡單的版本之前沒有問題。

class Players
   attr_accessor :peg_colors, :select_role, :select_player
   def initialize
    @peg_colors = :peg_colors
    @select_role = :select_role
    @select_player = :select_player
   end

   def random_code
    mix_colors = @peg_colors.shuffle
    mix_colors[0...4]
   end

   def player
    puts "Would you like to be the Codebreaker or Codemaker? Type your answser:"
    @select_role= gets.chomp
    @select_role = @select_role.downcase
   end
    
   def select_player(choice)    
    if choice == "codebreaker"
      @select_player = Codebreaker
    else
      @select_player = Codemaker
    end
   end

   def pegs
    @peg_colors = ['Blue', 'Pink', 'Yellow', 'White', 'Purple', 'Green']
   end

end

class Codemaker < Players
  def random_code
    get_code
  end

  def get_code    ## thids needs re-coding
    puts "\n"
    puts "#{@peg_colors}" 
    puts "\n"
    code = []
    while  code.length < 5
    code.push(gets.chomp)
    end
  end
end

class Codebreaker < Players
  def initialize
    super
  end
end

require_relative 'board.rb'
require_relative 'players.rb'
require_relative 'game.rb'

play = Players.new
pegs = play.pegs

codebreaker_or_codemaker = play.player
select_player = play.select_player(codebreaker_or_codemaker)

player = select_player.new
code = player.random_code


board = Board.new(code, pegs)
game = Game.new(board)
game.play

https://repl.it/@chrisrobbo/mastermind-game

“shuffle”是 Array class 中的方法,它應該適用於所有 Array 實例。 我看到它在您共享的 repl.com 鏈接上運行良好。 如果您仍然遇到此問題,請分享錯誤消息或驗證調用 shuffle 方法的 object。 我希望這有幫助。 謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM