Книга «Изучаем Python»



Pdf көрінісі
бет157/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   153   154   155   156   157   158   159   160   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )

УПРАЖНЕНИЯ
12-5 . Боковая стрельба: напишите игру, в которой корабль размещается у левого края 
экрана, а игрок может перемещать корабль вверх и вниз . При нажатии клавиши «пробел» 
корабль стреляет, и пуля двигается вправо по экрану . Проследите за тем, чтобы пули уда-
лялись при выходе за край экрана .
Итоги
В этой главе вы научились составлять план игры, а также усвоили базовую струк-
туру игры, написанной с использованием Pygame. Вы узнали, как задать цвет фона 
и как сохранить настройки в отдельном классе, чтобы они были доступны для всех 
частей игры. Вы научились выводить изображения на экран и управлять перемеще-
нием игровых элементов. Также вы узнали, как создавать элементы, двигающиеся 
самостоятельно (например, пули, летящие по экрану), и как удалять объекты, ко-
торые стали лишними. Также в этой главе рассматривалась методика регулярного 
рефакторинга кода для упрощения текущей разработки.
В главе 13 в игру Alien Invasion будут добавлены пришельцы. К концу главы 13 
игрок сможет сбивать корабли пришельцев — конечно, если они не доберутся 
до него первыми!


13
Осторожно, пришельцы!
В этой главе в игру Alien Invasion будут добавлены пришельцы. Сначала мы до-
бавим одного пришельца у верхнего края экрана, а потом сгенерируем целый 
флот. Пришельцы будут перемещаться в сторону и вниз; при этом пришельцы, 
в которых попадают пули, исчезают с экрана. Наконец, мы ограничим количе-
ство кораблей у игрока, так что при гибели последнего корабля игра завершается.
В этой главе вы узнаете больше о Pygame и о ведении крупного проекта. Вы 
также научитесь обнаруживать 
коллизии
(столкновения) игровых объектов, 
например пуль и пришельцев. Обнаружение коллизий помогает определять 
взаимодействия между элементами игры: например, ограничить перемещение 
персонажа областью между стенами лабиринта или организовать передачу мяча 
между двумя персонажами. Работа будет продолжаться на основе плана, к кото-
рому мы будем время от времени возвращаться, чтобы не отклоняться от цели 
во время написания кода.
Итак, прежде чем браться за новый код для добавления флота пришельцев на экран, 
рассмотрим проект и обновим план.
Анализ проекта
Приступая к новой фазе разработки крупного проекта, всегда полезно вернуться 
к исходному плану и уточнить, чего же вы хотите добиться в том коде, который 
собираетесь написать. В этой главе мы:
‰
Проанализируем код и определим, нужно ли провести рефакторинг перед реа-
лизацией новых возможностей.
‰
Добавим в левом верхнем углу экрана одного пришельца, отделив его от краев 
экрана интервалами.
‰
По величине интервалов вокруг первого пришельца и общим размерам экрана 
вычислим, сколько пришельцев поместится на экране. Для создания пришель-
цев, заполняющих верхнюю часть экрана, будет написан цикл.
‰
Организуем перемещение флота пришельцев в сторону и вниз, пока весь флот 
не будет уничтожен, пока пришелец не столкнется с кораблем игрока или пока 
пришелец не достигнет земли. Если весь флот будет уничтожен, программа 
создает новый флот. Если пришелец сталкивается с кораблем или с землей, 
программа уничтожает корабль и создает новый флот.


Создание пришельца
257
‰
Ограничим количество кораблей, которые могут использоваться игроком, и за-
вершим игру в конце последней попытки.
Этот план будет уточняться по мере реализации новых возможностей, но для на-
чала и этого достаточно.
Также проводите анализ кода, когда вы начинаете работу над новой серией воз-
можностей проекта. Так как с каждой новой фазой проект обычно становится 
более сложным, лучше всего заняться расчисткой излишне громоздкого или не-
эффективного кода. И хотя сейчас особой расчистки не потребуется, потому что 
мы уже проводили промежуточный рефакторинг, необходимость использовать 
мышь для закрытия игры каждый раз, когда потребуется протестировать новую 
функцию, раздражает. Добавим возможность быстрого завершения игры при на-
жатии клавиши Q:
game_functions.py
def check_keydown_events(event, ai_settings, screen, ship, bullets):
...
elif event.key == pygame.K_q:
sys.exit()
В 
check_keydown_events()
добавляется новый блок, который завершает игру при 
нажатии клавиши Q. Это довольно безопасное изменение, потому что клавиша Q 
находится достаточно далеко от клавиш со стрелками и пробела, так что вероят-
ность случайного нажатия Q и завершения игры невелика. Теперь при тестирова-
нии игру можно закрыть клавишей Q, не прибегая к использованию мыши.
Создание пришельца
Размещение одного пришельца на экране мало чем отличается от размещения 
корабля. Поведением каждого пришельца будет управлять класс с именем 
Alien

который по своей структуре очень похож на класс 
Ship
. Для простоты мы сно-
ва воспользуемся готовыми графическими изображениями. Вы можете найти 


Достарыңызбен бөлісу:
1   ...   153   154   155   156   157   158   159   160   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет