Ивелина обнови решението на 19.10.2015 08:45 (преди над 9 години)
+def move(snake, direction)
+ new_position_x = snake.last[0] + direction[0]
+ new_position_y = snake.last[1] + direction[1]
+ new_position = [new_position_x, new_position_y]
+ moved_snake = snake.last(snake.length - 1)
+ moved_snake.push(new_position)
+ moved_snake
+end
+
+def grow(snake, direction)
+ new_position_x = snake.last[0] + direction[0]
+ new_position_y = snake.last[1] + direction[1]
+ new_position = [new_position_x, new_position_y]
+ moved_snake = snake.clone
+ moved_snake.push(new_position)
+ moved_snake
+end
+
+def new_food(food, snake, dimensions)
+ positions_x = Array(0..(dimensions[:width] - 1))
+ positions_y = Array(0..(dimensions[:height] - 1))
+ positions_on_field = positions_x.product(positions_y)
+ used_positions = food.concat(snake)
+ available_positions = positions_on_field - used_positions
+ available_positions.sample
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ new_position_x = snake.last[0] + direction[0]
+ new_position_y = snake.last[1] + direction[1]
+ if new_position_x < 0 || new_position_x >= dimensions[:width]
+ return true
+ end
+ if new_position_y < 0 || new_position_y >= dimensions[:height]
+ return true
+ end
+ return false
+end
+
+def danger?(snake, direction, dimensions)
+ is_danger = obstacle_ahead?(snake, direction, dimensions)
+ moved_snake = move(snake, direction)
+ is_danger = is_danger || obstacle_ahead?(moved_snake, direction, dimensions)
+ is_danger
+end