class Board::ConnectNChecker

Public Class Methods

new(board, connect_n, col_idx, row_idx) click to toggle source
# 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

Public Instance Methods

check() click to toggle source
# 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_horizontal() click to toggle source
# 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_diag() click to toggle source
# 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_diag() click to toggle source
# 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_vertical() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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_count() click to toggle source
# 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