class TicTacToe::Checker
Public Class Methods
new()
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 4 def initialize @win = false @draw = false end
Public Instance Methods
update(args)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 9 def update(args) gameplay = args[:gameplay] @board = gameplay.board.board @win = win?(args[:player]) @draw = draw? unless @win gameplay.finish_game if (@win || @draw) gameplay.finished_turn_status(win: @win, draw: @draw) end
Private Instance Methods
diagonal_win?(player)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 49 def diagonal_win?(player) left_to_right_diagonal_win?(player) || right_to_left_diagonal_win?(player) end
draw?()
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 19 def draw? @board.all? {|row| row.all? { |element| !element.empty? }} end
horizontal_win?(player)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 38 def horizontal_win?(player) 3.times.any? { |count| win_horizontal_line?(player,count)} end
left_to_right_diagonal_win?(player)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 53 def left_to_right_diagonal_win?(player) @board[0][0].owner?(player) && @board[1][1].owner?(player) && @board[2][2].owner?(player) end
right_to_left_diagonal_win?(player)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 59 def right_to_left_diagonal_win?(player) @board[0][2].owner?(player) && @board[1][1].owner?(player) && @board[2][0].owner?(player) end
vertical_win?(player)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 27 def vertical_win?(player) 3.times.any? { |count| win_vertical_line?(player, count) } end
win?(player)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 23 def win? (player) vertical_win?(player) || horizontal_win?(player) || diagonal_win?(player) end
win_horizontal_line?(player, row)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 42 def win_horizontal_line?(player, row) cols = [0, 1, 2] cols.all? do |col_index| @board[row][col_index].owner?(player) end end
win_vertical_line?(player, col)
click to toggle source
# File lib/tic_tac_toe/checker.rb, line 31 def win_vertical_line?(player, col) rows = [0, 1, 2] rows.all? do |row_index| @board[row_index][col].owner?(player) end end