In total, there are three Sparky's that can be on the screen at any given time. To keep game play interesting, each of their appearances on screen are randomized.
The first way that they're randomized is by having varying delays using time.monotonic(), similar to how Blinka's animation is delayed without slowing down the loop. Each Sparky's generation is delayed by 0.03 seconds, 0.07 seconds and 0.12 seconds respectively. This allows their appearances to be staggered.
Once the defined time has elapsed, then there is a check to see if a random integer matches with a predefined integer: 3, 7 and 12 respectively.
If the random integer matches, then the sparky_state for the corresponding Sparky sprite is updated to True, which allows them to appear on screen. If the random integer is not a match, then the time.monotonic() count begins again.
# Sparkys are generated using a staggered delay
# and matching an int to a random int
# 1st Sparky
if (blue + 0.03) < time.monotonic():
if randint(1, 15) == 3:
sparky_states[0] = True
blue = time.monotonic()
# 2nd Sparky
if (smoke + 0.07) < time.monotonic():
if randint(1, 15) == 7:
sparky_states[1] = True
smoke = time.monotonic()
# 3rd Sparky
if (monster + 0.12) < time.monotonic():
if randint(1, 15) == 12:
sparky_states[2] = True
monster = time.monotonic()
When a Sparky's state is True, their x coordinate location updates by 1 pixel continuously, allowing them to smoothly move across the screen.
The corresponding index in the sparky_x array is also updated to hold the x coordinate. This is used later in the loop for discerning whether Blinka and a Sparky have a collision.
Finally, when a Sparky's x location is -16 pixels, which is off-screen, their x coordinate is reset to 100 to prepare them for the next time they have a random integer match.
if sparky_states[0] is True:
sparky0_grid.x -= 1
sparky_x[0] = sparky0_grid.x
display.refresh(target_frames_per_second=120)
# when a Sparky is 16 pixels off the display,
# it goes back to its starting position
if sparky0_grid.x is -16:
sparky_states[0] = False
sparky0_grid.x = 100
sparky_x[0] = sparky0_grid.x
# 2nd Sparky
if sparky_states[1] is True:
sparky1_grid.x -= 1
sparky_x[1] = sparky1_grid.x
display.refresh(target_frames_per_second=120)
if sparky1_grid.x is -16:
sparky_states[1] = False
sparky1_grid.x = 100
sparky_x[1] = sparky1_grid.x
# 3rd Sparky
if sparky_states[2] is True:
sparky2_grid.x -= 1
sparky_x[2] = sparky2_grid.x
display.refresh(target_frames_per_second=120)
if sparky2_grid.x is -16:
sparky_states[2] = False
sparky2_grid.x = 100
sparky_x[2] = sparky2_grid.x
Page last edited March 08, 2024
Text editor powered by tinymce.