Skip to the content.

PyGame Animation Demo

This game demonstrates PyGame animation.

'''
Code copied and adapted from https://inventwithpython.com/pygame/chapter2.html
'''

import sys
import random
import pygame

pygame.init()

FPS = 30 # Frames per second
fps_clock = pygame.time.Clock() # Helps us make sure our programs run at a certain maximum FPS
                                # It'll put small pauses each iteration through our game loop

# Setup the window
width = 400
height = 300
display_surface = pygame.display.set_mode([width, height])
pygame.display.set_caption('Catmation!')

cat_img = pygame.image.load('media/cat.png')
cat_x = 10
cat_y = 10

direction = 'left'
while True: # Enter the game loop
    display_surface.fill([255, 255, 255])

    # Position the cat randomly
    # cat_x = random.randint(0, width)
    # cat_y = random.randint(0, height)

    # CHALLENGE: have the cat infinitely pace back and forth (move to the right
    #   until it reaches an edge, then move left, etc)

    # -- Challenge code --
    if direction == 'right':
        # Move to the right
        cat_x += 5
        if cat_x >= 280: # Need to change directions
            direction = 'left'
            cat_img = pygame.transform.flip(cat_img, True, False)


    elif direction == 'left':
        # Move to the left
        cat_x -= 5
        if cat_x <= 20: # Need to change directions
            direction = 'right'
            cat_img = pygame.transform.flip(cat_img, True, False)

    # Question: why does the back and forth look the way it does?
    # Follow-up: can you make the cat go in a square loop?
    #            - What about a circular loop?
    # Follow-up: can you make the cat face the direction it's moving?
    #            - Look into pygame.transform

    # Update cat
    display_surface.blit(cat_img, [cat_x, cat_y]) # Blit draws something on the surface

    # Setup the events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    # Update the screen
    pygame.display.update()
    fps_clock.tick(FPS)     # Tick the clock!

|>> download catimation_finished.py