Игра «Арканоид» · Шаг 8 из 8
Где поймать
Под ракеткой рисуется тень — где мяч окажется, когда долетит до нижнего ряда. Кирпичи тень не учитывает, а стены и потолок учитывает: мяч может отскочить несколько раз. Поле в игре маленькое, но ту же функцию хотят взять в «бесконечный» режим, где до ряда ракетки миллионы строк, — и ответ нужен сразу.
Что сделать
Найдите столбец, в котором мяч долетит до ряда ракетки, — с отскоками от стен и потолка, но без перебора шагов.
Что приходит
myach— где мяч:(строка, столбец), выше ряда ракеткиnapravlenie— куда летит:(вниз, вбок)shirina— ширина поля, от 2ryad— номер ряда ракетки
Что вернуть
Столбец, в котором мяч окажется, дойдя до строки ryad, если на пути нет кирпичей.
Допишите функцию gde_upadet в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт gde_upadet на каждом такте и рисует тень в ряду ракетки. Решите шаг — и тень покажет, куда мяч упадёт после всех отскоков, а не будет стоять прямо под ним.
Без этого шага: тень стоит прямо под мячом.
Мяч в (12, 3) летит вниз-вправо на поле шириной 13, ракетка в ряду 17. До ряда — пять шагов, до стены далеко: столбец 3 + 5 = 8. Если бы мяч был в (10, 6), то на седьмом шаге упёрся бы в правую стену и пришёл бы в столбец 11.
gde_upadet((12, 3), (1, 1), 13, 17)
8
Мяч движется так же, как в игре на шагах 2 и 3: за такт — на строку вверх или вниз и на столбец вбок (или не вбок); если следующий столбец вне поля, сначала меняется знак вбок; если следующая строка меньше 0 — знак вниз. Столбцы — от 0 до shirina − 1.
Мяч, летящий вниз, дойдёт до строки ryad за ryad − строка тактов. Летящий вверх — сначала поднимется до строки 0, отскочит от потолка и спустится: за строка + ryad тактов.
Вернуть столбец мяча в момент, когда он дошёл до строки ryad. Кирпичи не учитываются. ryad бывает огромным — до 10¹⁵: перебирать такты по одному нельзя, ответ нужен за доли секунды.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.