class Mastermind::GameRound
Attributes
command[RW]
guesses[RW]
instream[RW]
interact[RW]
max_guesses[RW]
outstream[RW]
players[RW]
round_over[RW]
secret[RW]
start_time[RW]
valid_colors[RW]
Public Class Methods
new(instream, outstream, interact, players)
click to toggle source
# File lib/mastermind/game_round.rb, line 19 def initialize(instream, outstream, interact, players) @instream = instream @outstream = outstream @interact = interact @valid_colors = Mastermind::Processor.colors(6) @max_guesses = 12 @command = "" @guesses = [] @round_over = false @start_time = Time.now @players = players end
Public Instance Methods
color_string()
click to toggle source
# File lib/mastermind/game_round.rb, line 103 def color_string Mastermind.color_option_string(6) end
correct_color(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 160 def correct_color(player) Mastermind::Processor.num_correct_colors(player.command, player.secret) end
correct_guess?(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 127 def correct_guess?(player) player.command.chars == player.secret end
correct_pos(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 156 def correct_pos(player) Mastermind::Processor.num_correct_pos(player.command, player.secret) end
game_round_over?()
click to toggle source
# File lib/mastermind/game_round.rb, line 116 def game_round_over? round_over end
get_secret(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 75 def get_secret(player) outstream.puts interact.print_player_secret_intro(player.name) code = "yyyy" until valid_guess?(code, player.secret, valid_colors) outstream.print interact.secret_guess_prompt code = instream.noecho(&:gets).strip.upcase outstream.puts end code.chars end
guess(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 144 def guess(player) player.guesses << player.command if correct_guess?(player) then win!(player) elsif !guesses_remaining?(player) then out_of_guesses(player) else outstream.puts interact.print_guess_stats(num_guesses(player), correct_pos(player), correct_color(player), player.command, max_guesses, player) end end
guesses_remaining?(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 131 def guesses_remaining?(player) num_guesses(player) < max_guesses end
num_guesses(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 152 def num_guesses(player) player.guesses.length end
out_of_guesses(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 139 def out_of_guesses(player) outstream.puts interact.print_out_of_guesses(num_guesses(player), correct_pos(player), correct_color(player), player.command, max_guesses, player) player_round_over!(player) end
play()
click to toggle source
# File lib/mastermind/game_round.rb, line 32 def play player_reset outstream.puts interact.print_round_intro(color_string) secret_gen set_turn_pos outstream.puts interact.multi_player_div if !single_player? until round_over? || game_round_over? player_turn end @round_over = true end
player_reset()
click to toggle source
# File lib/mastermind/game_round.rb, line 44 def player_reset @players.each do |player| player.secret = ["X", "X", "X", "X"] player.round_over = false player.guesses = [] player.start_time = Time.now player.completion_time = nil player.turn_pos = nil end end
player_round_over!(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 107 def player_round_over!(player) player.round_over = true outstream.puts interact.print_round_over if round_over? end
player_turn()
click to toggle source
# File lib/mastermind/game_round.rb, line 55 def player_turn @players.each do |player| if player.round_over == false && !game_round_over? outstream.print interact.guess_prompt(player) player.command = instream.gets.strip.upcase process_command(player) end end end
process_command(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 91 def process_command(player) case when quit?(player) then quit_confirm(player) when !valid_guess?(player.command, player.secret, valid_colors) then outstream.puts interact.print_invalid_guess(player) when valid_guess?(player.command, player.secret, valid_colors) then guess(player) end end
quit?(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 135 def quit?(player) player.command == "Q" || player.command == "QUIT" end
quit_confirm(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 168 def quit_confirm(player) outstream.puts interact.print_are_you_sure outstream.print interact.command_prompt confirmation = instream.gets.strip.upcase case confirmation when "Y", "YES" self.round_over = true player.command = "Q" else player.command = "" end end
round_over?()
click to toggle source
# File lib/mastermind/game_round.rb, line 112 def round_over? !@players.any? {|player| player.round_over == false} end
secret_gen()
click to toggle source
# File lib/mastermind/game_round.rb, line 65 def secret_gen if single_player? then @players.first.secret = Mastermind::Processor.secret(4, 6) else @players.shuffle outstream.puts interact.print_get_secret @players.last.secret = get_secret(@players.first) @players.first.secret = get_secret(@players.last) end end
set_turn_pos()
click to toggle source
# File lib/mastermind/game_round.rb, line 86 def set_turn_pos @players[0].turn_pos = 0 @players[1].turn_pos = 1 if @players[1] end
single_player?()
click to toggle source
# File lib/mastermind/game_round.rb, line 99 def single_player? @players.length == 1 end
valid_guess?(command, secret, valid_colors)
click to toggle source
# File lib/mastermind/game_round.rb, line 164 def valid_guess?(command, secret, valid_colors) Mastermind::Processor.validate(command, secret, valid_colors) end
win!(player)
click to toggle source
# File lib/mastermind/game_round.rb, line 120 def win!(player) time = Time.now - player.start_time player.completion_time = time outstream.puts interact.print_win(num_guesses(player), time.round, player.secret, player) player_round_over!(player) end