Ивайло обнови решението на 18.10.2015 02:43 (преди над 9 години)
+def move(snake, direction)
+ new_snake = snake.clone
+ new_snake.delete_at 0
+ new_snake << [snake[-1][0] + direction[0], snake[-1][1] + direction[1]]
+end
+
+def grow(snake, direction)
+ new_snake = move snake, direction
+ new_snake.insert 0, snake[0]
+end
+
+def new_food(food, snake, dimensions)
+ xs = Array(0..dimensions[:width])
+ ys = Array(0..dimensions[:height])
+ table = xs.product ys
+ table = table - snake - food
+ index = rand(0..table.length - 1)
+ table[index]
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_state = move snake, direction
+ xs = next_state[-1][0]
+ ys = next_state[-1][1]
+ dimensions[:width] = dimensions[:width] - 1
+ dimensions[:height] = dimensions[:height] - 1
+ !xs.between?(0, dimensions[:width]) || !ys.between?(0, dimensions[:height])
+end
+
+def danger?(snake, direction, dimensions)
+ next_state = move snake, direction
+ obstacle_ahead? next_state, direction, dimensions
+end