small-projects/pygame-imgui/example.py

88 lines
2.8 KiB
Python
Raw Normal View History

2025-04-07 16:37:34 +00:00
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, autosizing 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()