【发布时间】:2015-07-23 02:14:32
【问题描述】:
我正在用 Ruby 编写 Rock Paper Scissors Lizard Spock 的游戏命令行。我有matchup 方法,它采用变量@shape(游戏随机选择的手形)和@player_shape(玩家选择的手形)。
我的matchup 方法比较两个形状并将游戏结果设置为@result:
class Game
SHAPES = [:rock, :paper, :scissors, :lizard, :spock]
attr_reader :shape, :player_shape, :status
# ...
def matchup
if @shape == @player_shape
@result = :draw
else
case @player_shape
when :rock
@result = (@shape == :scissors || @shape == :lizard) ? :player_wins : :game_wins
when :paper
@result = (@shape == :rock || @shape == :spock) ? :player_wins : :game_wins
when :scissors
@result = (@shape == :paper || @shape == :lizard) ? :player_wins : :game_wins
when :lizard
@result = (@shape == :paper || @shape == :spock) ? :player_wins : :game_wins
when :spock
@result = (@shape == :rock || @shape == :scissors) ? :player_wins : :game_wins
end
end
end
# ...
end
我多次运行代码,它按预期工作,但在我的规范文件中,我得到的结果与代码行为不匹配。这是规格:
describe Game do
subject(:game) { Game.new }
# ...
describe "#matchup" do
context "game chooses rock" do
before do
allow(game).to receive(:shape).and_return(:rock)
end
it "sets result as :player_wins if the game chooses paper" do
allow(game).to receive(:player_shape).and_return(:paper)
game.matchup
expect(game.result).to eq(:player_wins)
end
end
end
end
结果如下:
Failure/Error: expect(game.result).to eq(:player_wins)
expected: :player_wins
got: :draw
(compared using ==)
Diff:
@@ -1,2 +1,2 @@
-:player_wins
+:draw
我在这里做错了什么?我试了又试,还是不知道怎么解决这个问题。
【问题讨论】: