# здесь подключаются модули
from pygame import *
import sys
# здесь определяются константы,
# классы и функции
WIN_WIDTH = 800
WIN_HEIGHT = 600
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
class Rocket:
    # ширина и высота у всех экземпляров-ракет будут одинаковы
    width_rocket = 20
    height_rocket = 50
    def __init__(self, surface, color):
        """Конструктору необходимо передать поверхность, по которой будет летать
        ракета и цвет самой ракеты"""
        self.surf = surface
        self.color = color
        # Методы поверхности get_width() и get_height() возвращают ее размеры.
        # Координаты верхнего левого угла ракеты устанавливаются так,
        # чтобы ракета летела ровно по центру поверхности по горизонтали
        # и появлялась снизу.
        self.x = surface.get_width()//2 - Rocket.width_rocket//2
        self.y = surface.get_height()
    def fly(self):
        """Вызов метода fly() поднимает ракету на 3 пикселя. Если ракета скрывается вверху,
        она снова появится снизу"""
        draw.rect( self.surf, self.color,
                 (self.x, self.y, Rocket.width_rocket, Rocket.height_rocket))
        self.y -= 3
        # Если координата y ракеты уходит за -50, то значит она
        # полностью скрылась вверху.
        if self.y < -Rocket.height_rocket:
            # Поэтому перебрасываем ракету
            # под нижнюю границу окна.
            self.y = WIN_HEIGHT
FPS = 60
# здесь происходит инициация,
# создание объектов
init()
window = display.set_mode( (WIN_WIDTH, WIN_HEIGHT))
display.set_caption("Моя игра")
clock = time.Clock()
window.fill(WHITE)
# левая белая поверхность,
# равная половине окна
surf_left = Surface((WIN_WIDTH//2, WIN_HEIGHT))
surf_left.fill(WHITE)
 
# правая черная поверхность,
# равная другой половине окна
surf_right = Surface((WIN_WIDTH//2, WIN_HEIGHT))
# размещаем поверхности на главной,
# указывая координаты
# их верхних левых углов
window.blit(surf_left, (0, 0))
window.blit(surf_right, (WIN_WIDTH//2, 0))
 
# создаем черную ракету для левой
# поверхности и белую - для правой
rocket_left = Rocket(surf_left, BLACK)
rocket_right = Rocket(surf_right, WHITE)
 
# какая половина активна,
# до первого клика - никакая
active_left = False
active_right = False
display.update()
# главный цикл
while True:
    # задержка
    clock.tick(FPS)
    # цикл обработки событий
    for i in event.get():
        if i.type == QUIT:
            sys.exit()
        elif i.type == MOUSEBUTTONUP:
            # если координата X клика меньше половины окна, т. е. клик
            # произошел в левой половине ...
            if i.pos[0] < WIN_WIDTH//2:
                # то активируем левую, отключаем правую
                active_left = True
                active_right = False
            elif i.pos[0] > WIN_WIDTH//2:
                # иначе - наоборот
                active_right = True
                active_left = False
                
    if active_left:
        # Если активна левая поверхность, то заливаем только ее цветом,
        surf_left.fill(WHITE)
        # поднимаем ракету,
        rocket_left.fly()
        # заново отрисовываем левую поверхность на главной.
        window.blit(surf_left, (0, 0))
    elif active_right:
        surf_right.fill(BLACK)
        rocket_right.fly()
        window.blit(surf_right, (WIN_WIDTH//2, 0))
        
    display.update()