在Ruby中制作类猜测游戏,坚持实例方法猜测

在Ruby中制作类猜测游戏,坚持实例方法猜测,ruby,class,Ruby,Class,好的,我有一个作业要做一个叫做猜谜游戏的类,然后创建一个猜谜游戏!哈哈。但说真的,我必须做一个游戏,把输入作为一个介于1和10之间的整数。我已经完成了类的语法框架,但是当我使用实例方法guess时,我就被卡住了。如果用户的猜测高于随机数,则应返回“:high”。如果低于该数字,则返回“:low”。如果是正确的号码,你就知道要点了。我想这与我的条件句有关。以下是我迄今为止的所有代码: class GuessingGame def initialize(answer) @answer

好的,我有一个作业要做一个叫做猜谜游戏的类,然后创建一个猜谜游戏!哈哈。但说真的,我必须做一个游戏,把输入作为一个介于1和10之间的整数。我已经完成了类的语法框架,但是当我使用实例方法guess时,我就被卡住了。如果用户的猜测高于随机数,则应返回“:high”。如果低于该数字,则返回“:low”。如果是正确的号码,你就知道要点了。我想这与我的条件句有关。以下是我迄今为止的所有代码:

class GuessingGame

  def initialize(answer)
    @answer = answer
  end

answer = rand(10) + 1

  def guess(guess)
    if guess.to_i > answer
     return ":high"
    elsif guess.to_i < answer
     return ":low"
    else
     return ":correct"
    end
end

  def solved?
  end

end

这是我对你的代码的一个小小的回顾。我想它不会通过你的规格,但是

class GuessingGame

  def initialize
    @answer = answer
    @solved = false
  end

  def answer
    rand(10) + 1
  end

  def guess(guess)
     if guess.to_i > answer
       :high
     elsif guess.to_i < answer
       :low
     else
       :correct
     end
   end

  def try_to_guess(assumption)
    result_of_guessing = guess(assumption)
    @solved = true if result_of_guessing == :correct
    puts "Your assumption is #{result_of_guessing}"
  end

  def solved?
    @solved
  end
end
若要调用函数,则应定义该函数

下一步:


“high”是字符串,而:high是Ruby char。它非常接近弦,我想你在这一点上有点误解。另外,您不必使用return,因为ruby函数默认返回最后计算的值,即使在if-else语句中也是如此。

在类定义之后,您必须将变量设置为类的新实例,然后您可以调用该方法

 class GuessingGame
  attr_reader :answer
  def initialize
    @answer = rand(10) + 1
  end

  def guess(guess)
    if guess.to_i > answer
     return ":high"
    elsif guess.to_i < answer
     return ":low"
    else
     return ":correct"
    end
  end

  def solved?
  end

end

a = GuessingGame.new
puts a.guess(2)
类猜游戏
读者:回答
def初始化
@答案=兰特(10)+1
结束
def猜测(猜测)
如果猜猜答案
返回“:高”
elsif guess.to_i<答案
返回“:低”
其他的
返回“:正确”
结束
结束
def解决了吗?
结束
结束
a=猜谜游戏
猜一猜(2)
由于返回的是字符串,因此除非调用puts/print,否则不会显示该字符串 您可以将该字符串替换为,而不是返回。 此外,您还需要attr_reader:answer,否则,您无法从类外访问答案,并且它将无法工作。请阅读有关att访问器的信息。
最后,你可以直接做@answer=rand(10)+1。

首先,对你的原创作品做一些注释

  • @answer
    变量可以直接初始化,并且 必须在代码的其他地方引用为
    @answer

  • guess
    方法中,
    return
    不会打印 任何东西都可以放在控制台上

  • 您没有保存游戏状态的变量(已解决或未解决) 已解决)

考虑到这些问题,下面是我对代码的重构。我尽量忠实于你的意图:

class GuessingGame

  def initialize
    @answer = rand(10) + 1
    @solved = false
  end

  def guess(guess)
    if guess.to_i > @answer
      puts "high"
    elsif guess.to_i < @answer
      puts "low"
    else
      @solved = true
      puts "correct"
    end
  end

  def solved?
    if @solved
      puts "You guessed it!"
    else
      puts "Keep guessing!"
    end
  end
end

你为什么这样评论:
#def guess(guess)
,你得到的确切错误是什么。糟糕,我不是有意评论的。在我的代码中没有注释。以下是我遇到的错误:#猜测游戏#猜测返回:猜测过高时高#猜测游戏#猜测返回:猜测过低时低#猜测游戏#猜测返回:猜测正确时正确#猜测游戏#猜测更改解决了?当做出正确的猜测时#猜游戏#猜不改?当做出错误的猜测时#猜游戏#猜测反映了最后的猜测哇,你能编辑并以可读的格式将其放入你的问题中吗?也许您想要的是
guess=$stdin.gets.to_i
显示规范错误消息。我冒昧猜测,它们都包含类似于“NoMethodError:no method'answer` for
GuessingGame
”的内容。要修复此问题,请将
attr\u reader:answer
添加到类定义中
return ":high"
 class GuessingGame
  attr_reader :answer
  def initialize
    @answer = rand(10) + 1
  end

  def guess(guess)
    if guess.to_i > answer
     return ":high"
    elsif guess.to_i < answer
     return ":low"
    else
     return ":correct"
    end
  end

  def solved?
  end

end

a = GuessingGame.new
puts a.guess(2)
class GuessingGame

  def initialize
    @answer = rand(10) + 1
    @solved = false
  end

  def guess(guess)
    if guess.to_i > @answer
      puts "high"
    elsif guess.to_i < @answer
      puts "low"
    else
      @solved = true
      puts "correct"
    end
  end

  def solved?
    if @solved
      puts "You guessed it!"
    else
      puts "Keep guessing!"
    end
  end
end
2.0.0-p481 :001 > load './guessing_game.rb'
 => true 
2.0.0-p481 :002 > game = GuessingGame.new
 => #<GuessingGame:0x00000001803a80 @answer=6, @solved=false> 
2.0.0-p481 :003 > game.guess(5)
low
 => nil 
2.0.0-p481 :004 > game.guess(7)
high
 => nil 
2.0.0-p481 :005 > game.solved?
Keep guessing!
 => nil 
2.0.0-p481 :006 > game.guess(6)
correct
 => nil 
2.0.0-p481 :007 > game.solved?
You guessed it!
 => nil