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



Pdf көрінісі
бет129/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   125   126   127   128   129   130   131   132   ...   238
Байланысты:
2 5343781172763690906

УПРАЖНЕНИЯ

12-3 . Ракета: создайте игру, у которой в исходном состоянии в центре экрана находится 

ракета . Игрок может перемещать ракету вверх, вниз, вправо и влево четырьмя клавишами 

со стрелками . Проследите за тем, чтобы ракета не выходила за края экрана .

12-4 .  Клавиши:  создайте  файл  Pygame,  который  создает  пустой  экран .  В   цикле  событий 

выводите  значение  атрибута  event .key  при  обнаружении  события  pygame .KEYDOWN .  За-

пустите программу, нажимайте различные клавиши и понаблюдайте за реакцией Pygame .

Стрельба

А теперь добавим в игру возможность стрельбы. Мы напишем код, который выпу-

скает пулю (маленький прямоугольник) при нажатии игроком клавиши «пробел». 

Пули летят вертикально вверх, пока не исчезнут у верхнего края экрана.

Добавление настроек

Сначала добавим в 

settings .py

 новые настройки для значений, управляющих по-

ведением класса 

Bullet


. Эти настройки добавляются в конец метода 

__init__()

:

settings.py

      def __init__(self):

        ...

        # Параметры пули

        self.bullet_speed_factor = 1

        self.bullet_width = 3

        self.bullet_height = 15

        self.bullet_color = 60, 60, 60

Эти настройки создают темно-серые пули с шириной 3 пиксела и высотой 15 пик-

селов. Пули двигаются немного медленнее, чем корабль.

Создание класса Bullet

Теперь создадим файл 

bullet .py

 для хранения класса 

Bullet

. Первая часть файла 



bullet .py

 выглядит так:



bullet.py

import pygame

from pygame.sprite import Sprite

class Bullet(Sprite):




Стрельба    249

    """Класс для управления пулями, выпущенными кораблем."""

    def __init__(self, ai_settings, screen, ship):

        """Создает объект пули в текущей позиции корабля."""

        super(Bullet, self).__init__()

        self.screen = screen

        # Создание пули в позиции (0,0) и назначение правильной позиции.

        self.rect = pygame.Rect(0, 0, ai_settings.bullet_width,



            ai_settings.bullet_height)

        self.rect.centerx = ship.rect.centerx



        self.rect.top = ship.rect.top

        

        # Позиция пули хранится в вещественном формате.

        self.y = float(self.rect.y)



        self.color = ai_settings.bullet_color

        self.speed_factor = ai_settings.bullet_speed_factor

Класс 


Bullet

 наследует от класса 

Sprite

, импортируемого из модуля 



pygame.sprite

Работая со спрайтами (sprite), разработчик группирует связанные элементы 



в своей игре и выполняет операцию со всеми сгруппированными элементами одно-

временно. Чтобы создать экземпляр пули, методу 

__init__()

 необходимо передать 

экземпляры 

ai_settings

screen


 и 

ship


, а вызов 

super()


 необходим для правильной 

реализации наследования от 

Sprite

.



Достарыңызбен бөлісу:
1   ...   125   126   127   128   129   130   131   132   ...   238




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

    Басты бет