消除Ruby中的刽子手游戏中的额外空间

时间:2015-01-10 02:43:09

标签: ruby

我在Ruby中编写了一个刽子手游戏,但在每个单词的末尾打印出两个额外的空格,这可以防止程序知道用户何时获胜,以及让玩家感到困惑。我该如何解决这个问题?代码:

    class HangmanGame
    def initialize(word)
        @word = word
        @current_word = "_" * word.size
    end

    def current_word
        @current_word
    end

    def word
        @word
    end

    def take_guess(guess_ltr)
        @word.split("").each_with_index do |word_ltr, i|
            if word_ltr == guess_ltr.downcase
                @current_word[i] = guess_ltr.downcase
            else 
                print word_ltr
            end
        end
    end

    def done? 
        if @word == @current_word
            true
        else
            false
        end
    end
end


thewordlist = []
file = File.open("5desk.txt")

2 个答案:

答案 0 :(得分:0)

在尝试解决问题时,我还重新编写了一些代码但与问题无关。所以张贴它可能有助于某人:

class Hangman
  attr_reader :word

  def initialize(word)
    @word = word.downcase
    @guesses = []
  end

  def take_guess(c)
    character = c.downcase.strip
    @guesses << character unless @guesses.include? character
  end

  def current_word
    @word.gsub(/[^#{@guesses.join}\s]/, '_')
  end

  def done?
    !(@word.tr(@guesses.join, '*') =~ /\w/)
  end
end

注意:

  1. 尝试删除绝对不需要的实例变量。例如@current_word
  2. 尝试使用attr_reader例如:@word
  3. 尝试在初始化时尽快标准化输入/输出。例如:guess_ltr
  4. 尝试使用简单/富有表现力的变量名称。例如guess_ltr
  5. current_word通过使用_替换猜测和空格以外的所有内容来计算游戏的当前状态。
  6. done?检查在尝试替换猜测后@word中是否还有任何单词字符。

答案 1 :(得分:0)

这不是您问题的答案,但这可能会有所帮助。

最近我建立了一个ruby gem来直接在终端上玩hangman,它被称为play_hangman。为了构建它,我使用了hangman_engine gem,它实现了游戏逻辑和一个视图助手来在终端上绘制游戏。查看这些库的代码,也许你觉得它们很有用。

代码来源在这里: