Тема: [Пост] Як створити гру за допомогою python та javascript
Цей пост для тих хто хоче розібратися як виводити прості примітиви за допомогою python та javascript. Я написав невеличку гру, можливо комусь стане в нагоді для навчальних цілей. В цьому пості запитання немає, але якщо ви хочете, ви можете оптимізувати цей код
Вам потрібно створити просту гру за допомогою бібліотеки Pygame. Гра повинна мати наступні функції:
1. На екрані має з'являтися невеликий квадрат.
2. Квадрат має рухатися випадковим чином в будь-якому напрямку та з випадковою швидкістю. Він повинен мати можливість динамічно змінювати свою швидкість та напрямок під час гри.
3. Коли гравець натискає на квадрат, на екрані має з'являтися блакитний текст, який відображає кількість кліків на квадрат.
4. Якщо гравець промахує квадрат, на екрані має з'являтися червоний текст, який відображає кількість промахів.
5. Кожен раз, коли гравець натискає на квадрат, має звучати звук. Звуковий файл має бути закодований в Base64 та включений у файл гри.
6. Коли гравець натискає на квадрат, він має з'являтися випадково на екрані, за винятком області, де знаходиться курсор.
Для реалізації гри вам необхідно використовувати бібліотеку Pygame та створити один файл Python, який містить всі необхідні коди та ресурси (включаючи звуковий файл, закодований в Base64). Ви можете використовувати вбудовані функції Pygame для створення та переміщення квадрата, відтворення звуків та виявлення натискань миші. Ви також повинні використовувати функції генерації випадкових чисел для керування рухом та розміщенням квадрата. Нарешті, ви повинні відображати текст за допомогою функцій рендерингу шрифтів Pygame.
import pygame
import random
import math
import base64
import io
# Ініціалізуйте Pygame
pygame.init()
# Константи
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
SQUARE_SIZE = 50
FPS = 60
FONT_SIZE = 24
# Створіть вікно
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
clock = pygame.time.Clock()
# Приклад даних звуку, закодованих в base64
base64_sound = "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"
# Розшифруйте дані з base64 у бінарний формат
sound_data = base64.b64decode(base64_sound)
# Завантажте звук з бінарних даних в пам'ять
sound = pygame.mixer.Sound(file=io.BytesIO(sound_data))
# Створіть шрифт
font = pygame.font.SysFont(None, FONT_SIZE)
# Визначте клас квадратів
class Square(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((SQUARE_SIZE, SQUARE_SIZE))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
self.rect.center = (random.randint(SQUARE_SIZE, WINDOW_WIDTH - SQUARE_SIZE), random.randint(SQUARE_SIZE, WINDOW_HEIGHT - SQUARE_SIZE))
self.speed = random.randint(1, 10)
self.direction = random.uniform(0, 2 * math.pi)
def update(self):
self.rect.move_ip(self.speed * math.cos(self.direction), self.speed * math.sin(self.direction))
# Змінюйте напрямок та швидкість випадковим чином
if random.random() < 0.01:
self.speed = random.randint(1, 10)
if random.random() < 0.01:
self.direction = random.uniform(0, 2 * math.pi)
# Відбивайте квадрати від меж екрану
if self.rect.left < 0 or self.rect.right > WINDOW_WIDTH:
self.direction = math.pi - self.direction
if self.rect.top < 0 or self.rect.bottom > WINDOW_HEIGHT:
self.direction = -self.direction
# Створіть спрайти
all_sprites = pygame.sprite.Group()
square = Square()
all_sprites.add(square)
# Визначте лічильники кліків та промахів
click_count = 0
miss_count = 0
# Головний цикл гри
running = True
while running:
# Обробити події
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.MOUSEBUTTONDOWN:
# Перевірити, чи натиснуто на квадрат
if square.rect.collidepoint(event.pos):
click_count += 1
sound.play()
square.kill()
square = Square()
all_sprites.add(square)
else:
miss_count += 1
# Оновити спрайти
all_sprites.update()
# Намалювати спрайти
screen.fill((255, 255, 255))
all_sprites.draw(screen)
# Намалювати лічильники кліків і промахів
click_text = font.render("Кліки: {}".format(click_count), True, (0, 0, 255))
screen.blit(click_text, (10, 10))
miss_text = font.render("Промахи: {}".format(miss_count), True, (255, 0, 0))
screen.blit(miss_text, (10, FONT_SIZE + 10))
# Оновити екран
pygame.display.flip()
# Зачекати на наступний кадр
clock.tick(FPS)
# Вийти з Pygame
pygame.quit()