Sha256: 90f97ea9523f8ef5358acf4f6ee85aed263fce641054a83465d26fcfec280ace

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

require 'yaml'

module Codebreaker
  class Game
     
  HINT = 1
  ATTEMPS = 10
  
  PROPER = '+'
  WRONG_POSITION = '-'
    
  def initialize
    @secret_code = Array.new(4) { rand(1..6) }.join
    @hint = HINT
    @attempts = ATTEMPS
    @win_status = false
  end
    
  def match_guess(code)
    return "Your code is not valid" unless code.match(/(^([1-6]{4})$)/)
    
    @win_status = true if @secret_code == code
    @attempts -= 1
    secret = @secret_code.chars.map(&:to_i)
    
    res = []
    code.chars.map(&:to_i).each_with_index do |number, index|
      if number == secret[index]
        secret[index] = nil
        res << PROPER
      elsif secret.include? number
        secret[secret.find_index(number)] = nil
        res << WRONG_POSITION
      end  
    end 
   
    res.join
  end
    
  def loose?
    @attempts == 0  
  end  
  
  def win?
    @win_status
  end  

  def get_hint
    @hint -= 1
    @hint >= 0 ? @secret_code[rand(4)] : "Not Available"
  end 
  
  def save_stat( username )
    File.open('./stat.yml','a+') do |f|
      f.write([user: username, attempts: @attempts, date: Time.now].to_yaml)
    end
  end
  
  def stat
    YAML.load(File.read('./stat.yml'))
  end  
  
  end
end    

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
edlvj_codebreaker-0.3.0 lib/edlvj_codebreaker.rb