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
| Day | Blocks | Goal |
|---|---|---|
| 1 | Setup, Stage 1, Stage 2 | Everyone has a Trinket project and a moving cannon. |
| 2 | Stage 3, Stage 4, Stage 5 | Lasers fire, aliens spawn, aliens move. |
| 3 | Stage 6, Stage 7, Stage 8 | Score, lives, game over, timer, win state. |
| 4 | Stage 9, Stage 10, catch-up | Balance, polish, demo script. |
| 5 | Bug fixes, rehearsal, parent demo | Students show a playable arcade game. |
Day 1
| Time | Block | Minutes |
|---|---|---|
| 0:00 | Welcome + arcade game preview | 15 |
| 0:15 | Setup in Trinket | 30 |
| 0:45 | Stage 1: Build the Game Screen | 45 |
| 1:30 | Break | 10 |
| 1:40 | Stage 2: Move the Cannon | 45 |
| 2:25 | Playtest swap + cleanup | 35 |
Watch for students creating new Trinkets accidentally. The most important Day 1 habit is keeping one project.
Day 2
| Time | Block | Minutes |
|---|---|---|
| 0:00 | Warm-up run + bug check | 15 |
| 0:15 | Stage 3: Fire Lasers | 50 |
| 1:05 | Stage 4: Spawn Aliens | 40 |
| 1:45 | Break | 10 |
| 1:55 | Stage 5: Move the Aliens | 45 |
| 2:40 | Playtest: 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
| Time | Block | Minutes |
|---|---|---|
| 0:00 | Reopen Trinkets + restore from last checkpoint | 15 |
| 0:15 | Stage 6: Detect Hits and Score Points | 55 |
| 1:10 | Stage 7: Add Lives and Game Over | 45 |
| 1:55 | Break | 10 |
| 2:05 | Stage 8: Add a Timer and Win State | 45 |
| 2:50 | Room test: win once or lose once | 10 |
Day 3 is the hardest logic day. Keep students moving in small changes: run after score, run after lives, run after timer.
Day 4
| Time | Block | Minutes |
|---|---|---|
| 0:00 | Full-room playtest | 20 |
| 0:20 | Stage 9: Tune the Difficulty | 45 |
| 1:05 | Stage 10: Polish and Demo | 55 |
| 2:00 | Break | 10 |
| 2:10 | Catch-up or signature feature | 35 |
| 2:45 | Save/share check | 15 |
Only let students add a signature feature after the base game can start, score, end, and show a result.
Day 5
| Time | Block | Minutes |
|---|---|---|
| 0:00 | Reopen project + final bug list | 10 |
| 0:10 | Polish and bug fixes | 50 |
| 1:00 | Demo rehearsal | 35 |
| 1:35 | Snack + reset room | 15 |
| 1:50 | Parents arrive | 10 |
| 2:00 | Parent demo | 60 |
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:
| Stage | Highest-risk placement | Coach check |
|---|---|---|
| 1 | Drawing before turtle.done() | Cannon setup, draw_cannon(), then draw_cannon() call all happen before turtle.done(). |
| 2 | Key bindings before final drawing | Movement functions are defined before bindings; bindings and screen.listen() happen before the final draw_cannon() call. |
| 3 | First game loop | import time is at the top, fire_laser() is before bindings, and while True: replaces the old final turtle.done(). |
| 4 | Spawn logic in the loop | spawn_alien() is above the loop; the random spawn check is the first thing inside while True:. |
| 5 | Parallel loop order | Lasers move first, aliens move second, then time.sleep(...) and screen.update() stay last. |
| 6 | Collision after movement | Hit detection is inside the game loop after both movement loops, not inside spawn_alien() or fire_laser(). |
| 7 | Ending outside the loop | while True: becomes while game_running:, and GAME OVER text is after the loop exits. |
| 8 | Timer at top of loop | Frame counting and the win check are the first lines inside while game_running:. |
| 9 | Difficulty math before alien movement | current_alien_speed is calculated before the alien movement loop uses it. |
| 10 | Cleanup after loop | Remaining lasers and aliens are hidden after the loop, before final result text. |