Skip to main content

Python Arcade camp plan

Use this page when running Python Arcade as a 5-day summer camp.

Format

  • 5 days x 3 hours/day.
  • Day 5's last hour is the parent demo.
  • Students work in one Trinket project all week.
  • The default path is for mixed-ability campers. Stretch Challenges are for fast finishers.

At a glance

DayBlocksGoal
1Setup, Stage 1, Stage 2Everyone has a Trinket project and a moving cannon.
2Stage 3, Stage 4, Stage 5Lasers fire, aliens spawn, aliens move.
3Stage 6, Stage 7, Stage 8Score, lives, game over, timer, win state.
4Stage 9, Stage 10, catch-upBalance, polish, demo script.
5Bug fixes, rehearsal, parent demoStudents show a playable arcade game.

Day 1

TimeBlockMinutes
0:00Welcome + arcade game preview15
0:15Setup in Trinket30
0:45Stage 1: Build the Game Screen45
1:30Break10
1:40Stage 2: Move the Cannon45
2:25Playtest swap + cleanup35

Watch for students creating new Trinkets accidentally. The most important Day 1 habit is keeping one project.

Day 2

TimeBlockMinutes
0:00Warm-up run + bug check15
0:15Stage 3: Fire Lasers50
1:05Stage 4: Spawn Aliens40
1:45Break10
1:55Stage 5: Move the Aliens45
2:40Playtest: can you shoot and dodge?20

Fast students should tune laser limits or alien colors. Slow students only need a moving cannon, lasers, and at least one alien on screen by the end of Day 2.

Day 3

TimeBlockMinutes
0:00Reopen Trinkets + restore from last checkpoint15
0:15Stage 6: Detect Hits and Score Points55
1:10Stage 7: Add Lives and Game Over45
1:55Break10
2:05Stage 8: Add a Timer and Win State45
2:50Room test: win once or lose once10

Day 3 is the hardest logic day. Keep students moving in small changes: run after score, run after lives, run after timer.

Day 4

TimeBlockMinutes
0:00Full-room playtest20
0:20Stage 9: Tune the Difficulty45
1:05Stage 10: Polish and Demo55
2:00Break10
2:10Catch-up or signature feature35
2:45Save/share check15

Only let students add a signature feature after the base game can start, score, end, and show a result.

Day 5

TimeBlockMinutes
0:00Reopen project + final bug list10
0:10Polish and bug fixes50
1:00Demo rehearsal35
1:35Snack + reset room15
1:50Parents arrive10
2:00Parent demo60

Demo script:

My game is called ______.
The player controls ______ and tries to ______.
The hardest part to code was ______ because ______.
One design choice I made was ______.

Coach triage

  • If a game will not run, recover from the latest stage checkpoint idea, not from memory.
  • If a student is behind, skip Stretch Challenges and polish.
  • If a student is ahead, send them to Stage 10's signature feature.
  • If Trinket is slow, have the student run less often during typing, but still run after each finished step.

Code order audit cues

Python Arcade uses one growing main.py file. When students get stuck, first check whether the new code landed in the right zone:

StageHighest-risk placementCoach check
1Drawing before turtle.done()Cannon setup, draw_cannon(), then draw_cannon() call all happen before turtle.done().
2Key bindings before final drawingMovement functions are defined before bindings; bindings and screen.listen() happen before the final draw_cannon() call.
3First game loopimport time is at the top, fire_laser() is before bindings, and while True: replaces the old final turtle.done().
4Spawn logic in the loopspawn_alien() is above the loop; the random spawn check is the first thing inside while True:.
5Parallel loop orderLasers move first, aliens move second, then time.sleep(...) and screen.update() stay last.
6Collision after movementHit detection is inside the game loop after both movement loops, not inside spawn_alien() or fire_laser().
7Ending outside the loopwhile True: becomes while game_running:, and GAME OVER text is after the loop exits.
8Timer at top of loopFrame counting and the win check are the first lines inside while game_running:.
9Difficulty math before alien movementcurrent_alien_speed is calculated before the alien movement loop uses it.
10Cleanup after loopRemaining lasers and aliens are hidden after the loop, before final result text.