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