Загрузка данных
import pygame
import random
pygame.init()
# Размеры окна
WIDTH = 1000
HEIGHT = 800
screen = pygame.display.set_mode((WIDTH, HEIGHT))
clock = pygame.time.Clock()
FPS = 30
# Переменные для ракеток
x_1 = 0
y_1 = 300
x_2 = WIDTH - 20
y_2 = 300
width = 20
height = 180
speed = 8
flag = 0
flag_2 = 0
# Шрифт
my_font = pygame.font.SysFont(None, 35)
text_win_left = my_font.render("Левая сторона победила", False, (255, 100, 100))
text_win_right = my_font.render("Правая сторона победила", False, (100, 100, 255))
def reset_game():
"""Функция для сброса состояния игры"""
global x, y, flag_x, flag_y, R, color_circle, speed, game_over
x = WIDTH // 2
y = HEIGHT // 2
flag_x = 1
flag_y = 1
color_circle = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
speed = 10
game_over = False
# Переменные для мяча
flag_x = 1
flag_y = 1
speed_1 = 10
R = 20
color_circle = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# Флаг завершения игры
game_over = False
# Инициализация игры
reset_game()
# Основной цикл
running = True
while running:
# Обработка событий
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if not game_over:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
flag = -1
if event.key == pygame.K_s:
flag = 1
if event.key == pygame.K_UP:
flag_2 = -1
if event.key == pygame.K_DOWN:
flag_2 = 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s:
flag = 0
if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
flag_2 = 0
else:
# Обработка нажатия мыши по кнопке "Начать заново"
if event.type == pygame.MOUSEBUTTONDOWN:
mouse_pos = event.pos
button_rect = pygame.Rect(WIDTH//2 - 100, HEIGHT//2 + 50, 200, 50)
if button_rect.collidepoint(mouse_pos):
reset_game()
# Логика ракеток
if not game_over:
y_1 += speed * flag
y_2 += speed * flag_2
y_1 = max(0, min(HEIGHT - height, y_1))
y_2 = max(0, min(HEIGHT - height, y_2))
# Логика мяча
x += speed_1 * flag_x
y += speed_1 * flag_y
# Отскок мяча от верхней и нижней границы
if y - R <= 0:
flag_y = 1
if y + R >= HEIGHT:
flag_y = -1
# Отскок мяча от левой ракетки
if (x - R < x_1 + width) and (y > y_1) and (y < y_1 + height) and (flag_x < 0):
flag_x = 1
color_circle = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# Отскок мяча от правой ракетки
if (x + R > x_2) and (y > y_2) and (y < y_2 + height) and (flag_x > 0):
flag_x = -1
color_circle = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
# Проигрыш за левый или правый
if x - R <= 0:
game_over = True
winner_text = text_win_right # Правая сторона победила
if x + R >= WIDTH:
game_over = True
winner_text = text_win_left # Левая сторона победила
# Отрисовка
screen.fill((0, 0, 0))
if game_over:
# Вывод сообщение о победе
screen.blit(winner_text, (350, 350))
# Рисуем кнопку "Начать заново"
button_rect = pygame.Rect(WIDTH//2 - 100, HEIGHT//2 + 50, 200, 50)
pygame.draw.rect(screen, (0, 255, 0), button_rect)
button_text = my_font.render("Начать заново", True, (0, 0, 0))
text_rect = button_text.get_rect(center=button_rect.center)
screen.blit(button_text, text_rect)
else:
# Отрисовка мяча и ракеток
pygame.draw.circle(screen, color_circle, (x, y), R)
pygame.draw.rect(screen, (255, 0, 0), (x_1, y_1, width, height))
pygame.draw.rect(screen, (0, 0, 255), (x_2, y_2, width, height))
pygame.display.flip()
clock.tick(FPS)
pygame.quit()