我试图在OOP上变得更好并且想要创造一个Mastermind游戏。 该程序由三个类组成,一个计算机类,其中创建了一个随机的颜色代码。存储玩家输入的玩家类,以及运行游戏的游戏类。 我遇到的问题是当我需要将计算机类中的随机代码与播放器输入进行比较时。 这是代码:
class Game
def initialize
@theComputer = Computer.new
@player = Player.new
end
def play
print "\n\nThe Random code is:\n#{@theComputer.random_code}\n\n"
10.times do |i|
current_guess = @player.guess_code
standing = evaluate_guess(current_guess)
end
end #end play
def evaluate_guess(current_guess)
current_guess.each_with_index do |color, position|
print "#{match?(color, position)} "
end
puts ""
end
def almost_match?(color)
@theComputer.random_code.include?(color)
end
def match?(color, position)
color == @theComputer.random_code[position]
end
end
class Computer
COLORS = ["B", "G", "R", "O", "Y", "P"]
attr_reader :random_code
def initialize
@random_code = secret_code
end
def secret_code
sample_code = []
sample_code << COLORS.sample(4)
sample_code
end
end
class Player
def guess_code
puts "Guess the code! Choose 4 colors from B, G, R, O, Y, P"
guess = gets.chomp
guess.split(" ")
end
end
g = Game.new
g.play
我打印出随机代码并输入匹配的值,但所有内容都返回为&#34; false&#34;。我不明白为什么。
答案 0 :(得分:1)
您必须将您的secret_code方法更改为:
def secret_code
COLORS.sample(4)
end
在您的情况下,密码的输出是
[[ random values from COLORS constant ]]
但你期望匹配的只是简单的数组。