πŸ“ Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ ΠΏΠΎΠ½Π³ Π½Π° Python: простой Π³Π°ΠΉΠ΄ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°

Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³ Π½Π° Python

Для написания ΠΈΠ³Ρ€Ρ‹ "ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³" Π½Π° Python, Π²Π°ΠΌ понадобится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ pygame. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:


import pygame
import random

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Pygame
pygame.init()

# Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°
ΡˆΠΈΡ€ΠΈΠ½Π° = 800
высота = 400

# Π¦Π²Π΅Ρ‚Π°
Π±Π΅Π»Ρ‹ΠΉ = (255, 255, 255)
Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ = (0, 0, 0)

# ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΊ
ΡˆΠΈΡ€ΠΈΠ½Π°_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ = 10
высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ = 60
ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ = 5

# ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ мяча
радиус_мяча = 10
ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча = 5

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°
ΠΎΠΊΠ½ΠΎ = pygame.display.set_mode((ΡˆΠΈΡ€ΠΈΠ½Π°, высота))
pygame.display.set_caption("Пинг-понг")

# Π Π°ΠΊΠ΅Ρ‚ΠΊΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ²
Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1 = pygame.Rect(50, высота // 2 - высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ // 2, ΡˆΠΈΡ€ΠΈΠ½Π°_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ, высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ)
Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2 = pygame.Rect(ΡˆΠΈΡ€ΠΈΠ½Π° - 50 - ΡˆΠΈΡ€ΠΈΠ½Π°_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ, высота // 2 - высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ // 2, ΡˆΠΈΡ€ΠΈΠ½Π°_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ, высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ)

# ΠœΡΡ‡
мяч = pygame.Rect(ΡˆΠΈΡ€ΠΈΠ½Π° // 2 - радиус_мяча // 2, высота // 2 - радиус_мяча // 2, радиус_мяча, радиус_мяча)

# Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΊ
ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_1 = 0
ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_2 = 0

# Π“Π»Π°Π²Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ³Ρ€Ρ‹
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_1 = -ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ
            if event.key == pygame.K_s:
                ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_1 = ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ
            if event.key == pygame.K_UP:
                ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_2 = -ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ
            if event.key == pygame.K_DOWN:
                ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_2 = ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_w or event.key == pygame.K_s:
                ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_1 = 0
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_2 = 0

    # ОбновлСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΊ
    Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1.y += ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_1
    Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2.y += ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ_2

    # ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ двиТСния Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΊ
    if Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1.y <= 0:
        Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1.y = 0
    if Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1.y >= высота - высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ:
        Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1.y = высота - высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ
    if Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2.y <= 0:
        Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2.y = 0
    if Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2.y >= высота - высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ:
        Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2.y = высота - высота_Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ

    # ОбновлСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ мяча
    мяч.x += ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча
    мяч.y += ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча

    # ΠžΡ‚ΡΠΊΠΎΠΊ мяча ΠΎΡ‚ ΠΊΡ€Π°Π΅Π² экрана
    if мяч.y <= 0 or мяч.y >= высота - радиус_мяча:
        ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча = -ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча

    # ΠžΡ‚ΡΠΊΠΎΠΊ мяча ΠΎΡ‚ Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΊ
    if мяч.colliderect(Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1) or мяч.colliderect(Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2):
        ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча = -ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ_мяча

    # ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° элСмСнтов ΠΈΠ³Ρ€Ρ‹
    ΠΎΠΊΠ½ΠΎ.fill(Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ)
    pygame.draw.rect(ΠΎΠΊΠ½ΠΎ, Π±Π΅Π»Ρ‹ΠΉ, Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_1)
    pygame.draw.rect(ΠΎΠΊΠ½ΠΎ, Π±Π΅Π»Ρ‹ΠΉ, Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°_2)
    pygame.draw.ellipse(ΠΎΠΊΠ½ΠΎ, Π±Π΅Π»Ρ‹ΠΉ, мяч)
    pygame.draw.aaline(ΠΎΠΊΠ½ΠΎ, Π±Π΅Π»Ρ‹ΠΉ, (ΡˆΠΈΡ€ΠΈΠ½Π° // 2, 0), (ΡˆΠΈΡ€ΠΈΠ½Π° // 2, высота))

    # ОбновлСниС экрана
    pygame.display.update()

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ ΠΏΠΎΠ½Π³ Π½Π° Python

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρƒ "ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³" Π½Π° языкС Python. ΠœΡ‹ создадим ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ³Ρ€ΠΎΠΊ смоТСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΎΠΉ ΠΈ ΠΎΡ‚Π±ΠΈΠ²Π°Ρ‚ΡŒ мячик, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°.

Π¨Π°Π³ 1: Установка Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Pygame

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Pygame, которая позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Ρ‹ Π½Π° языкС Python. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Pygame, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

pip install pygame

ПослС установки Pygame, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ созданию ΠΈΠ³Ρ€Ρ‹.

Π¨Π°Π³ 2: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π° ΠΈΠ³Ρ€Ρ‹

Для Π½Π°Ρ‡Π°Π»Π°, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΈΠ³Ρ€Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ всС элСмСнты. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

import pygame

# Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Pygame
pygame.init()

# Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°
width = 800
height = 400

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("Пинг-понг")

# Основной Ρ†ΠΈΠΊΠ» ΠΈΠ³Ρ€Ρ‹
running = True
while running:
    # ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # ОбновлСниС экрана
    pygame.display.flip()

# Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Pygame
pygame.quit()

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ создаСт ΠΎΠΊΠ½ΠΎ ΠΈΠ³Ρ€Ρ‹ с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 800x400 пиксСлСй ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ "Пинг-ΠΏΠΎΠ½Π³". Π˜Π³Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ ΠΎΠΊΠ½ΠΎ.

Π¨Π°Π³ 3: ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°ΠΊΠ΅Ρ‚ΠΎΠΊ ΠΈ мячика

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ ΠΈ мячик Π½Π° экран. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простыС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ для отобраТСния этих элСмСнтов. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

# Π¦Π²Π΅Ρ‚Π°
white = (255, 255, 255)
black = (0, 0, 0)

# Π Π°ΠΊΠ΅Ρ‚ΠΊΠΈ
paddle_width = 10
paddle_height = 60
paddle_speed = 5
paddle1_x = 0
paddle1_y = height / 2 - paddle_height / 2
paddle2_x = width - paddle_width
paddle2_y = height / 2 - paddle_height / 2

# ΠœΡΡ‡ΠΈΠΊ
ball_radius = 10
ball_speed_x = 3
ball_speed_y = 3
ball_x = width / 2
ball_y = height / 2

# Основной Ρ†ΠΈΠΊΠ» ΠΈΠ³Ρ€Ρ‹
while running:
    # ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and paddle1_y > 0:
        paddle1_y -= paddle_speed
    if keys[pygame.K_s] and paddle1_y < height - paddle_height:
        paddle1_y += paddle_speed
    if keys[pygame.K_UP] and paddle2_y > 0:
        paddle2_y -= paddle_speed
    if keys[pygame.K_DOWN] and paddle2_y < height - paddle_height:
        paddle2_y += paddle_speed

    # ОбновлСниС экрана
    screen.fill(black)
    pygame.draw.rect(screen, white, (paddle1_x, paddle1_y, paddle_width, paddle_height))
    pygame.draw.rect(screen, white, (paddle2_x, paddle2_y, paddle_width, paddle_height))
    pygame.draw.circle(screen, white, (int(ball_x), int(ball_y)), ball_radius)
    pygame.display.flip()

# Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Pygame
pygame.quit()

Π’ этом ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ ΠΈ мячик Π² основной Ρ†ΠΈΠΊΠ» ΠΈΠ³Ρ€Ρ‹. Π˜Π³Ρ€ΠΎΠΊ смоТСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш "W" ΠΈ "S", Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ клавиш "Π’Π²Π΅Ρ€Ρ…" ΠΈ "Π’Π½ΠΈΠ·". ΠœΡΡ‡ΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΏΠΎ экрану с фиксированной ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ.

Π¨Π°Π³ 4: ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° столкновСний

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ столкновСний мячика с Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ стСнками. Если мячик столкнСтся с Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΎΠΉ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΡΠΊΠΎΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Если мячик достигнСт стСны, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π΅. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

# ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° столкновСний мячика с Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ
if (ball_x < paddle1_x + paddle_width and paddle1_y < ball_y < paddle1_y + paddle_height) or (ball_x > paddle2_x - ball_radius and paddle2_y < ball_y < paddle2_y + paddle_height):
    ball_speed_x *= -1

# Π”Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ мячика
ball_x += ball_speed_x
ball_y += ball_speed_y

# ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° столкновСний мячика со стСнками
if ball_y < 0 or ball_y > height - ball_radius:
    ball_speed_y *= -1

# ОбновлСниС экрана...

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ провСряСт столкновСния мячика с Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ ΠΈ стСнками, ΠΈ измСняСт Π΅Π³ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, Ссли столкновСниС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ. ΠœΡΡ‡ΠΈΠΊ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΉ стСнок ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля.

Π¨Π°Π³ 5: ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΠΎΡ‡ΠΊΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ побСдитСля

НаконСц, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ подсчСт ΠΎΡ‡ΠΊΠΎΠ² ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ побСдитСля. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΡ‡ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΏΡ€ΠΈ пропускС мячика. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ³Ρ€ΠΎΠΊ, Π½Π°Π±Ρ€Π°Π²ΡˆΠΈΠΉ 5 ΠΎΡ‡ΠΊΠΎΠ², ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

# ΠžΡ‡ΠΊΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ²
player1_score = 0
player2_score = 0

# ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° ΠΎΡ‡ΠΊΠΎΠ²
font = pygame.font.Font(None, 36)

player1_text = font.render(f"Π˜Π³Ρ€ΠΎΠΊ 1: {player1_score}", True, white)
player1_rect = player1_text.get_rect()
player1_rect.x = 20
player1_rect.y = 20

player2_text = font.render(f"Π˜Π³Ρ€ΠΎΠΊ 2: {player2_score}", True, white)
player2_rect = player2_text.get_rect()
player2_rect.x = width - player2_rect.width - 20
player2_rect.y = 20

# Основной Ρ†ΠΈΠΊΠ» ΠΈΠ³Ρ€Ρ‹
while running:
    # ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° событий...

    # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° пропуска мячика
    if ball_x < 0:
        player2_score += 1
        if player2_score == 5:
            # ПобСда ΠΈΠ³Ρ€ΠΎΠΊΠ° 2
            running = False
        else:
            # Π’ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹
            ball_x = width / 2
            ball_y = height / 2
            ball_speed_x *= -1
            ball_speed_y *= -1
    
    if ball_x > width:
        player1_score += 1
        if player1_score == 5:
            # ПобСда ΠΈΠ³Ρ€ΠΎΠΊΠ° 1
            running = False
        else:
            # Π’ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹
            ball_x = width / 2
            ball_y = height / 2
            ball_speed_x *= -1
            ball_speed_y *= -1

    # ОбновлСниС ΠΎΡ‡ΠΊΠΎΠ²
    player1_text = font.render(f"Π˜Π³Ρ€ΠΎΠΊ 1: {player1_score}", True, white)
    player2_text = font.render(f"Π˜Π³Ρ€ΠΎΠΊ 2: {player2_score}", True, white)

    # ОбновлСниС экрана...

Π’ этом ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для подсчСта ΠΎΡ‡ΠΊΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ³Ρ€ΠΎΠΊΠ° ΠΈ отрисовку этих ΠΎΡ‡ΠΊΠΎΠ² Π½Π° экранС. Если мячик пропустит ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ², Π΅Π³ΠΎ счСт увСличиваСтся Π½Π° 1. Когда ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² Π½Π°Π±Π΅Ρ€Π΅Ρ‚ 5 ΠΎΡ‡ΠΊΠΎΠ², ΠΈΠ³Ρ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΈ этот ΠΈΠ³Ρ€ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ объявлСн ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ рассмотрСли основы написания ΠΈΠ³Ρ€Ρ‹ "ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³" Π½Π° языкС Python. ΠœΡ‹ создали ΠΎΠΊΠ½ΠΎ ΠΈΠ³Ρ€Ρ‹, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ€Π°ΠΊΠ΅Ρ‚ΠΊΠΈ ΠΈ мячик, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ столкновСния ΠΈ подсчитали ΠΎΡ‡ΠΊΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ эту ΠΈΠ³Ρ€Ρƒ своими идСями ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ³Ρ€ Π½Π° python. Пинг-Понг (Ping Pong) Π½Π° Python Π§Π°ΡΡ‚ΡŒ 1

Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Пинг-Понг Π½Π° Python ΠΈ PyGame

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈΠ³Ρ€Ρƒ Ping Pong Π½Π° Python Π·Π° 30 сСкунд!

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ”‘ Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ Π½Π° Python: простой шаг Π·Π° шагом Π³Π°ΠΉΠ΄

πŸ”‘ Как привСсти число ΠΊ строкС Π² Python: пошаговоС руководство

πŸ”§ Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ set Π² Python: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°

πŸ“ Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ ΠΏΠΎΠ½Π³ Π½Π° Python: простой Π³Π°ΠΉΠ΄ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Π² Python: объяснСниС ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ 🐍

πŸ”§ Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅Π±-сайт Π½Π° Python: практичСскоС руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

πŸ€– Как ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±ΠΎΡ‚Π° Π² Π’Π΅Π»Π΅Π³Ρ€Π°ΠΌΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΈΡ‚ΠΎΠ½: подробная инструкция для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