module Checkers::Board::Score
Public Instance Methods
movable_pieces(player:)
click to toggle source
# File lib/checkers/board/score.rb, line 47 def movable_pieces(player:) opponent = opponent(player) opponent_pieces = 0 player_pieces = 0 board.each_with_index do |piece, row, col| next if piece.zero? if player_pieces(player).include?(piece) && movable_squares(row: row, col: col, player: player).any? player_pieces += 1 elsif movable_squares(row: row, col: col, player: opponent).any? opponent_pieces += 1 end end opponent_pieces - player_pieces end
number_of_pieces(player:)
click to toggle source
# File lib/checkers/board/score.rb, line 6 def number_of_pieces(player:) opponent = opponent(player) player_pieces = board.count { |piece| player_pieces(player).include?(piece) } opponent_pieces = board.count { |piece| player_pieces(opponent).include?(piece) } opponent_pieces - player_pieces end
number_of_pieces_on_opponets_side(player:)
click to toggle source
# File lib/checkers/board/score.rb, line 13 def number_of_pieces_on_opponets_side(player:) opponent = opponent(player) player_pieces = board.each_with_index.count do |piece, row, _col| next if row >= 3 player_pieces(player).include?(piece) end opponent_pieces = board.each_with_index.count do |piece, row, _col| next unless row == 5 player_pieces(opponent).include?(piece) end opponent_pieces - player_pieces end
number_of_unoccupied_promotion_squares(player:)
click to toggle source
for kings implementation
# File lib/checkers/board/score.rb, line 32 def number_of_unoccupied_promotion_squares(player:) opponent = opponent(player) opponent_squares = 0 player_squares = 0 board.each_with_index do |square, row, _col| next if player_pieces(player).include?(square) || player_pieces(opponent).include?(square) opponent_squares += 1 if row == 7 player_squares += 1 if row.zero? end opponent_squares - player_squares end
Private Instance Methods
opponent(player)
click to toggle source
# File lib/checkers/board/score.rb, line 67 def opponent(player) player == :human ? :ai : :human end