Бойко обнови решението на 15.10.2015 23:01 (преди над 9 години)
Привет.
Фунциите
obstacle_ahead?
иdanger?
изпускат някои случаи. Погледни си отново условията за тях.-
Функцията new_food прави твърде много неща :
- Генерира храна на свободна позиция от дъската.
- Знае как да кодира и декодира двумерни координати към едномерни.
Добре е да пишем функции, които правят едно нещо и го правят много добре. Готиното при тези функции е, че тъй като правят само едно нещо ни е по-лесно да ги напишем изразително, без да има разни странични неща, които да ни разсейват от основната идея на функцията.
В твоя случай, за да ти е удобно да генерираш всички позиции от дъската, използвайки
Range
, се налага да кодираш позициите на храната и змията, а след това да декодираш новата позиция на храната. Ако това кодиране е напълно наложащо, аз бих го извадил в отделни фукции, за да не добавя такава сложност къмgenerate_food
. За конкретната задача обаче има по-добре решение. Погледни документацията наArray
, там има един метод, който е доста удобен за генерирането на всички позиции от дъската. Не се притеснявай да пишеш помощни функции, които да ти правят кода по-четим. Например за да достъпиш главата на змията викаш
snake.last
, можеш да напишеш функцияsnake_head
.