app/board.rb
module Board
OPPOSITE_DIRECTION = {
left: :right,
right: :left,
up: :down,
down: :up
}
SIZE = 50
NUMBER_OF_CELLS = SIZE ** 2
extend self
def generate
prepare_matrix
end
def find(x, y = nil)
if Hash === x && y == nil
return find(x[:x], x[:y])
end
x = transform(x)
y = transform(y)
@@matrix[y][x]
end
def matrix
@@matrix
end
def part_of_snake?(x, y)
find(x, y).snake
end
def random_square
squares = []
@@matrix.each do |row|
next unless row
row.each do |square|
if square && !square.snake
squares.push square
end
end
end
squares.sample
end
def add_food!
square = random_square
if square
square.food!
end
end
def paused?
@paused ||= false
end
def toggle_pause!
@paused = !@paused
end
def snake
@snake
end
def snake=(something)
@snake = something
end
def refresh_food
food = Element.find('.food')
find(food.data('x').to_i, food.data('y').to_i).food!
end
private
def prepare_matrix
@@matrix = []
1.upto(SIZE) do |y|
@@matrix[y] = []
1.upto(SIZE) do |x|
@@matrix[y][x] = Square.new(x, y, Element.find(".square-#{x}-#{y}"))
end
end
end
def transform(val)
if val == 0
return SIZE
end
if val > SIZE
return val - SIZE
end
val
end
end