ruby_ttt 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/lib/game_setup.rb +29 -36
  2. data/lib/ruby_ttt.rb +35 -7
  3. metadata +2 -2
@@ -4,24 +4,7 @@ AI_PLAYER = 'hard computer'
4
4
  HARD_LEVEL = 'hard'
5
5
  EASY_LEVEL = 'easy'
6
6
 
7
- class GameSetup
8
- def initialize; end
9
-
10
- def get_settings
11
- settings = {}
12
- players = set_up_players
13
- settings[:board] = get_board
14
- settings[:player_one] = players.player_one
15
- settings[:player_two] = players.player_two
16
- settings[:player_goes_first] = players.player_goes_first
17
- settings
18
- end
19
-
20
- def set_up_players; end
21
-
22
- def get_board; end
23
-
24
- end
7
+ class GameSetup; end
25
8
 
26
9
  class CLIGameSetup < GameSetup
27
10
  attr_accessor :ui
@@ -29,6 +12,21 @@ class CLIGameSetup < GameSetup
29
12
  @ui = CLIUI.new
30
13
  end
31
14
 
15
+ def get_settings
16
+ settings = {}
17
+ begin
18
+ players = set_up_players
19
+ settings[:board] = get_board
20
+ settings[:player_one] = players.player_one
21
+ settings[:player_two] = players.player_two
22
+ settings[:player_first_move] = players.player_goes_first
23
+ settings
24
+ rescue Interrupt
25
+ ui.early_exit_message
26
+ exit
27
+ end
28
+ end
29
+
32
30
  def set_up_players
33
31
  player_one_type = get_player_type(MARKER_X)
34
32
  player_two_type = get_player_type(MARKER_O)
@@ -90,24 +88,19 @@ class CLIGameSetup < GameSetup
90
88
  end
91
89
 
92
90
  class WebGameSetup < GameSetup
91
+ attr_accessor :ui
92
+ def initialize
93
+ @ui = WebUI.new
94
+ end
93
95
 
94
- # def set_up_players(player_one_type, player_two_type)
95
- # PlayerFactory.new(player_one_type, player_two_type)
96
- # end
97
-
98
- # def get_board
99
- # board = Board.new(session[:board_size])
100
- # board.all_cells = session[:current_board]
101
- # end
102
-
103
- # def get_settings
104
- # settings = {}
105
- # players = set_up_players
106
- # settings[:board] = get_board
107
- # settings[:player_one] = players.player_one
108
- # settings[:player_two] = players.player_two
109
- # settings[:player_goes_first] = players.player_goes_first
110
- # settings
111
- # end
96
+ def set_up_players(player_one_type, player_two_type)
97
+ PlayerFactory.new(player_one_type, player_two_type)
98
+ end
99
+
100
+ def get_board(board_size, current_board)
101
+ board = WebBoard.new(board_size)
102
+ board.all_cells = current_board
103
+ board
104
+ end
112
105
 
113
106
  end
@@ -1,8 +1,8 @@
1
1
  require 'ai'
2
2
  require 'board'
3
+ require 'player_factory'
3
4
  require 'game_setup'
4
5
  require 'player'
5
- require 'player_factory'
6
6
  require 'ui'
7
7
 
8
8
  class Game
@@ -16,7 +16,7 @@ class Game
16
16
  end
17
17
 
18
18
  def advance_game
19
- game_status_check(current_player.marker)
19
+ game_status_check(current_player.opponent.marker)
20
20
  ui.next_move_message(current_player.marker) unless board.game_over?
21
21
  end
22
22
 
@@ -51,7 +51,7 @@ class Game
51
51
  end
52
52
 
53
53
  class CLIGame < Game
54
- attr_accessor :board, :player_one, :player_two, :ui
54
+ attr_accessor :board, :player_one, :player_two, :ui, :player_first_move
55
55
  def initialize(settings)
56
56
  super
57
57
  @ui = CLIUI.new
@@ -67,16 +67,22 @@ class CLIGame < Game
67
67
  end
68
68
 
69
69
  def play!
70
+ ui.first_move_message
70
71
  until board.game_over?
71
72
  board.display_board
72
- move = get_next_move
73
- verify_move(move) ? advance_game : invalid_move(move)
73
+ get_next_move
74
74
  end
75
75
  exit_game
76
76
  end
77
77
 
78
78
  def get_next_move
79
- current_player.is_a?(HumanPlayer) ? ui.request_human_move : current_player.make_move(board)
79
+ if current_player.is_a?(HumanPlayer)
80
+ move = ui.request_human_move
81
+ verify_move(move) ? advance_game : invalid_move(move)
82
+ else
83
+ current_player.make_move(board)
84
+ advance_game
85
+ end
80
86
  end
81
87
 
82
88
  def invalid_move(cell)
@@ -90,4 +96,26 @@ class CLIGame < Game
90
96
 
91
97
  end
92
98
 
93
- class WebGame < Game; end
99
+ class WebGame < Game
100
+ attr_accessor :board, :player_one, :player_two, :ui, :player_first_move
101
+ def initialize(settings)
102
+ super
103
+ @ui = WebUI.new
104
+ end
105
+
106
+ def get_message
107
+ return ui.first_move_message(current_player.marker) if board.empty?
108
+ if board.winner?(current_player.opponent.marker)
109
+ ui.winning_game_message(current_player.opponent.marker)
110
+ elsif !board.moves_remaining?
111
+ ui.tie_game_message
112
+ else
113
+ ui.next_move_message(game.current_player.marker)
114
+ end
115
+ end
116
+
117
+ def computer_player?(type_one, type_two)
118
+ ((type_one.downcase) == COMPUTER_PLAYER) || ((type_two.downcase) == COMPUTER_PLAYER)
119
+ end
120
+
121
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_ttt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-23 00:00:00.000000000 Z
12
+ date: 2013-12-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec