You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.0 KiB
88 lines
2.0 KiB
import pygame
|
|
import random
|
|
import math
|
|
|
|
# Initialize Pygame and mixer
|
|
pygame.init()
|
|
pygame.mixer.init()
|
|
|
|
# Set up the display
|
|
WIDTH, HEIGHT = 800, 600
|
|
screen = pygame.display.set_mode((WIDTH, HEIGHT))
|
|
pygame.display.set_caption("Psychedelic Soundscape Explorer")
|
|
|
|
# Colors
|
|
BLACK = (0, 0, 0)
|
|
|
|
# Player
|
|
player_pos = [WIDTH // 2, HEIGHT // 2]
|
|
player_radius = 20
|
|
|
|
# Sound zones
|
|
sound_zones = []
|
|
for _ in range(5):
|
|
sound_zones.append(
|
|
[
|
|
random.randint(0, WIDTH),
|
|
random.randint(0, HEIGHT),
|
|
random.randint(50, 150),
|
|
]
|
|
)
|
|
|
|
# Create sounds
|
|
sounds = [pygame.mixer.Sound(f"sound{i}.wav") for i in range(1, 6)]
|
|
|
|
# Main game loop
|
|
running = True
|
|
clock = pygame.time.Clock()
|
|
|
|
while running:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
running = False
|
|
|
|
# Move player
|
|
keys = pygame.key.get_pressed()
|
|
if keys[pygame.K_LEFT]:
|
|
player_pos[0] -= 5
|
|
if keys[pygame.K_RIGHT]:
|
|
player_pos[0] += 5
|
|
if keys[pygame.K_UP]:
|
|
player_pos[1] -= 5
|
|
if keys[pygame.K_DOWN]:
|
|
player_pos[1] += 5
|
|
|
|
# Clear the screen
|
|
screen.fill(BLACK)
|
|
|
|
# Draw and play sounds
|
|
for i, (x, y, radius) in enumerate(sound_zones):
|
|
distance = math.sqrt(
|
|
(player_pos[0] - x) ** 2 + (player_pos[1] - y) ** 2
|
|
)
|
|
if distance < radius:
|
|
intensity = 1 - (distance / radius)
|
|
sounds[i].set_volume(intensity)
|
|
sounds[i].play(-1)
|
|
|
|
# Create trippy color based on distance and sound
|
|
r = int(255 * math.sin(intensity * math.pi / 2))
|
|
g = int(255 * math.cos(intensity * math.pi / 2))
|
|
b = int(255 * (1 - intensity))
|
|
|
|
pygame.draw.circle(
|
|
screen, (r, g, b), (x, y), int(radius * intensity), 2
|
|
)
|
|
else:
|
|
sounds[i].stop()
|
|
|
|
# Draw player
|
|
pygame.draw.circle(
|
|
screen, (255, 255, 255), player_pos, player_radius
|
|
)
|
|
|
|
pygame.display.flip()
|
|
clock.tick(60)
|
|
|
|
pygame.quit()
|