Esempio n. 1
0
def main():
    # Теперь в окне не обязательно указывать его название
    window = Window(1280, 720)

    # Создаёт холст, позволяющий редактировать его и объекты на нём легче, чем в обычном холсте.
    surface = Surface(0, 0, 1280, 720)

    # Создание кнопки
    button = Button(200, 200, 200, 100)

    # Создаём и задаём цвет + прозрачность текста
    text = Text(200, 100, 20)
    text.set_color((255, 0, 0, 255))

    # Окно открыто, пока мы его не закроем по нажатию на крестик или кнопки Escape
    run = True
    while run:
        # Обработка действий пользователя
        for event in pygame.event.get():
            if event.type == pygame.QUIT:  # Выход из цикла по нажатию крестика
                run = False
            elif event.type == pygame.KEYDOWN:  # Выход из цикла по нажатию Escape'а
                if event.key == pygame.K_ESCAPE:
                    run = False

        # Заполняем каждый кадр цветом, чтобы заливать предыдущий
        window.fill((0, 0, 0))

        # Говорим на чём рисовать холст
        surface.draw(window)

        # Вместо косвенной передачи поверхности через окно (button.draw(window))
        # можно передать саму поверхность, что оптимизирует код и делает его читаемым
        button.draw(surface)

        # Выводим текст на экран (по умолчанию выведится "text")
        text.print(window)

        # Обновляем окно через буффер и выводим на экран
        window.update()
    window.close()
