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