Sha256: e4517185385e357dc867fc9854a8bf7422d3453b24b6c6b1f89c1362993b07e8

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 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})$)/)
    
    @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 
  
    @win_status = true if res.join == '++++'
    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
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
edlvj_codebreaker-0.1.0 lib/game.rb