class Gomasio::Board
Constants
- Offset
Attributes
order[RW]
size[R]
Public Class Methods
new(board_size = DEFAULT_BOARD_SIZE)
click to toggle source
# File lib/gomasio/board.rb, line 27 def initialize(board_size = DEFAULT_BOARD_SIZE) @size = board_size @range = 0..(@size - 1) clear end
Public Instance Methods
[](row, col)
click to toggle source
# File lib/gomasio/board.rb, line 64 def [](row, col) row, col = cleansing(row, col) fail OutOfRangeError.new unless include?(row, col) @board[encode(row, col)] end
clear()
click to toggle source
# File lib/gomasio/board.rb, line 41 def clear @board = Array.new(@size**2, Gomasio::Disk.empty) end
clone()
click to toggle source
# File lib/gomasio/board.rb, line 34 def clone instance = Board.new(@size) instance.load(@board.clone) instance end
count()
click to toggle source
# File lib/gomasio/board.rb, line 46 def count black = white = 0 (@size**2).times do |index| next if @board[index].empty? @board[index].black? ? black += 1 : white += 1 end [black, white] end
full?()
click to toggle source
# File lib/gomasio/board.rb, line 56 def full? (@size**2).times do |index| return false if @board[index].empty? end true end
include?(row, col)
click to toggle source
# File lib/gomasio/board.rb, line 92 def include?(row, col) row, col = cleansing(row, col) @range.include?(row) && @range.include?(col) end
mount(row: nil, col: nil, disk: nil)
click to toggle source
# File lib/gomasio/board.rb, line 71 def mount(row: nil, col: nil, disk: nil) row, col = cleansing(row, col) fail OutOfRangeError.new unless include?(row, col) fail InSamePlaceError.new unless self[row, col].empty? @board[encode(row, col)] = disk point = Struct.new(:row, :col) directions = Board.instance_variable_get(:@directions) location = directions.each_with_object(Hash.new(0)) do |diff, item| (1..4).each do |index| dict = point.new(row + diff.down * index, col + diff.right * index) break unless include?(dict.row, dict.col) break if self[dict.row, dict.col] != disk item[diff] = index end end [location, win?(location)] end
to_matrix()
click to toggle source
# File lib/gomasio/board.rb, line 98 def to_matrix Array.new(@size).map{[]}.each_with_index do |item, row| @size.times do |col| item << @board[encode(row,col)] end end end
Protected Instance Methods
load(board)
click to toggle source
# File lib/gomasio/board.rb, line 109 def load(board) @board = board if board.kind_of?(Array) end
Private Instance Methods
cleansing(row, col)
click to toggle source
# File lib/gomasio/board.rb, line 116 def cleansing(row, col) [row.to_i, col.to_i] end
decode(index)
click to toggle source
# File lib/gomasio/board.rb, line 135 def decode(index) index.divmod(@size) end
encode(row, col)
click to toggle source
# File lib/gomasio/board.rb, line 130 def encode(row, col) row * @size + col end
win?(location)
click to toggle source
# File lib/gomasio/board.rb, line 121 def win?(location) [[1, 0], [0, 1], [1, 1], [1, -1]].each do |diff| offset = Offset.new(diff[0], diff[1]) return true if (location[offset] + location[offset.reverse] >= 4) end false end