From 7bc1c13a75060422b89ca3771d98df8ebf2727e6 Mon Sep 17 00:00:00 2001 From: cecilkorik Date: Wed, 31 Jan 2024 22:18:16 -0500 Subject: [PATCH] attempt to make compatible with fast PCs --- bouncy.py | 46 +++++++++++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/bouncy.py b/bouncy.py index d787840..d47ea43 100644 --- a/bouncy.py +++ b/bouncy.py @@ -8,24 +8,36 @@ import random pygame.init() -def handle_keys(keys): - global bounce, speed_player, trails, dir_player, color_player + +repeat = 0 + +def handle_keys(keys, elapsed): + global bounce, speed_player, trails, dir_player, color_player, repeat + def repeatdelay(wait): + global repeat + repeat += elapsed + if repeat == elapsed: + return True + if repeat >= wait: + repeat = 0 + return True + return False for key in keys: if key == K_b: bounce = not bounce elif key == K_q: sys.exit(0) - elif key == K_c: + elif key == K_c and repeatdelay(0.2): color_player = (random.randint(0,255), random.randint(0,255), random.randint(0,255)) - elif key == K_t: + elif key == K_t and repeatdelay(1.0): trails = not trails - elif key == K_UP: - speed_player += 0.01 - elif key == K_DOWN: - speed_player -= 0.01 - elif key == K_LEFT: + elif key == K_UP and repeatdelay(0.02): + speed_player += 0.05 + elif key == K_DOWN and repeatdelay(0.02): + speed_player -= 0.05 + elif key == K_LEFT and repeatdelay(0.02): dir_player -= (math.pi / 180.0) - elif key == K_RIGHT: + elif key == K_RIGHT and repeatdelay(0.02): dir_player += (math.pi / 180.0) def move(coords, dir, mag): @@ -57,6 +69,7 @@ trails = False scr.fill((0,0,0)) +last_frame = pygame.time.get_ticks() keys = [] while True: @@ -69,12 +82,15 @@ while True: pass else: keys += [ev.key] - - - handle_keys(keys) + + pygame.time.wait(1) + elapsed_ms = pygame.time.get_ticks() - last_frame + elapsed = elapsed_ms / 1000.0 + last_frame = pygame.time.get_ticks() + handle_keys(keys, elapsed) pygame.event.pump() - loc_new = move(loc_player, dir_player, speed_player) + loc_new = move(loc_player, dir_player, speed_player * 10.0 * elapsed) if loc_new[0] < 5: if not bounce: @@ -98,7 +114,7 @@ while True: dir_player = bouncedir(0, dir_player) if bounce: - loc_new = move(loc_player, dir_player, speed_player) + loc_new = move(loc_player, dir_player, speed_player * 10.0 * elapsed) if not trails: pygame.draw.circle(scr, (0,0,0), loc_player, 2, 1)