38 lines
616 B
Ruby
38 lines
616 B
Ruby
|
class Cell
|
||
|
attr_reader :row, :column
|
||
|
attr_accessor :north, :south, :east, :west
|
||
|
|
||
|
def initialize(row, column)
|
||
|
@row, @column = row, column
|
||
|
@links = {}
|
||
|
end
|
||
|
|
||
|
def link(cell, bidi=true)
|
||
|
@links[cell] = true
|
||
|
cell.link(self, false) if bidi
|
||
|
self
|
||
|
end
|
||
|
|
||
|
def unlink(cell, bidi=true)
|
||
|
@links.delete(cell)
|
||
|
cell.unlink(self, false) if bidi
|
||
|
self
|
||
|
end
|
||
|
|
||
|
def links
|
||
|
@links.keys
|
||
|
end
|
||
|
|
||
|
def linked?(cell)
|
||
|
@links.key?(cell)
|
||
|
end
|
||
|
|
||
|
def neighbors
|
||
|
list = []
|
||
|
list << north if north
|
||
|
list << south if south
|
||
|
list << east if east
|
||
|
list << west if west
|
||
|
list
|
||
|
end
|
||
|
end
|