lib/games/mastermind/game.rb in games_bfox-0.3.0 vs lib/games/mastermind/game.rb in games_bfox-0.4.0
- old
+ new
@@ -1,66 +1,120 @@
require_relative '../shared/game'
require 'logger'
module MM
class Game < Shared::Game
- attr_accessor :code_setter, :secret_code, :guess_evaluator, :current_guess, :current_result, :won_flag
+ attr_accessor :secret_code, :current_result
- def local_setup
- self.code_setter = config.code_setter
- self.secret_code = config.secret_code
+ def one_time_setup
+ self.players = players_factory.generate_players
+ self.board = board_builder.generate_empty_board
+ end
+
+ def every_time_setup
+ self.number_of_turns_taken = 0
+ self.won_flag = false
+ self.secret_code = set_secret_code
+ self.current_result = MM::GuessEvaluatorResult.new
logger = Logger.new(STDOUT)
logger.level = Logger::DEBUG
logger.debug("The secret code is #{secret_code.join(",")}.")
- self.guess_evaluator = MM::GuessEvaluator.new
- self.current_guess = []
- self.current_result = []
+ end
+
+
+ def set_secret_code
+ is_code_guesser_human = (players[0].kind_of?(MM::HumanPlayer))
+ MM::SecretCode.generate(io_helpers, is_code_guesser_human)
+ end
+
+ def change_game_state(move)
+ self.current_result = evaluate_guess(secret_code, move)
+ change_pegs(move)
+ if !won?
+ move_forward_one_turn
+ end
+ end
+
+ def current_result_partial_match_values
+ current_result.partial_match_values
+ end
+
+ def current_result_exact_match_values
+ current_result.exact_match_values
+ end
+
+ def reset_game
+ reset_board
+ self.number_of_turns_taken = 0
self.won_flag = false
end
- def over?
- won? || over_with_no_winner?
+ def reset_board
+ self.board = generate_empty_board
end
- def over_with_no_winner?
- number_of_turns_taken >= 12
+ def generate_empty_board
+ board_builder.generate_empty_board
end
+ def over?
+ won? || no_more_turns?
+ end
+
def won?
#depends on evaluate_guess returning an array of all "X"s for perfect guess
if won_flag
return true
end
- if current_result == ("X" * number_of_cols).chars
+ if self.current_result.is_won
self.won_flag = true
true
else
false
end
end
+ def no_more_turns?
+ number_of_turns_taken >= 12
+ end
+
+ def change_pegs(guess)
+ pegs_current_row.each_with_index do |peg, index|
+ peg.change_value(guess[index])
+ end
+
+ result_pegs_current_row.each_with_index do |result_peg, index|
+ result_peg.change_value(current_result.xo_key[index])
+ end
+ end
+
def change_peg(row, col, new_value)
board.change_peg(row, col, new_value)
end
+ #below returns result object
def evaluate_guess(secret_code, guess)
- guess_evaluator.evaluate_guess(secret_code, guess)
+ MM::GuessEvaluator.evaluate_guess(secret_code, guess)
end
def pegs_current_row
board.pegs_current_row(number_of_turns_taken)
end
def result_pegs_current_row
board.result_pegs_current_row(number_of_turns_taken)
end
+ def number_of_rows
+ board.number_of_rows
+ end
+
def number_of_cols
board.number_of_cols
end
- def set_secret_code
- config.set_secret_code
+ def get_player_choice(current_player_name)
+ io_helpers.get_player_choice(current_player_name)
end
end
end