Мартин обнови решението на 16.10.2015 17:15 (преди над 9 години)
+def move(snake, direction)
+ snake = grow(snake, direction)
+ snake.shift()
+ snake
+end
+
+def grow(snake, direction)
+ snake = snake.clone
+ snake_head = (0..1).map{|index| snake.last()[index] + direction[index]}
+ snake.push(snake_head)
+end
+
+def new_food(food, snake, dimensions)
+ food_x = rand(0..(dimensions[:width] - 1))
+ food_y = rand(0..(dimensions[:height] - 1))
+
+ while ((snake.include? [food_x, food_y]) ||
+ (food.include? [food_x, food_y])) do
+ food_x = rand(0..(dimensions[:width] - 1))
+ food_y = rand(0..(dimensions[:height] - 1))
+ end
+
+ [food_x, food_y]
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ next_position = move(snake, direction).last()
+ if (next_position[0] > (dimensions[:width] - 1) ||
+ next_position[1] > (dimensions[:height] - 1) ||
+ (snake.include? next_position)) then
+ true
+ else
+ false
+ end
+end
+
+def danger?(snake, direction, dimensions)
+ position_ahead_snake = move(snake, direction)
+ if (obstacle_ahead?(snake, direction, dimensions)) then
+ true
+ elsif (obstacle_ahead?(position_ahead_snake, direction, dimensions))
+ true
+ else
+ false
+ end
+end
Потърси как можеш да обикаляш паралелно два масива за втората функция.
Във втората функция може да спестиш доста въртележки на цикъл, ако ограничиш къде търсиш.
Конструкцията if
се използва без then
. Освен понякога за едноредови случаи.
Изпускаш случай в една от функциите.
Имаш често повторение на
if a
true
else
false
Усещаш ли, че нещо е много излишно при нея?
Добра работа иначе, но се опитай да оправиш тези неща.