tic_tac_toes 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 961f1ca9125169c762eac941829d166fb4ba42a2
|
4
|
+
data.tar.gz: a067d71fefcd398e645959f8fa798b805d753e5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e689cbb947b0bae18400a45b578f2b68b85eb18c148923ad763301a37e90483f640b80227161c95f5532535964b93fbaeaad616c017658b34d820b1c48158ac
|
7
|
+
data.tar.gz: ee969a45d65f3702ed0d3ac10c496d2a380b4fd25c31c7d27a3479308f775d6795ba595b25a9fbf864fa21234324658537e627ad25f7356ff43ed0e11e984937
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
tic_tac_toes (0.0.
|
4
|
+
tic_tac_toes (0.0.6)
|
5
5
|
pg
|
6
6
|
|
7
7
|
GEM
|
@@ -14,14 +14,14 @@ GEM
|
|
14
14
|
rspec-core (~> 3.0.0)
|
15
15
|
rspec-expectations (~> 3.0.0)
|
16
16
|
rspec-mocks (~> 3.0.0)
|
17
|
-
rspec-core (3.0.
|
17
|
+
rspec-core (3.0.3)
|
18
18
|
rspec-support (~> 3.0.0)
|
19
|
-
rspec-expectations (3.0.
|
19
|
+
rspec-expectations (3.0.3)
|
20
20
|
diff-lcs (>= 1.2.0, < 2.0)
|
21
21
|
rspec-support (~> 3.0.0)
|
22
|
-
rspec-mocks (3.0.
|
22
|
+
rspec-mocks (3.0.3)
|
23
23
|
rspec-support (~> 3.0.0)
|
24
|
-
rspec-support (3.0.
|
24
|
+
rspec-support (3.0.3)
|
25
25
|
|
26
26
|
PLATFORMS
|
27
27
|
ruby
|
@@ -4,6 +4,8 @@ module TicTacToes
|
|
4
4
|
module MoveStrategies
|
5
5
|
module HardAI
|
6
6
|
def self.move(board, players)
|
7
|
+
return second_move(board) if nine_board_second_move?(board)
|
8
|
+
|
7
9
|
open_spaces = Hash[board.open_spaces.map { |space| [space, nil] }]
|
8
10
|
|
9
11
|
open_spaces.each do |space, score|
|
@@ -15,6 +17,8 @@ module TicTacToes
|
|
15
17
|
open_spaces.each { |space, score| return space if score == best_score }
|
16
18
|
end
|
17
19
|
|
20
|
+
private
|
21
|
+
|
18
22
|
def self.minimax(board, current_player, players)
|
19
23
|
return score(board, players) if Rules.game_over?(board, players)
|
20
24
|
|
@@ -54,6 +58,30 @@ module TicTacToes
|
|
54
58
|
0
|
55
59
|
end
|
56
60
|
end
|
61
|
+
|
62
|
+
def self.nine_board_second_move?(board)
|
63
|
+
board.size == 9 && board.open_spaces.count == 8
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.second_move(board)
|
67
|
+
if nine_board_corner_occupied(board) || nine_board_side_occupied(board)
|
68
|
+
4
|
69
|
+
elsif nine_board_center_occupied(board)
|
70
|
+
0
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.nine_board_corner_occupied(board)
|
75
|
+
board.space(0) || board.space(2) || board.space(6) || board.space(8)
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.nine_board_side_occupied(board)
|
79
|
+
board.space(1) || board.space(3) || board.space(5) || board.space(7)
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.nine_board_center_occupied(board)
|
83
|
+
board.space(4) ? true : false
|
84
|
+
end
|
57
85
|
end
|
58
86
|
end
|
59
87
|
end
|
data/lib/tic_tac_toes/version.rb
CHANGED
@@ -18,6 +18,32 @@ describe TicTacToes::MoveStrategies::HardAI do
|
|
18
18
|
|
19
19
|
expect(hard_ai.move(board, players)).to eql(best_move)
|
20
20
|
end
|
21
|
+
|
22
|
+
context "when playing on a 3x3 board" do
|
23
|
+
it "returns 4 when the opponent’s first move was a corner" do
|
24
|
+
board = TestBoardGenerator.generate([nil, nil, nil,
|
25
|
+
nil, nil, nil,
|
26
|
+
nil, nil, x])
|
27
|
+
|
28
|
+
expect(hard_ai.move(board, players)).to eq(4)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns 4 when the opponent’s first move was an edge" do
|
32
|
+
board = TestBoardGenerator.generate([nil, nil, nil,
|
33
|
+
nil, nil, x,
|
34
|
+
nil, nil, nil])
|
35
|
+
|
36
|
+
expect(hard_ai.move(board, players)).to eq(4)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns 0 when the opponent’s first move was the center" do
|
40
|
+
board = TestBoardGenerator.generate([nil, nil, nil,
|
41
|
+
nil, x, nil,
|
42
|
+
nil, nil, nil])
|
43
|
+
|
44
|
+
expect(hard_ai.move(board, players)).to eq(0)
|
45
|
+
end
|
46
|
+
end
|
21
47
|
end
|
22
48
|
|
23
49
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tic_tac_toes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Spatafora
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|