Найти тему
IT Start | Python

Игра «Пинг-понг» на Python

Оглавление

Введение

В этой статье мы напишем простую игру «Пинг-понг» на языке программирования Python с использованием библиотеки Pygame.

Установка необходимых библиотек

Перед написанием кода необходимо установить библиотеку Pygame. Сделать это можно через pip. Для этого нужно перейти в терминал/командную строку, прописать pip install pygame, нажать Enter и ждать установки.

pip install pygame

Инициализация Pygame

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

import pygame
import sys

Инициализируем Pygame:

import pygame
import sys

# Инициализация Pygame
pygame.init()

Настройка окна игры

Перед созданием окна создадим константы WIDTH и HEIGHT, первая из которых будет хранить ширину окна, а вторая — высоту:

import pygame
import sys

pygame.init()

# Константы
WIDTH, HEIGHT = 800, 600

Создадим окно:

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

# Создание окна
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

Создание объектов игры

Теперь создадим объекты игры: мяч и ракетки:

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

# Создание объектов
ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

Задание начальных условий

Зададим начальные параметры игры, такие как скорость мяча и ракеток:

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

# Начальные скорости
BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

Основной игровой цикл

Создадим основной игровой цикл (бесконечный цикл):

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

# Основной цикл
while True:

Внутри данного цикла сначала будет идти цикл for, который нужен для задействования кнопки закрытия окна (крестика справа сверху):

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

while True:
# Выход из игры
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

Далее будут идти условия для управления ракетками. Левый игрок сможет управлять ракеткой используя клавиши W и S, а правый игрок — стрелочками вверх и вниз.

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

# Управление ракетками
keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1.top > 0:
paddle1.y -= PADDLE_SPEED
if keys[pygame.K_s] and paddle1.bottom < HEIGHT:
paddle1.y += PADDLE_SPEED
if keys[pygame.K_UP] and paddle2.top > 0:
paddle2.y -= PADDLE_SPEED
if keys[pygame.K_DOWN] and paddle2.bottom < HEIGHT:
paddle2.y += PADDLE_SPEED

Движение мяча

Теперь добавим логику движения мяча:

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1.top > 0:
paddle1.y -= PADDLE_SPEED
if keys[pygame.K_s] and paddle1.bottom < HEIGHT:
paddle1.y += PADDLE_SPEED
if keys[pygame.K_UP] and paddle2.top > 0:
paddle2.y -= PADDLE_SPEED
if keys[pygame.K_DOWN] and paddle2.bottom < HEIGHT:
paddle2.y += PADDLE_SPEED

# Движение мяча
ball.x += ball_speed_x
ball.y += ball_speed_y

# Отскок мяча от стен
if ball.top <= 0 or ball.bottom >= HEIGHT:
ball_speed_y = -ball_speed_y
if ball.colliderect(paddle1) or ball.colliderect(paddle2):
ball_speed_x = -ball_speed_x

Проверка выхода мяча за пределы

Добавим логику для проверки, выходит ли мяч за пределы экрана:

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1.top > 0:
paddle1.y -= PADDLE_SPEED
if keys[pygame.K_s] and paddle1.bottom < HEIGHT:
paddle1.y += PADDLE_SPEED
if keys[pygame.K_UP] and paddle2.top > 0:
paddle2.y -= PADDLE_SPEED
if keys[pygame.K_DOWN] and paddle2.bottom < HEIGHT:
paddle2.y += PADDLE_SPEED

ball.x += ball_speed_x
ball.y += ball_speed_y

if ball.top <= 0 or ball.bottom >= HEIGHT:
ball_speed_y = -ball_speed_y
if ball.colliderect(paddle1) or ball.colliderect(paddle2):
ball_speed_x = -ball_speed_x

# Проверка, выходит ли мяч за пределы экрана
if ball.left <= 0 or ball.right >= WIDTH:
ball.x = WIDTH // 2
ball.y = HEIGHT // 2
ball_speed_x = BALL_SPEED_X * (-1 if ball.left <= 0 else 1)

Отрисовка объектов

Осталось отрисовать все объекты на экране:

import pygame
import sys

pygame.init()

WIDTH, HEIGHT = 800, 600

screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Пинг-понг")

ball = pygame.Rect(WIDTH // 2, HEIGHT // 2, 20, 20)
paddle1 = pygame.Rect(30, HEIGHT // 2 - 70, 10, 140)
paddle2 = pygame.Rect(WIDTH - 40, HEIGHT // 2 - 70, 10, 140)

BALL_SPEED_X, BALL_SPEED_Y = 7, 7
ball_speed_x = BALL_SPEED_X
ball_speed_y = BALL_SPEED_Y
PADDLE_SPEED = 10

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

keys = pygame.key.get_pressed()
if keys[pygame.K_w] and paddle1.top > 0:
paddle1.y -= PADDLE_SPEED
if keys[pygame.K_s] and paddle1.bottom < HEIGHT:
paddle1.y += PADDLE_SPEED
if keys[pygame.K_UP] and paddle2.top > 0:
paddle2.y -= PADDLE_SPEED
if keys[pygame.K_DOWN] and paddle2.bottom < HEIGHT:
paddle2.y += PADDLE_SPEED

ball.x += ball_speed_x
ball.y += ball_speed_y

if ball.top <= 0 or ball.bottom >= HEIGHT:
ball_speed_y = -ball_speed_y
if ball.colliderect(paddle1) or ball.colliderect(paddle2):
ball_speed_x = -ball_speed_x

if ball.left <= 0 or ball.right >= WIDTH:
ball.x = WIDTH // 2
ball.y = HEIGHT // 2
ball_speed_x = BALL_SPEED_X * (-1 if ball.left <= 0 else 1)

# Отрисовка
screen.fill((0, 0, 0)) # Чёрный фон
pygame.draw.ellipse(screen, (255, 255, 255), ball) # Мяч белого цвета
pygame.draw.rect(screen, (255, 255, 255), paddle1) # Левая ракетка
pygame.draw.rect(screen, (255, 255, 255), paddle2) # Правая ракетка

pygame.display.flip() # Обновление экрана
pygame.time.delay(30) # Задержка для управления частотой кадров

Игра «Пинг-понг» на Python

Итоговая игра:

-2

Заключение

В ходе статьи мы с Вами написали код простой игры «Пинг-понг» на языке программирования Python. Надеюсь Вам понравилась статья, желаю удачи и успехов! 🙂

Мой Telegram канал

Мой YouTube канал

Мой курс по Python (50 видоуроков + дополнительные уроки)

Курс по созданию телеграм-ботов на Python с фреймворком Aiogram

Курс по созданию GUI на Python

Наука
7 млн интересуются