Стоян обнови решението на 13.10.2015 20:30 (преди над 9 години)
+def move(snake, direction)
+ snake[1.. -1].push [
+ snake[-1][0] + direction[0],
+ snake[-1][1] + direction[1]]
+end
+
+def grow(snake, direction)
+ snake[0.. -1].push [
+ snake[-1][0] + direction[0],
+ snake[-1][1] + direction[1]]
+end
+
+def new_food(food, snake, dimensions)
+ max_width = dimensions[:width] - 1
+ max_height = dimensions[:height] - 1
+ all_positions = (0..max_width).to_a.product((0..max_height).to_a)
+ available_positions = all_positions - (food + snake)
+ available_positions[Random.new.rand(available_positions.size)]
+end
+
+def obstacle_ahead?(snake, direction, dimensions)
+ new_position = [
+ snake[-1][0] + direction[0],
+ snake[-1][0] + direction[1]]
+ ! snake.include? new_position &&
+ new_position[0] > 0 && new_position[0] <= dimensions[:width] &&
+ new_position[1] > 0 && new_position[1] <= dimensions[:height]
+end
+
+def danger?(snake, direction, dimensions)
+ moved_snake = move(snake, direction)
+ obstacle_ahead?(snake, direction, dimensions) &&
+ obstacle_ahead?(moved_snake, direction, dimensions)
+end
Като се има предвид колко рано си го предал, gj. Все пак:
- Изглежда малко си пообъркал условията. Защо в
danger?
искаш и двете да са изпълнени едновременно? Вobstacle_ahead?
защо искаш всички да са изпълнени (което btw няма как да стане) и защо за едното имаш отрицание? - Порови се малко из методите на
Array
. Някои от нещата с индексите изглеждат леко харески както си ги написал. Със сигурност ще намериш методи, които връщат масива без първия елемент, копие на масива, първия/последния елемент, random елемент и т.н. - Като навържеш 5 условия може да стане малко сложно. Помисли дали ако си направиш някой друг помощен метод кодът ти няма да стане по-разбираем.
Ще пусна редакция утре, но засега: 1) "Дефинирайте функцията danger?(snake, direction, dimensions), която приема съответниете данни и проверява дали ако змията продължава да се движи в същата посока ще умре след един или два хода." 2) За obstacle_ahead? не разбирам забележката :/ 3) За Array съм убеден че си прав, ще го направя джиджано ;) 4) Глождеше ме ама си мислех, че не давате помощни методи :D
С други думи благодаря за навременната проверка :) дано и утре имате време
Даже ги окуражаваме (ако са смислени). Не случайно има ограничение от 10 метода.
- За
danger?
си направил така, че проверява дали ще умре след един и два хода - За
obstacle_ahead?
- прав си, че грешно съм го прочел. В момента всъщност си написал точно обратното на това, което се иска.