import pygame import sys import math import pygui from pygui_pygame_backend import Render, Rect, get_mouse_pos, get_mouse_pressed, MOUSEBUTTONDOWN, MOUSEBUTTONUP, MOUSEMOTION import pygui_pygame_backend as backend pygame.init() WIDTH, HEIGHT = 800, 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Bouncing Ball with Enhanced PyGUI") clock = pygame.time.Clock() # Create the backend renderer and assign the backend to PyGUI. renderer = Render(screen) pygui.PyGUI.set_backend(backend, renderer) # --------------------- # Ball Simulation # --------------------- class Ball: def __init__(self, pos, velocity, radius, color): self.pos = list(pos) self.velocity = list(velocity) self.radius = radius self.color = color def update(self): self.pos[0] += self.velocity[0] self.pos[1] += self.velocity[1] if self.pos[0] - self.radius < 0 or self.pos[0] + self.radius > WIDTH: self.velocity[0] = -self.velocity[0] if self.pos[1] - self.radius < 0 or self.pos[1] + self.radius > HEIGHT: self.velocity[1] = -self.velocity[1] def draw(self, surface): pygame.draw.circle(surface, self.color, (int(self.pos[0]), int(self.pos[1])), int(self.radius)) ball = Ball((WIDTH // 2, HEIGHT // 2), (4, 3), 30, (255, 100, 50)) ball_speed = 4.0 ball_direction = 0.0 ball_radius = 30.0 ball_color_r = 255.0 ball_color_g = 100.0 ball_color_b = 50.0 bounce_enabled = True running = True while running: dt = clock.tick(60) / 1000.0 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygui.PyGUI.handle_event(event) screen.fill((30, 30, 30)) # Draw a draggable, auto–sizing GUI window. pygui.PyGUI.Begin("Ball Controls", 10, 10) ball_speed = pygui.PyGUI.Slider("Speed", ball_speed, 1, 10) ball_direction = pygui.PyGUI.Slider("Direction", ball_direction, 0, 360) ball_radius = pygui.PyGUI.Slider("Radius", ball_radius, 10, 100) ball_color_r = pygui.PyGUI.Slider("Red", ball_color_r, 0, 255) ball_color_g = pygui.PyGUI.Slider("Green", ball_color_g, 0, 255) ball_color_b = pygui.PyGUI.Slider("Blue", ball_color_b, 0, 255) bounce_enabled = pygui.PyGUI.Checkbox("Bounce", bounce_enabled) if pygui.PyGUI.Button("Reset Position"): ball.pos = [WIDTH // 2, HEIGHT // 2] pygui.PyGUI.End() rad = math.radians(ball_direction) ball.velocity[0] = ball_speed * math.cos(rad) ball.velocity[1] = ball_speed * math.sin(rad) ball.radius = ball_radius ball.color = (int(ball_color_r), int(ball_color_g), int(ball_color_b)) if not bounce_enabled: ball.velocity[0] *= 0.5 ball.velocity[1] *= 0.5 ball.update() ball.draw(screen) pygame.display.flip() pygui.PyGUI.update() pygame.quit() sys.exit()