Sha256: 44d01bc746d49aa1dd9bfb5e698748b68278a9d7007c137982a0b5ae8e8140eb

Contents?: true

Size: 1.53 KB

Versions: 1

Compression:

Stored size: 1.53 KB

Contents

# frozen_string_literal: true

module Wordle
  class Game
    def self.play(*args)
      new(*args).play
    end

    def initialize(options_reader = Options.new)
      @list = List.new
      @options = options_reader.read
      @target_word = generate_word
    end

    def play
      winner = false

      Legend.print
      puts "Guess a 5 letter word: "
      guesses = []
      must_include = []
      must_match = Array.new(5)

      while guesses.length < 6 && !winner
        guess = gets.chomp

        validator = GuessValidator.new(
          guess,
          @list,
          @options[:difficult],
          must_include,
          must_match
        )
        if validator.invalid?
          puts validator.error
          next
        end

        analyzer = GuessAnalyzer.new(@target_word, guess)
        puts analyzer.colors
        guesses << analyzer.squares
        if @options[:difficult]
          must_include = analyzer.must_include(must_include)
          must_match = analyzer.must_match(must_match)
        end

        if analyzer.match?
          winner = true
          break
        end
      end

      hash = Digest::SHA2.hexdigest(@target_word)[..5]
      if winner
        puts "\nWordle Gem #{hash} #{guesses.length}/6\n\n"
      else
        puts "\nWord was: #{@target_word}\n"
        puts "\nWordle Gem #{hash} X/6*\n\n"
      end

      puts guesses
    end

    private

    def generate_word
      if @options[:identifier]
        @list.by_hash(@options[:identifier])
      else
        @list.random
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wordle-0.6.0 lib/wordle/game.rb