Skip to content

Instantly share code, notes, and snippets.

@tarynsauer
Created December 19, 2013 01:39
Show Gist options
  • Save tarynsauer/8032926 to your computer and use it in GitHub Desktop.
Save tarynsauer/8032926 to your computer and use it in GitHub Desktop.
class CLIGame < Game
attr_accessor :ui
def initialize(board, player_one, player_two)
super
@ui = CLIUI.new(board)
end
def start_cli_game!
begin
set_opponents
get_player_type(player_one)
get_player_type(player_two)
level = get_difficulty_level
who_goes_first
play!
rescue Interrupt
ui.early_exit_message
exit
end
end
def get_player_type(player)
type = ui.request_player_type(player.marker)
validate_type(type, player) ? set_player_type(type, player) : invalid_type(type, player)
end
def get_difficulty_level
return nil unless computer_player_selected?
level = ui.request_difficulty_level
validate_level(level) ? ui.level_assigned_message(level) : invalid_level(level)
end
def validate_type(type, player)
(type == HUMAN_PLAYER) || (type == COMPUTER_PLAYER)
end
def set_player_type(type, player)
player.player_type = type
ui.type_assigned_message(type, player.marker)
end
def invalid_type(type, player)
ui.invalid_input_message(type)
get_player_type(player)
end
def validate_level(level)
(level == HARD_LEVEL) || (level == EASY_LEVEL)
end
def invalid_level(level)
ui.invalid_input_message(level)
get_difficulty_level
end
def play!
until board.game_over?
ui.display_board
move = computer_move? ? get_computer_move : ui.request_human_move
advance_game if verify_move(move)
end
exit_game
end
def invalid_move(cell)
board.valid_cell?(cell) ? ui.taken_cell_message(cell) : ui.bad_cell_message(cell)
end
def exit_game
ui.display_board
ui.io.exit
end
end
class WebGame < Game
attr_accessor :ui
def initialize(board, player_one, player_two)
super
@ui = WebUI.new(board)
end
def set_player_types(player_one_type, player_two_type)
player_one.player_type = player_one_type
player_two.player_type = player_two_type
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment