class Rubykon::MoveValidator

Public Instance Methods

trusted_valid?(identifier, color, game) click to toggle source
# File lib/rubykon/move_validator.rb, line 14
def trusted_valid?(identifier, color, game)
  board = game.board
  spot_unoccupied?(identifier, board) &&
    no_ko_move?(identifier, game) &&
    no_suicide_move?(identifier, color, game)

end
valid?(identifier, color, game) click to toggle source
# File lib/rubykon/move_validator.rb, line 4
def valid?(identifier, color, game)
  board = game.board
  no_double_move?(color, game) &&
    (Game.pass?(identifier) ||
    (move_on_board?(identifier, board) &&
      spot_unoccupied?(identifier, board) &&
      no_suicide_move?(identifier, color, game) &&
      no_ko_move?(identifier, game)))
end

Private Instance Methods

liberties_at(identifier, game) click to toggle source
# File lib/rubykon/move_validator.rb, line 47
def liberties_at(identifier, game)
  game.group_tracker.liberty_count_at(identifier)
end
move_on_board?(identifier, board) click to toggle source
# File lib/rubykon/move_validator.rb, line 27
def move_on_board?(identifier, board)
  board.on_board?(identifier)
end
no_double_move?(color, game) click to toggle source
# File lib/rubykon/move_validator.rb, line 23
def no_double_move?(color, game)
  color == game.next_turn_color
end
no_ko_move?(identifier, game) click to toggle source
# File lib/rubykon/move_validator.rb, line 51
def no_ko_move?(identifier, game)
  identifier != game.ko
end
no_suicide_move?(identifier, color, game) click to toggle source
# File lib/rubykon/move_validator.rb, line 35
def no_suicide_move?(identifier, color, game)
  enemy_color         = Game.other_color(color)
  board               = game.board
  board_neighbours_of = board.neighbours_of(identifier)
  p identifier if board_neighbours_of.nil?
  board_neighbours_of.any? do |n_identifier, n_color|
    (n_color == Board::EMPTY) ||
      (n_color == color) && (liberties_at(n_identifier, game) > 1) ||
      (n_color == enemy_color) && (liberties_at(n_identifier, game) <= 1)
  end
end
spot_unoccupied?(identifier, board) click to toggle source
# File lib/rubykon/move_validator.rb, line 31
def spot_unoccupied?(identifier, board)
  board[identifier] == Board::EMPTY
end