class CodebreakerVukolovEdition::Game

Constants

MAX_TURNS
SECRET_CODE_LENGTH
SECRET_CODE_VALID_VALUES

Attributes

hint[RW]
secret_code[RW]
turns[RW]

Public Class Methods

new() click to toggle source
# File lib/game.rb, line 10
def initialize
  @secret_code = new_code
  @turns = 0
  @hint = { used: false, value: @secret_code.sample }
end

Public Instance Methods

add_new_turn() click to toggle source
# File lib/game.rb, line 16
def add_new_turn
  @turns += 1
end
checker(guess) click to toggle source
# File lib/game.rb, line 29
def checker(guess)
  guess_arr = guess.split('').map(&:to_i)
  temp = @secret_code.zip(guess_arr)
  get_plusses(temp) + get_minuses(temp)
end
round_result(guess) click to toggle source
# File lib/game.rb, line 24
def round_result(guess)
  return :won if @secret_code.join('') == guess
  checker(guess)
end
use_hint() click to toggle source
# File lib/game.rb, line 20
def use_hint
  @hint[:used] = true
end

Private Instance Methods

count_plusses(temp) click to toggle source
# File lib/game.rb, line 41
def count_plusses(temp)
  temp.select { |el| el.uniq.size == 1 }
end
get_minuses(temp) click to toggle source
# File lib/game.rb, line 49
def get_minuses(temp)
  minuses = ''
  code = (temp - count_plusses(temp)).transpose.first
  user_guess = (temp - count_plusses(temp)).transpose.last
  code&.each do |code_value|
    next unless user_guess.include?(code_value)
    user_guess.delete_at(user_guess.index(code_value) || user_guess.length) && minuses << '-'
  end
  minuses
end
get_plusses(temp) click to toggle source
# File lib/game.rb, line 45
def get_plusses(temp)
  '+' * count_plusses(temp).size
end
new_code() click to toggle source
# File lib/game.rb, line 37
def new_code
  Array.new(SECRET_CODE_LENGTH).map { rand(SECRET_CODE_VALID_VALUES) }
end