Sha256: 1e2861076690da9c94bde4ea8e83d873ce50b0920629991e8a82f6a1612d324f

Contents?: true

Size: 1.35 KB

Versions: 7

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

module Codebreaker
  class Game
    include Validation
    include FileStore

    attr_reader :hints, :user, :state, :secret_code

    def initialize(user)
      @user = user
      @state = Constants::START_GAME
      @secret_code = SecretCodeGenerator.call
    end

    def start
      validate_state(@state, Constants::START_GAME)
      @copied_code = @secret_code.dup
      @state = Constants::IN_GAME
    end

    def generate_matrix(input)
      validate_state(@state, Constants::IN_GAME)
      validate_guess(input)
      user.decrement_attemts
      MatrixGenerator.new(input, @secret_code).call
    end

    def hints?
      (user.hints <= Constants::DIFFICULTIES[@user.difficulty][:hints]) && user.hints.positive?
    end

    def attempts?
      (user.attempts <= Constants::DIFFICULTIES[@user.difficulty][:attempts]) && user.attempts.positive?
    end

    def win?(result)
      return false unless result == @secret_code

      @state = Constants::WIN
      true
    end

    def lose?
      return unless user.attempts.zero?

      @state = Constants::LOSE
      true
    end

    def self.show_difficulties
      Constants::DIFFICULTIES
    end

    def use_hint
      return if @copied_code.empty?

      hint = @copied_code.sample
      @copied_code.join.sub!(hint.to_s, "")
      user.decrement_hints
      hint
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
codebreaker-mikhail-0.2.4 lib/codebreaker/game.rb
codebreaker-mikhail-0.2.3 lib/codebreaker/game.rb
codebreaker-mikhail-0.2.2 lib/codebreaker/game.rb
codebreaker-mikhail-0.2.1 lib/codebreaker/game.rb
codebreaker-mikhail-0.2.0 lib/codebreaker/game.rb
codebreaker-mikhail-0.1.5 lib/codebreaker/game.rb
codebreaker-mikhail-0.1.3 lib/codebreaker/game.rb