Пламен обнови решението на 17.10.2015 17:01 (преди над 9 години)
+def position_in_front_of_snake(snake,direction)
+ position = snake[-1].zip(direction).each{
+ |element| element[0]+=element[1]
+ }
+ position.transpose[0]
+end
+
+def x_border?(point,dimensions)
+ not (0..dimensions[:width]-1).member?(point[0])
+end
+
+def y_border?(point,dimensions)
+ not (0..dimensions[:height]-1).member?(point[1])
+end
+
+def is_border?(point, dimensions)
+ if x_border?(point,dimensions) or y_border?(point,dimensions)
+ return true
+ else
+ return false
+ end
+end
+
+def move(snake, direction)
+ (snake | [position_in_front_of_snake(snake, direction)])[1..snake.length]
+end
+
+def grow(snake, direction)
+ (snake | [position_in_front_of_snake(snake, direction)])
+end
+
+def new_food(food, snake, dimensions)
+ taken_position = food | snake
+ new_food_position = [rand(dimensions[:width]),rand(dimensions[:height])]
+ if taken_position.include?(new_food_position)
+ new_food(food, snake, dimensions)
+ else
+ new_food_position
+ end
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_position = position_in_front_of_snake(snake, direction)
+ if snake.include?(next_position) or is_border?(next_position,dimensions)
+ return true
+ else
+ return false
+ end
+end
+
+def danger?(snake, direction, dimensions)
+ if obstacle_ahead?(snake, direction, dimensions)
+ return true
+ elsif obstacle_ahead?(move(snake,direction), direction, dimensions)
+ return true
+ else
+ return false
+ end
+end