Menu
CoddyTech

Победа или поражение

Урок 15 из 41 курса Создавайте игры с Pygame на Coddy.

Игра заканчивается. Здесь ты проигрываешь, когда количество жизней достигает 0, и выигрываешь, когда счёт достигает 10. Пока не произошло ни то ни другое, игра продолжается.

Помести всё, что движется, под одно условие, чтобы оно остановилось, когда игра закончится:

if lives > 0 and score < 10:
    # клавиши, корзина, блок, удачные и неудачные попытки поймать

Отрисовка остаётся за пределами этого if: экран по-прежнему показывает последний кадр, а поверх него — результат.

if lives == 0:
    message = font.render("Game over", True, (240, 240, 240))
    screen.blit(message, message.get_rect(center=(240, 160)))

message.get_rect(center=(240, 160)) — это Rect текстового изображения, размещённого так, чтобы его центр находился в точке (240, 160). При выводе изображения в Rect используется его верхний левый угол, поэтому текст оказывается по центру.

challenge icon

Задание

Средне

Заверши игру победой или поражением.

  1. Сделай отступ для всего, что движется (клавиш, корзины, блока, попаданий и промахов), внутри if lives > 0 and score < 10:.
  2. После счёта и количества жизней показывай Game over, когда lives == 0, или You win!, когда score == 10, по центру в точке (240, 160).

Нажми «Играть» и пропусти три блока: появится надпись Game over, и игра остановится. Затем нажми «Проверить».

Попробуйте сами

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3
    if block.top > 360:
        block.y = -20
        block.x = random.randint(0, 460)
        lives -= 1
    if block.colliderect(basket):
        block.y = -20
        block.x = random.randint(0, 460)
        score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Все уроки раздела Создавайте игры с Pygame

Потренируйтесь самостоятельно: Песочница Pygame