class AndriiCodebreaker::Game
Attributes
available_hints[RW]
difficulties[R]
player_name[R]
secret_code[R]
used_attempts[RW]
used_hints[RW]
Public Class Methods
new(player, difficulties)
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 11 def initialize(player, difficulties) @player_name = player @difficulties = difficulties @used_attempts = 0 @used_hints = 0 end
Public Instance Methods
check_result(result, guess)
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 58 def check_result(result, guess) guess.each.with_index do |code, index| result.sub!(MINUS, PLUS) if code == @secret_code[index] end result end
code_valid?(code)
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 69 def code_valid?(code) code.to_s.match(/^[1-6]{4}$/) end
compare_codes(guess)
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 48 def compare_codes(guess) @used_attempts += 1 guess = guess.chars.map(&:to_i) minuses = (@secret_code & guess).map { |element| [@secret_code.count(element), guess.count(element)].min }.sum result = MINUS * minuses check_result(result, guess) end
generate_code()
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 65 def generate_code Array.new(CODE_LENGTH_COUNT) { rand(RANGE_SECRET_CODE) } end
hint()
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 23 def hint return unless left_hint? hint = @available_hints.chars.sample @available_hints.sub!(hint, '') @used_hints += 1 hint end
left_hint?()
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 32 def left_hint? @used_hints < @difficulties.hints end
lose()
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 42 def lose return false if @used_attempts < @difficulties.attempts true end
start()
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 18 def start @secret_code = generate_code @available_hints = @secret_code.join.dup end
win?(guees)
click to toggle source
# File lib/andrii_codebreaker/game.rb, line 36 def win?(guees) return true if @secret_code.join == guees false end