class MastermindSname::Game

Attributes

game_colours[RW]
guess[RW]
player[RW]
start_time[RW]

Public Class Methods

new(player) click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 8
def initialize(player)
  @guesses = []
  @player = player
  @game_colours = GameColour.new(@player).get_colours
  puts @game_colours.join("")
  create_records_file unless File.file?("game_records.json")
  @message = Message.new
end

Public Instance Methods

collect_user_guess() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 60
def collect_user_guess
  puts "#{10 - @guesses.length} guess(es) left" unless @guesses.empty?
  @guess = get_input
  loop do
    @game_logic = GameLogic.new(@guess, @game_colours)
    valid = @game_logic.valid_length? || @game_logic.input_command?
    Command.new.action(@guess, @game_colours, @guesses)
    puts @game_logic.length_feedback unless valid
    @guess = get_input unless valid
    break if valid
  end
end
correct?() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 33
def correct?
  @guess == @game_colours.join("")
end
create_records_file() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 37
def create_records_file
  system "echo '{\"beginner\":[],\"intermediate\":[],\"advanced\":[]}' > g"\
  "ame_records.json"
end
game_end() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 48
def game_end
  if correct?
    update_player
    record = Record.new(@player)
    record.set_new
    @message.congratulations_screen @player
    record.display_top_ten
  else
    @message.game_over
  end
end
play() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 17
def play
  @start_time = Time.now
  puts @message.start(@player, @game_colours)
  start_guessing
  play_again
end
play_again() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 73
def play_again
  @message.play_again
  choice = get_input
  if choice == "y"
    Game.new(@player).play
  else
    exit
  end
end
record_guess() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 83
def record_guess
  unless @guess == "h"
    @guesses << @guess
    correct?
    @game_logic.get_feedback
  end
end
start_guessing() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 24
def start_guessing
  loop do
    collect_user_guess
    puts record_guess
    break if @guesses.length > 9 || correct?
  end
  puts game_end
end
update_player() click to toggle source
# File lib/mastermind_sname/sname/game.rb, line 42
def update_player
  @player[:guesses_count] = @guesses.length
  @player[:game_colours] = @game_colours
  @player[:time] = (Time.now - @start_time).round.time_format
end