Петър обнови решението на 18.10.2015 00:27 (преди над 9 години)
+def get_point_ahead(snake, direction)
+ [snake.last[0] + direction[0], snake.last[1] + direction[1]]
+end
+
+def outside_map?(point, dimensions)
+ answer_one = point[0].between?(0, dimensions[:width] - 1)
+ answer_two = point[1].between?(0, dimensions[:height] - 1)
+
+ answer_one || answer_two
+end
+
+def move(snake, direction)
+ new_snake = grow(snake, direction)
+ new_snake.delete_at(0) if new_snake != nil
+
+ new_snake
+end
+
+def grow(snake, direction)
+ new_snake = nil
+ if snake.find_index(get_point_ahead(snake, direction)) == nil
+ new_snake = snake.dup
+ new_snake << get_point_ahead(snake, direction)
+ end
+
+ new_snake
+end
+
+def new_food(food, snake, dimensions)
+ points_in_use = snake + food
+ random_point = [rand(dimensions[:width]), rand(dimensions[:height])]
+
+ random_point = [rand(dimensions[:width]), rand(dimensions[:height])] until
+ points_in_use.find_index(random_point) == nil
+
+ random_point
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ point_ahead = get_point_ahead(snake, direction)
+
+ snake.find_index(point_ahead) != nil || outside_map?(point_ahead, dimensions)
+end
+
+def danger?(snake, direction, dimensions)
+ if obstacle_ahead?(snake, direction, dimensions) == false
+ new_snake = move(snake, direction)
+ obstacle_ahead?(new_snake, direction, dimensions)
+ else
+ true
+ end
+end