class CodebreakerGem::Game

Constants

ATTEMPTS
HINTS

Attributes

attempts[R]
guess[RW]
hint[R]
hints[R]
response[R]
secret_code[R]

Public Class Methods

new() click to toggle source
# File lib/codebreaker_gem.rb, line 17
def initialize
  @response = []
  @hints = HINTS
  @attempts = ATTEMPTS
end

Public Instance Methods

check() click to toggle source
# File lib/codebreaker_gem.rb, line 27
def check
  return @response = '+' * @secret_code.length if @secret_code == @guess
  code, guess = @secret_code.split('').zip(@guess.split('')).delete_if { |item| item[0] == item[1] }.transpose
  if !code || !guess
    @response = ['+'] * @secret_code.length
  else
    @response = ['+'] * (@secret_code.length - code.length)
    @response.concat(get_minuses(code, guess))
  end
  @response = @response.join.to_s
  @attempts -= 1
end
generate_code() click to toggle source
# File lib/codebreaker_gem.rb, line 23
def generate_code()
  @secret_code = 4.times.map{ Random.rand(1...6) }.join.to_s
end
get_hint() click to toggle source
# File lib/codebreaker_gem.rb, line 40
def get_hint
  @hint = @hints >= 1 ? @secret_code.split('').sample : false
  @hints -= 1 if @hints > 0
  @attempts -= 1
end
get_scores() click to toggle source
# File lib/codebreaker_gem.rb, line 46
def get_scores
  scores = Hash.new
  scores[:hints] = HINTS - @hints
  scores[:attempts] = ATTEMPTS - @attempts
  scores[:secret_code] = @secret_code
  scores
end

Private Instance Methods

get_minuses(code, guess) click to toggle source
# File lib/codebreaker_gem.rb, line 57
def get_minuses(code, guess)
  minuses = []
  code.each do |item|
    next unless guess.include?(item)
      code[code.index(item)] = nil
      guess[guess.index(item)] = nil
      minuses << '-'
  end
  minuses
end