Емилия обнови решението на 18.10.2015 15:54 (преди над 9 години)
+def move(snake, direction)
+ new_snake = snake.dup
+ new_snake.delete_at(0)
+ width = new_snake.last[0] + direction[0]
+ height = new_snake.last[1] + direction[1]
+ new_snake[snake.length - 1] = [width, height]
+ new_snake
+end
+
+def grow(snake, direction)
+ new_snake = snake.dup
+ width = new_snake.last[0] + direction[0]
+ height = new_snake.last[1] + direction[1]
+ new_snake[snake.length] = [width, height]
+ new_snake
+end
+
+def unavailable(food, snake) #!!!!!!!!!!!!!!!
+ not_available = snake.dup
+ for i in 0..(food.length - 1)
+ not_available[snake.length + i] = food[i]
+ end
+ not_available
+end
+
+def new_food(food, snake, dimensions)
+ not_available = unavailable(food, snake)
+ potential_position = [rand(10), rand(10)]
+ while i < not_available.length and not_available[i] == potential_position do
+ potential_position = [rand(10), rand(10)]
+ end
+ potential_position
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ position = [snake.last[0] + direction[0], snake.last[1] + direction[1]]
+ if snake.bsearch {|x| x == position} != nil
+ true
+ elsif position[0] >= dimensions[:width] or position[1] >= dimensions[:height]
+ true
+ else
+ false
+ end
+end
+
+def danger?(snake, direction, dimensions)
+ width = snake.last[0] + ( 2 * direction[0] )
+ height = snake.last[1] + ( 2 * direction[1] )
+ obstacle = obstacle_ahead?(snake, direction, dimensions)
+ if obstacle == false
+ new_snake = move(snake, direction)
+ obstacle_ahead?(new_snake, direction, dimensions)
+ else
+ true
+ end
+end