Week 2: Building Interactive Games
Class 3: Game Physics and Movement
3.1 Understanding Game Physics
Game physics involves simulating real-world physics to make games more realistic and engaging. Basic physics principles like velocity, acceleration, and gravity can make movements and interactions in a game feel natural.
3.1.1 Velocity and Acceleration
- Velocity is the rate of change of an object's position.
- Acceleration is the rate of change of velocity.
Example: Basic Movement with Velocity
import pygame
# Initialize Pygame
pygame.init()
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Basic Movement with Velocity")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Player setup
player = pygame.Rect(375, 275, 50, 50)
velocity = pygame.Vector2(0, 0)
# Main game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Keyboard input for movement
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
velocity.x = -5
elif keys[pygame.K_RIGHT]:
velocity.x = 5
else:
velocity.x = 0
if keys[pygame.K_UP]:
velocity.y = -5
elif keys[pygame.K_DOWN]:
velocity.y = 5
else:
velocity.y = 0
# Update player position
player.move_ip(velocity)
# Clear screen
screen.fill(white)
# Draw player
pygame.draw.rect(screen, black, player)
# Update display
pygame.display.flip()
pygame.quit()
3.1.2 Gravity Simulation
Gravity adds realism to games by pulling objects downwards, simulating the effect of gravity on Earth.
Example: Adding Gravity to a Falling Object
import pygame
# Initialize Pygame
pygame.init()
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Gravity Simulation")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Object setup
object = pygame.Rect(375, 50, 50, 50)
gravity = 0.5
velocity_y = 0
# Main game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Apply gravity
velocity_y += gravity
object.y += velocity_y
# Reset object position if it falls off-screen
if object.y > 600:
object.y = 50
velocity_y = 0
# Clear screen
screen.fill(white)
# Draw object
pygame.draw.rect(screen, black, object)
# Update display
pygame.display.flip()
pygame.quit()
3.2 Bouncing and Reflecting Objects
To create dynamic games, it's often necessary to simulate bouncing objects, such as a ball rebounding off walls.
Example: Bouncing Ball Simulation
import pygame
# Initialize Pygame
pygame.init()
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Bouncing Ball")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Ball setup
ball = pygame.Rect(375, 275, 50, 50)
velocity = pygame.Vector2(4, 4)
# Main game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Move ball
ball.move_ip(velocity)
# Bounce off walls
if ball.left <= 0 or ball.right >= 800:
velocity.x = -velocity.x
if ball.top <= 0 or ball.bottom >= 600:
velocity.y = -velocity.y
# Clear screen
screen.fill(white)
# Draw ball
pygame.draw.ellipse(screen, black, ball)
# Update display
pygame.display.flip()
pygame.quit()
3.3 Mini Project: Bouncing Ball Game
Goal: Create a game where a ball bounces around the screen, changing direction when it hits the walls.
3.3.1 Code Example
import pygame
# Initialize Pygame
pygame.init()
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Bouncing Ball Game")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Ball setup
ball = pygame.Rect(375, 275, 50, 50)
velocity = pygame.Vector2(3, 3)
# Main game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Move ball
ball.move_ip(velocity)
# Bounce off walls
if ball.left <= 0 or ball.right >= 800:
velocity.x = -velocity.x
if ball.top <= 0 or ball.bottom >= 600:
velocity.y = -velocity.y
# Clear screen
screen.fill(white)
# Draw ball
pygame.draw.ellipse(screen, black, ball)
# Update display
pygame.display.flip()
pygame.quit()
3.4 Exercises
-
Add Obstacles:
- Introduce stationary obstacles that the ball can bounce off.
-
Change Ball Color:
- Make the ball change color each time it bounces off a wall.
Class 4: Working with Sounds and Music
4.1 Adding Sound Effects and Music
Sound effects and music are crucial for creating an immersive game experience. Pygame allows you to easily add sound to your games.
4.1.1 Loading and Playing Sounds
- To use sound in Pygame, you must first load the sound file and then play it.
Example: Adding a Sound Effect
import pygame
# Initialize Pygame and Mixer
pygame.init()
pygame.mixer.init()
# Load sound effect
bounce_sound = pygame.mixer.Sound("bounce.wav")
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Sound Effects")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Ball setup
ball = pygame.Rect(375, 275, 50, 50)
velocity = pygame.Vector2(3, 3)
# Main game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Move ball
ball.move_ip(velocity)
# Bounce off walls and play sound
if ball.left <= 0 or ball.right >= 800:
velocity.x = -velocity.x
bounce_sound.play() # Play sound on bounce
if ball.top <= 0 or ball.bottom >= 600:
velocity.y = -velocity.y
bounce_sound.play()
# Clear screen
screen.fill(white)
# Draw ball
pygame.draw.ellipse(screen, black, ball)
# Update display
pygame.display.flip()
pygame.quit()
4.1.2 Background Music
- You can also add background music that plays continuously during the game.
Example: Adding Background Music
import pygame
# Initialize Pygame and Mixer
pygame.init()
pygame.mixer.init()
# Load and play background music
pygame.mixer.music.load("background_music.mp3")
pygame.mixer.music.play(-1) # Loop indefinitely
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Background Music")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Main game loop
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Clear screen
screen.fill(white)
# Update display
pygame.display.flip()
pygame.quit()
4.2 Triggering Sounds Based on Events
Sound effects can be triggered based on specific game events, such as collisions or player actions.
Example: Sound Memory Game
python
import pygame
import random
# Initialize Pygame and Mixer
pygame.init()
pygame.mixer.init()
# Load sounds
sounds = [pygame.mixer.Sound(f"sound{i}.wav") for i in range(4)]
# Screen setup
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Sound Memory Game")
# Colors
white = (255, 255, 255)
black = (0, 0, 0)
# Generate random sequence of sounds
sequence = [random.choice(sounds) for _ in range(5)]
current_step = 0
# Main game loop
running = True
while running: