class CodebreakerFirst::Game

Rubocop

Attributes

code[RW]
game_result[RW]
user_tries[RW]

Public Class Methods

new(code = '', user_tries = 0, game_result = nil) click to toggle source
# File lib/codebreaker_first.rb, line 11
def initialize(code = '', user_tries = 0, game_result = nil)
  @code = code
  @user_tries = user_tries
  @game_result = game_result
end

Public Instance Methods

check_code(input_code) click to toggle source
# File lib/codebreaker_first.rb, line 29
def check_code(input_code)
  @user_tries += 1
  return lose if @user_tries >= MAX_TRIES
  return win if input_code == @code

  validate_code input_code

  result = ''

  @code.chars.each.with_index do |char, index|
    case char == input_code[index]
    when true
      result << '+'
    else
      result << '-' if input_code.include? char
    end
  end

  result
end
from_hash(data) click to toggle source
# File lib/codebreaker_first.rb, line 17
def from_hash(data)
  Game.new data['code'], data['user_tries'], data['game_result']
end
lose() click to toggle source
# File lib/codebreaker_first.rb, line 54
def lose
  @game_result = false
end
results() click to toggle source
# File lib/codebreaker_first.rb, line 64
def results
  Result.results
end
save_result(name) click to toggle source
# File lib/codebreaker_first.rb, line 58
def save_result(name)
  raise Exception, 'To save, you must finish the game!' if @game_result.nil?

  Result.save name, @user_tries, @game_result
end
start() click to toggle source
# File lib/codebreaker_first.rb, line 21
def start
  return if code.length == 4
  
  4.times do
    @code << rand(1...6).to_s
  end
end
win() click to toggle source
# File lib/codebreaker_first.rb, line 50
def win
  @game_result = true
end

Private Instance Methods

validate_code(code) click to toggle source
# File lib/codebreaker_first.rb, line 70
def validate_code(code)
  raise Exception unless code.is_a?(Numeric) || code.is_a?(String)

  code = code.to_s

  raise Exception, 'Code must contains 4 numbers from 1 to 6' unless code =~ /^[1-6]{4}$/
end