tttazures 0.0.21 → 0.0.22
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/game_controller.rb +2 -2
- data/spec/board_3x3_spec.rb +0 -1
- data/spec/board_3x3x3_spec.rb +0 -1
- data/spec/board_4x4_spec.rb +0 -1
- data/spec/board_5x5_spec.rb +0 -1
- data/spec/computer_ai_3x3_board_spec.rb +0 -2
- data/spec/computer_ai_spec.rb +0 -2
- data/spec/human_player_spec.rb +1 -6
- data/spec/long_tests.rb +0 -2
- data/spec/spec_helper.rb +8 -0
- metadata +1 -11
- data/lib/board_printer_three_dim.rb +0 -40
- data/lib/board_printer_two_dim.rb +0 -32
- data/lib/console_ui.rb +0 -107
- data/lib/driver.rb +0 -3
- data/spec/configurer_spec.rb +0 -140
- data/spec/console_ui_spec.rb +0 -115
- data/spec/game_controller_spec.rb +0 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef94f65834ab731e70a97d0db473d72fa5b90b1f
|
4
|
+
data.tar.gz: 19c17db4cae887e16a24091c6b083bc85b79bf12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c124f2556d21796c3065fce36a59abeb09507b2f217a722ae48562281d45374e36f9bd435217141a3b81ba96ecab4163ee23302cc2cc3e218089b62cc345a3b0
|
7
|
+
data.tar.gz: da26f3a9967bf5188121a0d9475ab545e5cc9e7e9ceebdec65084477b4761a1d24d000c77c94c50274d0668d1b7860df8333f85c5cb281dccfec707ddf3e5972
|
data/lib/game_controller.rb
CHANGED
@@ -5,7 +5,7 @@ require_relative './two_dimensional_board'
|
|
5
5
|
require_relative './three_dimensional_board'
|
6
6
|
require_relative './board_printer_three_dim'
|
7
7
|
require_relative './board_printer_two_dim'
|
8
|
-
require_relative "./
|
8
|
+
require_relative "./factory"
|
9
9
|
|
10
10
|
class GameController
|
11
11
|
|
@@ -13,7 +13,7 @@ class GameController
|
|
13
13
|
|
14
14
|
def initialize
|
15
15
|
@console = ConsoleUI.new
|
16
|
-
@config =
|
16
|
+
@config = Factory.new(@console)
|
17
17
|
end
|
18
18
|
|
19
19
|
def run
|
data/spec/board_3x3_spec.rb
CHANGED
data/spec/board_3x3x3_spec.rb
CHANGED
data/spec/board_4x4_spec.rb
CHANGED
data/spec/board_5x5_spec.rb
CHANGED
data/spec/computer_ai_spec.rb
CHANGED
data/spec/human_player_spec.rb
CHANGED
@@ -1,18 +1,13 @@
|
|
1
1
|
require_relative "spec_helper"
|
2
|
-
require_relative "../lib/ttt/human_player"
|
3
|
-
require_relative "../lib/ttt/console_ui"
|
4
|
-
require_relative "../lib/ttt/two_dimensional_board"
|
5
2
|
|
6
3
|
describe HumanPlayer do
|
7
4
|
|
8
|
-
let(:
|
9
|
-
let(:human_player){hp = HumanPlayer.new(:x,console)}
|
5
|
+
let(:human_player){hp = HumanPlayer.new(:x)}
|
10
6
|
let(:board){board = TwoDimensionalBoard.new(3)}
|
11
7
|
|
12
8
|
describe '#make_move' do
|
13
9
|
|
14
10
|
it "makes valid move" do
|
15
|
-
console.stub(:query_user_for_choice){1}
|
16
11
|
board.stub(:record_choice){true}
|
17
12
|
human_player.make_move(board)
|
18
13
|
end
|
data/spec/long_tests.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
require_relative "../lib/two_dimensional_board"
|
2
|
+
require_relative "../lib/three_dimensional_board"
|
3
|
+
require_relative "../lib/board"
|
4
|
+
require_relative "../lib/human_player"
|
5
|
+
require_relative "../lib/computer_ai"
|
6
|
+
require_relative "../lib/factory"
|
7
|
+
|
8
|
+
|
1
9
|
require 'simplecov'
|
2
10
|
SimpleCov.start do
|
3
11
|
add_filter '/spec/'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tttazures
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.22
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Zures
|
@@ -17,11 +17,7 @@ extensions: []
|
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
19
|
- lib/board.rb
|
20
|
-
- lib/board_printer_three_dim.rb
|
21
|
-
- lib/board_printer_two_dim.rb
|
22
20
|
- lib/computer_ai.rb
|
23
|
-
- lib/console_ui.rb
|
24
|
-
- lib/driver.rb
|
25
21
|
- lib/factory.rb
|
26
22
|
- lib/game_controller.rb
|
27
23
|
- lib/human_player.rb
|
@@ -33,8 +29,6 @@ files:
|
|
33
29
|
- spec/board_5x5_spec.rb
|
34
30
|
- spec/computer_ai_3x3_board_spec.rb
|
35
31
|
- spec/computer_ai_spec.rb
|
36
|
-
- spec/configurer_spec.rb
|
37
|
-
- spec/console_ui_spec.rb
|
38
32
|
- spec/coverage/assets/0.7.1/application.css
|
39
33
|
- spec/coverage/assets/0.7.1/application.js
|
40
34
|
- spec/coverage/assets/0.7.1/fancybox/blank.gif
|
@@ -76,7 +70,6 @@ files:
|
|
76
70
|
- spec/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png
|
77
71
|
- spec/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png
|
78
72
|
- spec/coverage/index.html
|
79
|
-
- spec/game_controller_spec.rb
|
80
73
|
- spec/human_player_spec.rb
|
81
74
|
- spec/long_tests.rb
|
82
75
|
- spec/spec_helper.rb
|
@@ -111,8 +104,6 @@ test_files:
|
|
111
104
|
- spec/board_5x5_spec.rb
|
112
105
|
- spec/computer_ai_3x3_board_spec.rb
|
113
106
|
- spec/computer_ai_spec.rb
|
114
|
-
- spec/configurer_spec.rb
|
115
|
-
- spec/console_ui_spec.rb
|
116
107
|
- spec/coverage/assets/0.7.1/application.css
|
117
108
|
- spec/coverage/assets/0.7.1/application.js
|
118
109
|
- spec/coverage/assets/0.7.1/fancybox/blank.gif
|
@@ -154,7 +145,6 @@ test_files:
|
|
154
145
|
- spec/coverage/assets/0.7.1/smoothness/images/ui-icons_888888_256x240.png
|
155
146
|
- spec/coverage/assets/0.7.1/smoothness/images/ui-icons_cd0a0a_256x240.png
|
156
147
|
- spec/coverage/index.html
|
157
|
-
- spec/game_controller_spec.rb
|
158
148
|
- spec/human_player_spec.rb
|
159
149
|
- spec/long_tests.rb
|
160
150
|
- spec/spec_helper.rb
|
@@ -1,40 +0,0 @@
|
|
1
|
-
class BoardPrinterThreeDim
|
2
|
-
|
3
|
-
def initialize output= STDOUT
|
4
|
-
@output = output
|
5
|
-
end
|
6
|
-
|
7
|
-
def print print_results
|
8
|
-
board = print_results[0]
|
9
|
-
row_length = print_results[1].to_i
|
10
|
-
|
11
|
-
start_index = 0
|
12
|
-
row_length.times do
|
13
|
-
index = start_index
|
14
|
-
row_length.times do
|
15
|
-
row_length.times do
|
16
|
-
symbol = get_element_symbol board, index
|
17
|
-
if symbol.to_s.size == 1
|
18
|
-
@output.print " #{symbol} "
|
19
|
-
else
|
20
|
-
@output.print " #{symbol} "
|
21
|
-
end
|
22
|
-
index += 1
|
23
|
-
end
|
24
|
-
@output.print " "
|
25
|
-
index += 6
|
26
|
-
end
|
27
|
-
@output.puts
|
28
|
-
start_index += row_length
|
29
|
-
end
|
30
|
-
@output.puts
|
31
|
-
end
|
32
|
-
|
33
|
-
def get_element_symbol board_array, index
|
34
|
-
case board_array[index]
|
35
|
-
when :x then symbol = "X"
|
36
|
-
when :o then symbol = "O"
|
37
|
-
else symbol = index end
|
38
|
-
symbol
|
39
|
-
end
|
40
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
class BoardPrinterTwoDim
|
2
|
-
|
3
|
-
def initialize output= STDOUT
|
4
|
-
@output = output
|
5
|
-
end
|
6
|
-
|
7
|
-
def print print_results
|
8
|
-
board = print_results[0]
|
9
|
-
row_length = print_results[1]
|
10
|
-
|
11
|
-
board.to_enum.with_index.each do |value, index|
|
12
|
-
symbol = get_element_symbol board, index
|
13
|
-
|
14
|
-
if symbol.to_s.size == 1
|
15
|
-
@output.print " #{symbol}"
|
16
|
-
else
|
17
|
-
@output.print " #{symbol}"
|
18
|
-
end
|
19
|
-
|
20
|
-
@output.puts "" if (index+1) % row_length == 0 && (index+1) != (row_length * row_length)
|
21
|
-
end
|
22
|
-
@output.puts "\n \n"
|
23
|
-
end
|
24
|
-
|
25
|
-
def get_element_symbol board_array, index
|
26
|
-
case board_array[index]
|
27
|
-
when :x then symbol = "X"
|
28
|
-
when :o then symbol = "O"
|
29
|
-
else symbol = index end
|
30
|
-
symbol
|
31
|
-
end
|
32
|
-
end
|
data/lib/console_ui.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
class ConsoleUI
|
2
|
-
|
3
|
-
def initialize output= STDOUT
|
4
|
-
@output = output
|
5
|
-
end
|
6
|
-
|
7
|
-
def query_user_for_choice user
|
8
|
-
@output.puts "User #{user}: Choose!"
|
9
|
-
receive_user_choice.to_i
|
10
|
-
end
|
11
|
-
|
12
|
-
def query_user_for_new_game
|
13
|
-
print_new_game_prompt
|
14
|
-
choice = receive_user_choice
|
15
|
-
return choice == "y" ? true : false
|
16
|
-
end
|
17
|
-
|
18
|
-
def receive_user_choice
|
19
|
-
begin
|
20
|
-
choice = gets.chomp.downcase
|
21
|
-
rescue Interrupt => e
|
22
|
-
@output.puts e
|
23
|
-
end
|
24
|
-
say_goodbye if choice == 'q'
|
25
|
-
return choice
|
26
|
-
end
|
27
|
-
|
28
|
-
def print_player_move move, player
|
29
|
-
puts "Player #{player.player} chose #{move}"
|
30
|
-
end
|
31
|
-
|
32
|
-
def respond_to_choice choice_accepted, choice
|
33
|
-
if choice_accepted then @output.puts "You Chose: #{choice}"
|
34
|
-
else print_user_input_error end
|
35
|
-
end
|
36
|
-
|
37
|
-
def query_user_for_board_type
|
38
|
-
print_board_options
|
39
|
-
receive_user_choice.to_i
|
40
|
-
end
|
41
|
-
|
42
|
-
def query_user_for_ai_difficulty symbol
|
43
|
-
print_ai_difficulty_options(symbol)
|
44
|
-
receive_user_choice.to_i
|
45
|
-
end
|
46
|
-
|
47
|
-
def query_user_for_game_type
|
48
|
-
valid_choice = false
|
49
|
-
while valid_choice == false
|
50
|
-
print_game_options
|
51
|
-
choice = receive_user_choice.to_i
|
52
|
-
if choice >= 0 && choice < 4 then valid_choice = true
|
53
|
-
else print_user_input_error end
|
54
|
-
end
|
55
|
-
choice
|
56
|
-
end
|
57
|
-
|
58
|
-
def print_board_options
|
59
|
-
@output.puts "What type of board size would you like to use?"
|
60
|
-
@output.puts " Choose 0 for 3x3 board"
|
61
|
-
@output.puts " Choose 1 for 4x4 board"
|
62
|
-
@output.puts " Choose 2 for 5x5 board"
|
63
|
-
@output.puts " Choose 3 for 3x3x3 board"
|
64
|
-
end
|
65
|
-
|
66
|
-
def print_ai_difficulty_options player
|
67
|
-
@output.puts "How difficult will Player #{player} AI be?"
|
68
|
-
@output.puts " Choose 0: AI is easy to beat"
|
69
|
-
@output.puts " Choose 1: AI is medium difficulty"
|
70
|
-
@output.puts " Choose 2: AI is unbeatable (except for 3x3x3)"
|
71
|
-
end
|
72
|
-
|
73
|
-
def print_game_options
|
74
|
-
@output.puts "Choose Game Type"
|
75
|
-
@output.puts " Choose 0 for Human v. Human"
|
76
|
-
@output.puts " Choose 1 for Human v. Computer, Human goes first"
|
77
|
-
@output.puts " Choose 2 for Human v. Computer, Computer goes first"
|
78
|
-
@output.puts " Choose 3 for Computer v. Computer"
|
79
|
-
end
|
80
|
-
|
81
|
-
def present_game_result game_result
|
82
|
-
if game_result == :tie then @output.puts "Game Over: Tie"
|
83
|
-
else @output.puts "Game Over. Player #{game_result} Wins" end
|
84
|
-
end
|
85
|
-
|
86
|
-
def greet_user
|
87
|
-
@output.puts "---Welcome to Tic Tac Toe---"
|
88
|
-
@output.puts "Press 'q' at any time to exit game"
|
89
|
-
end
|
90
|
-
|
91
|
-
def say_goodbye
|
92
|
-
@output.puts "Thanks for playing!"
|
93
|
-
exit
|
94
|
-
end
|
95
|
-
|
96
|
-
def print_user_input_error
|
97
|
-
@output.puts "Whoops! That choice wasn't valid, try again:"
|
98
|
-
end
|
99
|
-
|
100
|
-
def print_new_game_prompt
|
101
|
-
@output.puts "Would you like to start another game? Press 'Y' if yes. Press Any Other Key to Exit"
|
102
|
-
end
|
103
|
-
|
104
|
-
def print printString
|
105
|
-
@output.puts printString;
|
106
|
-
end
|
107
|
-
end
|
data/lib/driver.rb
DELETED
data/spec/configurer_spec.rb
DELETED
@@ -1,140 +0,0 @@
|
|
1
|
-
require_relative "spec_helper"
|
2
|
-
require_relative "../lib/ttt/config"
|
3
|
-
require_relative "../lib/ttt/human_player"
|
4
|
-
require_relative "../lib/ttt/computer_ai"
|
5
|
-
require_relative "../lib/ttt/console_ui"
|
6
|
-
require_relative "../lib/ttt/board_printer_two_dim"
|
7
|
-
require_relative "../lib/ttt/board_printer_three_dim"
|
8
|
-
|
9
|
-
describe Configurer do
|
10
|
-
|
11
|
-
|
12
|
-
let(:console){con = ConsoleUI.new}
|
13
|
-
let(:config){c = Configurer.new console}
|
14
|
-
|
15
|
-
describe '#get_players' do
|
16
|
-
|
17
|
-
it "return two human objects if 0 chosen" do
|
18
|
-
console.stub(:query_user_for_game_type){0}
|
19
|
-
result = config.get_players
|
20
|
-
result[:player1].should be_an_instance_of HumanPlayer
|
21
|
-
result[:player2].should be_an_instance_of HumanPlayer
|
22
|
-
end
|
23
|
-
|
24
|
-
it "returns human as p1, computer as p2, if 1 is chosen" do
|
25
|
-
console.stub(:query_user_for_game_type){1}
|
26
|
-
config.stub(:get_ai_choice_from_user){2}
|
27
|
-
result = config.get_players
|
28
|
-
result[:player1].should be_an_instance_of HumanPlayer
|
29
|
-
result[:player2].should be_an_instance_of ComputerAI
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns computer as p1, human as p2, if 2 is chosen" do
|
33
|
-
console.stub(:query_user_for_game_type){2}
|
34
|
-
config.stub(:get_ai_choice_from_user){2}
|
35
|
-
result = config.get_players
|
36
|
-
result[:player1].should be_an_instance_of ComputerAI
|
37
|
-
result[:player2].should be_an_instance_of HumanPlayer
|
38
|
-
end
|
39
|
-
|
40
|
-
it "returns two computer players if 3 is chosen" do
|
41
|
-
console.stub(:query_user_for_game_type){3}
|
42
|
-
config.stub(:get_ai_choice_from_user){2}
|
43
|
-
config.stub(:get_ai_choice_from_user){2}
|
44
|
-
result = config.get_players
|
45
|
-
result[:player1].should be_an_instance_of ComputerAI
|
46
|
-
result[:player2].should be_an_instance_of ComputerAI
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#set_ai_difficulty' do
|
52
|
-
|
53
|
-
it "returns easy ai if 0 is chosen" do
|
54
|
-
config.stub(:get_ai_choice_from_user){0}
|
55
|
-
result = config.set_ai_difficulty(:x)
|
56
|
-
result.threshold.should == 10
|
57
|
-
end
|
58
|
-
|
59
|
-
it "returns medium ai if 1 is chosen" do
|
60
|
-
config.stub(:get_ai_choice_from_user){1}
|
61
|
-
result = config.set_ai_difficulty(:x)
|
62
|
-
result.threshold.should == 50
|
63
|
-
end
|
64
|
-
|
65
|
-
it "returns unbeatable ai if 2 is chosen" do
|
66
|
-
config.stub(:get_ai_choice_from_user){2}
|
67
|
-
result = config.set_ai_difficulty(:x)
|
68
|
-
result.threshold.should == 100
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#get_board' do
|
73
|
-
|
74
|
-
it "gets a 3x3 board when input is 0" do
|
75
|
-
config.stub(:get_board_choice){0}
|
76
|
-
result = config.get_board
|
77
|
-
result.should be_an_instance_of TwoDimensionalBoard
|
78
|
-
result.row_length.should == 3
|
79
|
-
end
|
80
|
-
|
81
|
-
it "gets a 4x4 board when input is 1" do
|
82
|
-
config.stub(:get_board_choice){1}
|
83
|
-
result = config.get_board
|
84
|
-
result.should be_an_instance_of TwoDimensionalBoard
|
85
|
-
result.row_length.should == 4
|
86
|
-
end
|
87
|
-
|
88
|
-
it "gets a 5x5 board when input is 2" do
|
89
|
-
config.stub(:get_board_choice){2}
|
90
|
-
result = config.get_board
|
91
|
-
result.should be_an_instance_of TwoDimensionalBoard
|
92
|
-
result.row_length.should == 5
|
93
|
-
end
|
94
|
-
|
95
|
-
it "gets a 3x3x3 board when input is 3" do
|
96
|
-
config.stub(:get_board_choice){3}
|
97
|
-
result = config.get_board
|
98
|
-
result.should be_an_instance_of ThreeDimensionalBoard
|
99
|
-
result.row_length.should == 3
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe '#get_board_choice' do
|
104
|
-
|
105
|
-
it "returns valid board choice" do
|
106
|
-
console.stub(:query_user_for_board_type){1}
|
107
|
-
config.get_board_choice.should == 1
|
108
|
-
|
109
|
-
console.stub(:query_user_for_board_type){5}
|
110
|
-
console.stub(:query_user_for_board_type){2}
|
111
|
-
config.get_board_choice.should == 2
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe '#get_ai_choice_from_user' do
|
116
|
-
it "returns valid ai choice" do
|
117
|
-
console.stub(:query_user_for_ai_difficulty){1}
|
118
|
-
config.get_ai_choice_from_user(:x).should == 1
|
119
|
-
|
120
|
-
console.stub(:query_user_for_ai_difficulty){5}
|
121
|
-
console.stub(:query_user_for_ai_difficulty){2}
|
122
|
-
config.get_ai_choice_from_user(:x).should == 2
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
describe '#get_board_printer' do
|
127
|
-
it "returns 2d board printer for 2d board" do
|
128
|
-
board = TwoDimensionalBoard.new(3)
|
129
|
-
result = config.get_board_printer(board)
|
130
|
-
result.should be_an_instance_of BoardPrinterTwoDim
|
131
|
-
end
|
132
|
-
|
133
|
-
it "returns 3d board printer for 3d board" do
|
134
|
-
board = ThreeDimensionalBoard.new(3)
|
135
|
-
result = config.get_board_printer(board)
|
136
|
-
result.should be_an_instance_of BoardPrinterThreeDim
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
data/spec/console_ui_spec.rb
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
require_relative "spec_helper"
|
2
|
-
require './lib/ttt/console_ui'
|
3
|
-
|
4
|
-
describe ConsoleUI do
|
5
|
-
|
6
|
-
let(:io) {io = StringIO.new}
|
7
|
-
let(:console) {c = ConsoleUI.new io}
|
8
|
-
|
9
|
-
it "creates new ui console" do
|
10
|
-
console.should be_an_instance_of ConsoleUI
|
11
|
-
end
|
12
|
-
|
13
|
-
describe '#receive_user_choice' do
|
14
|
-
|
15
|
-
it "receives user choice and sanitizes input" do
|
16
|
-
console.stub(:gets){"1"}
|
17
|
-
console.receive_user_choice.should == "1"
|
18
|
-
|
19
|
-
console.stub(:gets){"Y"}
|
20
|
-
console.receive_user_choice.should == "y"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#query_user_for_choice' do
|
25
|
-
player1 = 1
|
26
|
-
player2 = -1
|
27
|
-
|
28
|
-
it "receives input from user once at a time" do
|
29
|
-
player = 1
|
30
|
-
console.stub(:receive_user_choice) {1}
|
31
|
-
console.query_user_for_choice(player).should eql(1)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "queries for user input - player1" do
|
35
|
-
player = 1
|
36
|
-
console.stub(:receive_user_choice) {1}
|
37
|
-
console.query_user_for_choice(player)
|
38
|
-
io.string.should match "User 1: Choose"
|
39
|
-
end
|
40
|
-
|
41
|
-
it "queries for user input - player2" do
|
42
|
-
|
43
|
-
player = -1
|
44
|
-
console.stub(:receive_user_choice) {1}
|
45
|
-
console.query_user_for_choice(player)
|
46
|
-
io.string.should match "User -1: Choose"
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '#query_user_for_choice' do
|
51
|
-
|
52
|
-
it "asks user for new game" do
|
53
|
-
console.stub(:receive_user_choice) {1}
|
54
|
-
console.query_user_for_new_game
|
55
|
-
io.string.should match "Would you like to start another game?"
|
56
|
-
end
|
57
|
-
|
58
|
-
it "returns true if user inputs 'y'" do
|
59
|
-
console.stub(:receive_user_choice) {"y"}
|
60
|
-
console.query_user_for_new_game.should == true
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe '#respond_to_choice' do
|
65
|
-
|
66
|
-
it "tells user that invalid choice is invalid" do
|
67
|
-
choice = 1
|
68
|
-
console.respond_to_choice(false, choice)
|
69
|
-
io.string.should match "Whoops! That choice wasn't valid"
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
it "tells user if choice was valid (choice = 1)" do
|
74
|
-
choice = 1
|
75
|
-
console.respond_to_choice(true, choice)
|
76
|
-
io.string.should match "You Chose: 1"
|
77
|
-
end
|
78
|
-
|
79
|
-
it "tells user if choice was valid (choice = 9)" do
|
80
|
-
choice = 9
|
81
|
-
console.respond_to_choice(true, choice)
|
82
|
-
io.string.should match "You Chose: 9"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
describe '#present_game_result' do
|
87
|
-
|
88
|
-
it "presents tie text to user if result is tie" do
|
89
|
-
console.present_game_result(:tie)
|
90
|
-
io.string.should match "Game Over: Tie"
|
91
|
-
end
|
92
|
-
|
93
|
-
it "sends player 1 win to console" do
|
94
|
-
player = 1
|
95
|
-
console.present_game_result(:x)
|
96
|
-
io.string.should match "Player x Wins"
|
97
|
-
end
|
98
|
-
|
99
|
-
it "sends player -1 win to console" do
|
100
|
-
player = -1
|
101
|
-
console.present_game_result(:o)
|
102
|
-
io.string.should match "Player o Wins"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe '#query_user_for_ai_difficulty' do
|
107
|
-
|
108
|
-
it "should print difficulty options" do
|
109
|
-
console.print_ai_difficulty_options(:x)
|
110
|
-
io.string.should match "Choose 0: AI is easy"
|
111
|
-
io.string.should match "Choose 1: AI is medium"
|
112
|
-
io.string.should match "Choose 2: AI is unbeatable"
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require_relative "spec_helper"
|
2
|
-
require_relative '../lib/ttt/game_controller'
|
3
|
-
require_relative '../lib/ttt/console_ui'
|
4
|
-
require_relative "../lib/ttt/two_dimensional_board"
|
5
|
-
|
6
|
-
describe GameController do
|
7
|
-
|
8
|
-
let(:io) {io = StringIO.new}
|
9
|
-
let(:controller){
|
10
|
-
controller = GameController.new
|
11
|
-
controller.instance_variable_set(:@board, TwoDimensionalBoard.new(3))
|
12
|
-
console1 = ConsoleUI.new(io)
|
13
|
-
controller.instance_variable_set(:@console, console1)
|
14
|
-
console = controller.console
|
15
|
-
final_controller = controller
|
16
|
-
}
|
17
|
-
let(:console){c = controller.console}
|
18
|
-
let(:ai){ai = controller.ai}
|
19
|
-
|
20
|
-
=begin
|
21
|
-
describe '#execute_game' do
|
22
|
-
it "breaks game loop and presents winner" do
|
23
|
-
console.stub(:greet_user){}
|
24
|
-
controller.stub(:set_board){}
|
25
|
-
controller.stub(:set_ai_difficulty){}
|
26
|
-
controller.stub(:display_game_status){}
|
27
|
-
board_manager.stub(:check_board_status){1}
|
28
|
-
controller.stub(:present_game_result){}
|
29
|
-
controller.stub(:play_again?){false}
|
30
|
-
controller.execute_game.should == nil
|
31
|
-
end
|
32
|
-
end
|
33
|
-
=end
|
34
|
-
|
35
|
-
|
36
|
-
describe '#play_again?' do
|
37
|
-
|
38
|
-
it "returns false if no new game wanted" do
|
39
|
-
console.stub(:query_user_for_new_game){true}
|
40
|
-
console.stub(:receive_user_choice){"y"}
|
41
|
-
controller.play_again?.should == true
|
42
|
-
|
43
|
-
console.stub(:query_user_for_new_game){false}
|
44
|
-
console.stub(:say_goodbye){}
|
45
|
-
console.stub(:receive_user_choice){"n"}
|
46
|
-
controller.play_again?.should == false
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|