Веселин обнови решението на 15.10.2015 22:44 (преди над 9 години)
+def move(snake, direction)
+ new_snake = snake.dup
+ new_snake.shift
+ new_snake.push(calculate_new_element(new_snake.last, direction))
+end
+
+def calculate_new_element(old_position, direction)
+ [old_position.first + direction.first, old_position.last + direction.last]
+end
+
+def grow(snake, direction)
+ new_snake = snake.dup
+ new_snake.push(calculate_new_element(new_snake.last, direction))
+end
+
+def snake_head_is_in_bounds?(snake_head, dimension)
+ in_x_bounds = snake_head.first >= 0 && snake_head.first <= dimension[:width]
+ in_y_bounds = snake_head.last >= 0 && snake_head.last <= dimension[:height]
+ in_x_bounds && in_y_bounds
+end
+
+def danger?(snake, direction, dimension)
+ new_snake = move(snake, direction)
+ first_move_in_bounds = snake_head_is_in_bounds?(new_snake.last, dimension)
+ new_snake = move(new_snake, direction)
+ second_move_in_bounds = snake_head_is_in_bounds?(new_snake.last, dimension)
+ !first_move_in_bounds || !second_move_in_bounds
+end
+
+def obstacle_ahead?(snake, direction, dimension)
+ new_snake = snake.dup
+ new_element = calculate_new_element(new_snake.last, direction)
+ is_snake_element = new_snake.include?(new_element)
+ !is_snake_element && snake_head_is_in_bounds?(new_element, dimension)
+end
snake_head_is_in_bounds?
обикновено is
се пропуска: even?
, empty?
etc.
Защо толкова много temp променливи в danger?
? Можеш просто да влагаш виканията на функции, в случая ще стане по-ясно.
Къде е new_food
, why hungry :(
Иначе, добра работа : ]