swttt-gem 1.0.0 → 1.1.0

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