Sha256: 18f20ddabde171e4ecdce32ad54611b93ee85e72eaeb99cf2ca465dcc54e74cf

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

require_relative '../constants'
require_relative 'user'
require_relative 'difficulty'
module CodebreakerKarolina
  class Game
    include CodebreakerConstants
    attr_accessor :user, :difficulty

    def start
      @secret_code = generate_code.freeze
      @hint = @secret_code.chars.uniq
    end

    def compare_code(guess)
      return unless valid_code?(guess)

      @user.used_attempts += 1
      comparison_result(@secret_code.chars, guess.chars)
    end

    def win?(guess)
      return true if @secret_code == guess

      false
    end

    def lose?
      return true if @user.used_attempts >= @difficulty.attempts

      false
    end

    def hint
      return unless hints_left?

      @user.used_hints += 1
      @hint.shuffle.pop
    end

    private

    def valid_code?(code)
      return true if code =~ (/[1-6]{4}/)

      false
    end

    def generate_code
      Array.new(CODE_SIZE) { rand(NUM_RANGE) }.join
    end

    def comparison_result(secret_code, user_code)
      result = ''
      user_code.each_with_index do |num, index|
        next unless secret_code.include? num

        result += num == secret_code[index] ? PLUS : MINUS
        secret_code[secret_code.index(num)] = nil
      end
      result.chars.sort.join
    end

    def hints_left?
      return true if @difficulty.hints > @user.used_hints

      false
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
codebreaker_karolina-0.1.0 lib/modules/game.rb