Class: Board::ConnectNChecker

Inherits:
Object
  • Object
show all
Defined in:
lib/command_four/board.rb

Instance Method Summary collapse

Constructor Details

#initialize(board, connect_n, col_idx, row_idx) ⇒ ConnectNChecker

Returns a new instance of ConnectNChecker.



81
82
83
84
85
86
87
88
89
90
# File 'lib/command_four/board.rb', line 81

def initialize(board, connect_n, col_idx, row_idx)
  @col_idx = col_idx
  @row_idx = row_idx
  @cur_color = board[col_idx][row_idx]
  @width = board.length
  @height = board[0].length
  @board = board
  @connect_n = connect_n
  @winning_cells = []
end

Instance Method Details

#checkObject



92
93
94
95
96
97
98
# File 'lib/command_four/board.rb', line 92

def check
  if check_horizontal || check_vertical || check_left_diag || check_right_diag
    GameState.new(true, @winning_cells)
  else
    GameState.new(false, [])
  end
end

#check_horizontalObject



100
101
102
103
104
# File 'lib/command_four/board.rb', line 100

def check_horizontal
  @winning_cells = []
  total_count = get_right_count + get_left_count
  total_count >= @connect_n
end

#check_left_diagObject



112
113
114
115
116
# File 'lib/command_four/board.rb', line 112

def check_left_diag
  @winning_cells = []
  total_count = get_up_left_count + get_down_left_count
  total_count >= @connect_n
end

#check_right_diagObject



118
119
120
121
122
# File 'lib/command_four/board.rb', line 118

def check_right_diag
  @winning_cells = []
  total_count = get_up_right_count + get_down_right_count
  total_count >= @connect_n
end

#check_verticalObject



106
107
108
109
110
# File 'lib/command_four/board.rb', line 106

def check_vertical
  @winning_cells = []
  total_count = get_up_count + get_down_count
  total_count >= @connect_n
end

#get_down_countObject



157
158
159
160
161
162
163
164
165
166
# File 'lib/command_four/board.rb', line 157

def get_down_count
  consecutive_count = 0
  cur_row_idx = @row_idx - 1
  while cur_row_idx >= 0 && consecutive_count <= @connect_n && @board[@col_idx][cur_row_idx] == @cur_color
    @winning_cells.push([@col_idx, cur_row_idx])
    cur_row_idx -= 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_down_left_countObject



181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/command_four/board.rb', line 181

def get_down_left_count
  consecutive_count = 0
  cur_row_idx = @row_idx - 1
  cur_col_idx = @col_idx + 1
  while cur_row_idx >= 0 && cur_col_idx < @width && consecutive_count <= @connect_n && @board[cur_col_idx][cur_row_idx] == @cur_color
    @winning_cells.push([cur_col_idx, cur_row_idx])
    cur_row_idx -= 1
    cur_col_idx += 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_down_right_countObject



207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/command_four/board.rb', line 207

def get_down_right_count
  consecutive_count = 0
  cur_row_idx = @row_idx - 1
  cur_col_idx = @col_idx - 1
  while cur_row_idx >= 0 && cur_col_idx >= 0 && consecutive_count <= @connect_n && @board[cur_col_idx][cur_row_idx] == @cur_color
    @winning_cells.push([cur_col_idx, cur_row_idx])
    cur_row_idx -= 1
    cur_col_idx -= 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_left_countObject



135
136
137
138
139
140
141
142
143
144
# File 'lib/command_four/board.rb', line 135

def get_left_count
  consecutive_count = 0
  cur_col_idx = @col_idx - 1
  while cur_col_idx >= 0 && consecutive_count <= @connect_n && @board[cur_col_idx][@row_idx] == @cur_color
    @winning_cells.push([cur_col_idx, @row_idx])
    cur_col_idx -= 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_right_countObject



124
125
126
127
128
129
130
131
132
133
# File 'lib/command_four/board.rb', line 124

def get_right_count
  consecutive_count = 0
  cur_col_idx = @col_idx
  while cur_col_idx < @width && consecutive_count <= @connect_n && @board[cur_col_idx][@row_idx] == @cur_color
    @winning_cells.push([cur_col_idx, @row_idx])
    cur_col_idx += 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_up_countObject



146
147
148
149
150
151
152
153
154
155
# File 'lib/command_four/board.rb', line 146

def get_up_count
  consecutive_count = 0
  cur_row_idx = @row_idx
  while cur_row_idx < @height && consecutive_count <= @connect_n && @board[@col_idx][cur_row_idx] == @cur_color
    @winning_cells.push([@col_idx, cur_row_idx])
    cur_row_idx += 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_up_left_countObject



168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/command_four/board.rb', line 168

def get_up_left_count
  consecutive_count = 0
  cur_row_idx = @row_idx
  cur_col_idx = @col_idx
  while cur_row_idx < @height && cur_col_idx >= 0 && consecutive_count <= @connect_n && @board[cur_col_idx][cur_row_idx] == @cur_color
    @winning_cells.push([cur_col_idx, cur_row_idx])
    cur_row_idx += 1
    cur_col_idx -= 1
    consecutive_count += 1
  end
  consecutive_count
end

#get_up_right_countObject



194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/command_four/board.rb', line 194

def get_up_right_count
  consecutive_count = 0
  cur_row_idx = @row_idx
  cur_col_idx = @col_idx
  while cur_row_idx < @height && cur_col_idx < @width && consecutive_count <= @connect_n && @board[cur_col_idx][cur_row_idx] == @cur_color
    @winning_cells.push([cur_col_idx, cur_row_idx])
    cur_row_idx += 1
    cur_col_idx += 1
    consecutive_count += 1
  end
  consecutive_count
end