Esempio n. 2
0
class App:
    def __init__(self, size, title):
        pygame.init()
        pygame.font.init()

        self.window = Window(size, title)
        self.clock = pygame.time.Clock()
        self.stop = True
        self.running = True
        self.manager = GameManager(self.window)
        self.win = True
        self.restart = False

        self.ghost_speed = 3
        self.count_for_music = 0

        self.count = 0
        self.font = pygame.font.SysFont("Consolas", 60)

        self.spr_sheet = load_image("pacman-sheet.png")
        self.animation = Animation(self.spr_sheet, (730, 310), (80, 101),
                                   (1, 5))
        self.map = Map("map.txt",
                       load_image("maze_tile.png"), (16, 16),
                       draw_offset=(13, 80))

        # Pacman
        self.move = (-5, 0)
        self.pacman = Pacman(self.animation, 235, 465, self.move, 3)
        self.rotate = 0

        # Создание еды
        self.points = []
        self.points_coords = COORD_FOOD

        self.point_animations = []
        for i in range(len(self.points_coords)):
            self.point_animations.append(
                Animation(self.spr_sheet, (125, 20), (20, 20), (1, 1)))
        counter = 0
        for elem in self.points_coords:
            self.points.append(
                Point(elem[0], elem[1], self.point_animations[counter]))
            counter += 1

        self.mus = Music()
        # Анимации приведений и сами приведения
        self.animation2 = Animation(self.spr_sheet, (925, 727), (80, 101),
                                    (1, 2))
        self.animation3 = Animation(self.spr_sheet, (925, 18), (80, 101),
                                    (1, 2))
        self.animation4 = Animation(self.spr_sheet, (533, 121), (80, 101),
                                    (1, 2))
        self.animation5 = Animation(self.spr_sheet, (840, 120), (80, 101),
                                    (1, 2))

        self.blue_ghost = Ghost(self.animation4, 220, 310)
        self.pink_ghost = Ghost(self.animation3, 200, 310)
        self.red_ghost = Ghost(self.animation2, 200, 260)
        self.orange_ghost = Ghost(self.animation5, 240, 310)
        self.ghost_list = [
            self.red_ghost, self.pink_ghost, self.blue_ghost, self.orange_ghost
        ]
        self.open_clock = pygame.time.Clock()
        self.delta_time = 0
        # self.map = Map("map.txt", load_image("maze_tile.png"), (16, 16)).get_tile_list()

    def prerun(self):
        pass

    # Обновление анимации
    def update(self):
        self.animation.update(0.2, (26, 36), self.rotate)
        self.animation2.update(0.1, (26, 36), 0)
        self.animation3.update(0.1, (26, 36), 0)
        self.animation4.update(0.1, (26, 36), 0)
        self.animation5.update(0.1, (26, 36), 0)
        for elem in self.point_animations:
            elem.update(0.1, (10, 10), 0)

    # Отрисовка объектов
    def draw(self):
        self.map.draw_tile_map(self.window)
        self.window.draw_obj(
            self.animation.get_curr_image(),
            (self.pacman.get_x() - 15, self.pacman.get_y() - 20))
        self.window.draw_obj(self.animation2.get_curr_image(),
                             (self.red_ghost.get_x(), self.red_ghost.get_y()))
        self.window.draw_obj(
            self.animation3.get_curr_image(),
            (self.pink_ghost.get_x(), self.pink_ghost.get_y()))
        self.window.draw_obj(
            self.animation4.get_curr_image(),
            (self.blue_ghost.get_x(), self.blue_ghost.get_y()))
        self.window.draw_obj(
            self.animation5.get_curr_image(),
            (self.orange_ghost.get_x(), self.orange_ghost.get_y()))
        for i in range(len(self.point_animations)):
            self.window.draw_obj(self.point_animations[i].get_curr_image(),
                                 self.points[i].get_coords())

    def run(self):
        while self.running:
            self.win = True
            self.clock.tick(TICK)

            for event in pygame.event.get():  # Проверка событий
                if event.type == pygame.QUIT:
                    self.running = False
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_ESCAPE:
                        self.running = False
                    elif event.key == pygame.K_p:
                        self.stop = True
                        self.manager.set_restart_state(False)
                    elif event.key == pygame.K_d:
                        self.move = (4, 0)
                        self.rotate = 0
                    elif event.key == pygame.K_a:
                        self.move = (-4, 0)
                        self.rotate = 180
                    elif event.key == pygame.K_w:
                        self.move = (0, -4)
                        self.rotate = 90
                    elif event.key == pygame.K_s:
                        self.move = (0, 4)
                        self.rotate = 270
                    elif event.key == pygame.K_SPACE:
                        self.move = (0, 0)
                    elif event.key == pygame.K_o:
                        self.count_for_music += 1
                        self.mus.change_music(str(self.count_for_music % 2))

            if self.stop:  # Главное меню
                self.manager.open_menu()
                self.stop = False

            self.update()

            self.window.fill(0)

            if self.pacman.get_x() + self.move[0] * 15 > self.window.get_size()[0] or self.pacman.get_y() + \
                    self.move[1] * 15 > self.window.get_size()[1] or self.pacman.get_x() + self.move[0] < 0 or \
                    self.pacman.get_y() + self.move[1] < 0:
                self.move = (0, 0)

                self.move = (0, 0)
            self.pacman.move(self.move[0], self.move[1], self.map, [462, 10])

            # Выпускаем приведений
            self.delta_time += self.open_clock.tick()
            if 1000 > self.delta_time > 0:
                self.red_ghost.set_coords(220, 260)
            elif 3000 > self.delta_time > 2000:
                self.pink_ghost.set_coords(220, 260)
            elif 5000 > self.delta_time > 4000:
                self.blue_ghost.set_coords(220, 260)
            elif 7000 > self.delta_time > 6000:
                self.orange_ghost.set_coords(220, 260)

            # Движение приведений и проверка на паузу
            if self.move == (0, 0):
                self.ghost_speed = 0
            else:
                self.ghost_speed = 3

            pacman_pos = self.pacman.get_x(), self.pacman.get_y()
            self.red_ghost.move((pacman_pos[0], pacman_pos[1]), self.map,
                                self.ghost_speed)
            self.pink_ghost.move((pacman_pos[0], pacman_pos[1]), self.map,
                                 self.ghost_speed)
            self.blue_ghost.move((pacman_pos[0], pacman_pos[1]), self.map,
                                 self.ghost_speed)
            self.orange_ghost.move((pacman_pos[0], pacman_pos[1]), self.map,
                                   self.ghost_speed)

            monitoring(self.pacman, self.ghost_list, app)
            point_mon(self.pacman, self.points)
            for elem in self.points:
                self.win = self.win * elem.get_on_map()

            if self.win:
                print("Your Win")

            self.draw()

            pygame.display.flip()

        pygame.quit()
Esempio n. 3
0
    global episode_position
    work_data = main_lib[episode_code]
    print_text(work_data[0], text)  # print text on game window, return None
    if work_data[1]:
        num_answer = create_check_buttons(work_data[1])  # create buttons and text on them
    else:
        return False
    episode_position = work_data[2][num_answer]
    return True


clock = pygame.time.Clock()
run = True
while run:
    clock.tick(128)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                run = False
    window.fill((0, 0, 0))
    surface.draw(window)

    # create_check_buttons([[], [], [], []])

    window.update()

pygame.quit()