ruby_ttt 0.2.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
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