Class: CLIGameSetup

Inherits:
GameSetup show all
Defined in:
lib/game_setup.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeCLIGameSetup

Returns a new instance of CLIGameSetup.



11
12
13
# File 'lib/game_setup.rb', line 11

def initialize
  @ui = CLIUI.new
end

Instance Attribute Details

#uiObject

Returns the value of attribute ui.



10
11
12
# File 'lib/game_setup.rb', line 10

def ui
  @ui
end

Instance Method Details

#get_boardObject



72
73
74
75
76
# File 'lib/game_setup.rb', line 72

def get_board
  rows = ui.request_board_size
  valid_board_size?(rows) ? ui.board_assigned_message(rows) : invalid_board_size(rows)
  CLIBoard.new(rows.to_i)
end

#get_difficulty_level(type) ⇒ Object



43
44
45
46
47
48
# File 'lib/game_setup.rb', line 43

def get_difficulty_level(type)
  return type if type == HUMAN_PLAYER
  level = ui.request_difficulty_level
  valid_level?(level) ? ui.level_assigned_message(level) : invalid_level(level)
  player_type_by_level(level)
end

#get_player_type(marker) ⇒ Object



36
37
38
39
40
41
# File 'lib/game_setup.rb', line 36

def get_player_type(marker)
  type = ui.request_player_type(marker)
  validated_type = valid_type?(type) ? get_difficulty_level(type) : invalid_type(type, marker)
  ui.type_assigned_message(validated_type, marker)
  validated_type
end

#get_settingsObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/game_setup.rb', line 15

def get_settings
  settings = {}
  begin
    players = set_up_players
    settings[:board] = get_board
    settings[:player_one] = players.player_one
    settings[:player_two] = players.player_two
    settings[:player_first_move] = players.player_goes_first
    settings
  rescue Interrupt
    ui.early_exit_message
    exit
  end
end

#invalid_board_size(rows) ⇒ Object



83
84
85
86
# File 'lib/game_setup.rb', line 83

def invalid_board_size(rows)
  ui.invalid_input_message(rows)
  get_board
end

#invalid_level(level) ⇒ Object



63
64
65
66
# File 'lib/game_setup.rb', line 63

def invalid_level(level)
  ui.invalid_input_message(level)
  get_difficulty_level(COMPUTER_PLAYER)
end

#invalid_type(type, marker) ⇒ Object



54
55
56
57
# File 'lib/game_setup.rb', line 54

def invalid_type(type, marker)
  ui.invalid_input_message(type)
  get_player_type(marker)
end

#player_type_by_level(level) ⇒ Object



68
69
70
# File 'lib/game_setup.rb', line 68

def player_type_by_level(level)
  level == HARD_LEVEL ? AI_PLAYER : COMPUTER_PLAYER
end

#set_up_playersObject



30
31
32
33
34
# File 'lib/game_setup.rb', line 30

def set_up_players
  player_one_type = get_player_type(MARKER_X)
  player_two_type = get_player_type(MARKER_O)
  PlayerFactory.new(player_one_type, player_two_type)
end

#valid_board_size?(input) ⇒ Boolean

Returns:

  • (Boolean)


78
79
80
81
# File 'lib/game_setup.rb', line 78

def valid_board_size?(input)
  rows = input.to_i
  rows.is_a?(Integer) && (rows > 2 && rows < 6)
end

#valid_level?(level) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/game_setup.rb', line 59

def valid_level?(level)
  (level == HARD_LEVEL) || (level == EASY_LEVEL)
end

#valid_type?(type) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/game_setup.rb', line 50

def valid_type?(type)
  (type == HUMAN_PLAYER) || (type == COMPUTER_PLAYER)
end