swttt-gem 1.0.0 → 1.1.0

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
data/lib/board.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Board
2
- attr_reader :game_history, :player_value, :row_scores, :dimension,
2
+ attr_reader :game_history, :player_value, :row_scores, :dimension, :player_one, :player_two,
3
3
  :column_scores, :left_diagonal_score, :right_diagonal_score
4
4
 
5
5
  def initialize(dimension = 3)
@@ -7,18 +7,19 @@ class Board
7
7
  @game_history, @board = [], Array.new(@dimension) {Array.new(@dimension) {0}}
8
8
  @row_scores, @column_scores = Array.new(@dimension) {0}, Array.new(@dimension) {0}
9
9
  @left_diagonal_score, @right_diagonal_score = 0, 0
10
+ @player_one, @player_two = 1, -1
10
11
  end
11
12
 
12
13
  def move(row, column, value = nil)
13
- @board[row][column] = value || player_value
14
- update_sums(row, column, value || player_value)
14
+ @board[row-1][column-1] = value || player_value
15
+ update_sums(row-1, column-1, value || player_value)
15
16
  @game_history << Move.new(row, column, value || player_value)
16
17
  end
17
18
 
18
19
  def undo_move
19
20
  move = @game_history.pop
20
- update_sums(move.row, move.column, -player_value)
21
- @board[move.row][move.column] = 0
21
+ update_sums(move.row-1, move.column-1, -player_value)
22
+ @board[move.row-1][move.column-1] = 0
22
23
  end
23
24
 
24
25
  def number_of_moves_made
@@ -26,11 +27,11 @@ class Board
26
27
  end
27
28
 
28
29
  def value_at(row, column)
29
- @board[row][column]
30
+ @board[row-1][column-1]
30
31
  end
31
32
 
32
33
  def is_empty_at?(row, column)
33
- @board[row][column].zero?
34
+ @board[row-1][column-1].zero?
34
35
  end
35
36
 
36
37
  def full?
@@ -47,6 +48,10 @@ class Board
47
48
  return value
48
49
  end
49
50
 
51
+ def winner
52
+ -player_value
53
+ end
54
+
50
55
  def corner_occupied?
51
56
  corner_cells.each { |corner| return true if @game_history.include?(corner) }
52
57
  return false
@@ -59,17 +64,17 @@ class Board
59
64
  private
60
65
 
61
66
  def corner_cells
62
- [Move.new(0,0),
63
- Move.new(0,@dimension-1),
64
- Move.new(@dimension-1,0),
65
- Move.new(@dimension-1, @dimension-1)]
67
+ [Move.new(1,1),
68
+ Move.new(1,@dimension),
69
+ Move.new(@dimension,1),
70
+ Move.new(@dimension, @dimension)]
66
71
  end
67
72
 
68
73
  def update_sums(row, column, update_value)
69
74
  @row_scores[row] += update_value
70
75
  @column_scores[column] += update_value
71
76
  @left_diagonal_score += update_value if row == column
72
- @right_diagonal_score += update_value if row == dimension - column - 1
77
+ @right_diagonal_score += update_value if row == @dimension - column - 1
73
78
  end
74
79
  end
75
80
 
@@ -40,13 +40,13 @@ private
40
40
  end
41
41
 
42
42
  def middle_move
43
- middle = @game_board.dimension/2
43
+ middle = @game_board.dimension/2 + 1
44
44
  return move = Move.new(middle, middle)
45
45
  end
46
46
 
47
47
  def for_each_cell
48
- (0...@game_board.dimension).each do |row|
49
- (0...@game_board.dimension).each { |column| yield(row, column) }
48
+ (1..@game_board.dimension).each do |row|
49
+ (1..@game_board.dimension).each { |column| yield(row, column) }
50
50
  end
51
51
  end
52
52
 
data/spec/board_spec.rb CHANGED
@@ -7,8 +7,8 @@ describe Board do
7
7
  end
8
8
 
9
9
  def iterate_board
10
- (0...@my_board.dimension).each do |row|
11
- (0...@my_board.dimension).each do |column|
10
+ (1..@my_board.dimension).each do |row|
11
+ (1..@my_board.dimension).each do |column|
12
12
  yield(row, column)
13
13
  end
14
14
  end
@@ -71,13 +71,13 @@ describe Board do
71
71
 
72
72
  it "can override the player_value" do
73
73
  @my_board.move(1,2,1)
74
- @my_board.move(0,0,1)
74
+ @my_board.move(2,2,1)
75
75
  @my_board.player_value.should == 1
76
76
  end
77
77
 
78
78
  it "updates the board when move is called" do
79
- @my_board.move(0,0)
80
- @my_board.value_at(0,0).should == 1
79
+ @my_board.move(2,2)
80
+ @my_board.value_at(2,2).should == 1
81
81
  end
82
82
 
83
83
  it "undos the board" do
@@ -89,7 +89,7 @@ describe Board do
89
89
  context "sum values" do
90
90
 
91
91
  before do
92
- @my_board.move(1,1)
92
+ @my_board.move(2,2)
93
93
  end
94
94
 
95
95
  it "should update row scores" do
@@ -128,16 +128,16 @@ describe Board do
128
128
 
129
129
  it "detects if a corner cell is occupied" do
130
130
  @my_board.corner_occupied?.should be_false
131
- @my_board.move(0,0)
131
+ @my_board.move(1,1)
132
132
  @my_board.corner_occupied?.should be_true
133
133
  @my_board.undo_move
134
- @my_board.move(0,2)
134
+ @my_board.move(1,3)
135
135
  @my_board.corner_occupied?.should be_true
136
136
  @my_board.undo_move
137
- @my_board.move(2,0)
137
+ @my_board.move(3,1)
138
138
  @my_board.corner_occupied?.should be_true
139
139
  @my_board.undo_move
140
- @my_board.move(2,2)
140
+ @my_board.move(3,3)
141
141
  @my_board.corner_occupied?.should be_true
142
142
  end
143
143
 
@@ -9,16 +9,16 @@ describe GameObserver do
9
9
  end
10
10
 
11
11
  def iterate_row_or_column
12
- (0...@my_board.dimension).each { |position| yield(position) }
12
+ (1..@my_board.dimension).each { |position| yield(position) }
13
13
  end
14
14
 
15
15
  it "detects a horizontal win" do
16
- iterate_row_or_column { |column| @my_board.move(0,column,1) }
16
+ iterate_row_or_column { |column| @my_board.move(1,column,1) }
17
17
  @observer.has_winner?.should == true
18
18
  end
19
19
 
20
20
  it "detects a vertical win" do
21
- iterate_row_or_column { |row| @my_board.move(row,0,1) }
21
+ iterate_row_or_column { |row| @my_board.move(row,1,1) }
22
22
  @observer.has_winner?.should == true
23
23
  end
24
24
 
@@ -28,7 +28,7 @@ describe GameObserver do
28
28
  end
29
29
 
30
30
  it "detects a right diagonal win" do
31
- iterate_row_or_column { |position| @my_board.move(@my_board.dimension-position-1,position,1) }
31
+ iterate_row_or_column { |position| @my_board.move(@my_board.dimension-position+1,position,1) }
32
32
  @observer.has_winner?.should == true
33
33
  end
34
34
 
data/swttt-gem.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{swttt-gem}
8
- s.version = "1.0.0"
8
+ s.version = "1.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Stephen Walker"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swttt-gem
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
+ - 1
8
9
  - 0
9
- - 0
10
- version: 1.0.0
10
+ version: 1.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Stephen Walker