7.1 Arcade Cabinet — Q2 Synthesis
SLO 3
Describe, design, implement, and test structured programs using currently accepted methodology.
Design comes first here, and it is yours: a genre, one core mechanic, a win condition. Then a build order that keeps the game runnable at every stage, and a playtest with someone who has not seen it — the testing half of the outcome, done by watching a stranger rather than re-reading your own code.
Learning Objectives
By the end of this section, you will be able to:
- Design an original game concept from a genre, a core mechanic, and a win/lose condition.
- Scope a project to what is realistically buildable, cutting features rather than compressing time.
- Identify which Chapter 5-6 techniques a design calls for, before writing a line of code.
- Assemble a complete original game — title screen, gameplay, persistence — entirely from your own code.
- Evaluate a finished game against a concrete rubric and identify what to polish next.
7.1.1 What a Synthesis Project Is (and Isn't)
Every section in Chapters 5 and 6 taught you a moSHion technique by building the same running example alongside the book — a player, a floor, a coins group, a camera, a state machine. By the end of Chapter 6 that example had become a small, complete game.
This section is the opposite kind of exercise. There is no starter code here, no walkthrough, and no "Try It Now" with a solution to check your work against. You are going to design and build an original game — your own genre, your own mechanic, your own art direction (even if that direction is "colored rectangles") — using the same moSHion tools Chapters 5 and 6 already taught you.
A project that requires combining multiple previously-taught techniques into one original piece of work, as opposed to an exercise that practices a single technique in isolation. The design decisions are the exercise, not a single correct answer to check against.
This is not a blank check. "Build something" is not a specification, and a synthesis project without a specification is how ambitious projects quietly become unfinished ones. §7.1.3 gives you a concrete list of requirements your game must meet — the freedom is in what game, not in whether it has a scoring system.
7.1.2 Choosing Your Concept
Before opening an editor, answer these five questions in writing. This is the one place in this section that looks like a Try It Now — except there's no code and no solution key, because the point is that your answers should be genuinely yours.
- Genre. In one phrase: what kind of game is this? ("A platformer," "a top-down dodge-the-obstacles game," "a physics puzzle.")
- Core mechanic. What is the one thing the player does, over and over, that the whole game is built around? Not a list — one sentence. (The courtyard game's core mechanic was "walk and jump to collect coins while avoiding bombs.")
- Win condition. What has to happen for the player to succeed? Reach a place, hit a score, survive a duration?
- Lose condition (optional but recommended). What happens if the player fails? Not every game needs one — a purely exploratory game might not — but most do.
- The one sentence pitch. Combine the above into a single sentence you could say out loud to a classmate in five seconds. If you can't compress your idea into one sentence, it's probably not scoped yet — go back to question 2.
The single repeated action a game is built around — the thing the player does most often and that every other system (scoring, obstacles, level design) exists to support or complicate.
A common first-timer mistake is designing three or four different mechanics at once — a game that's part platformer, part puzzle, part shooter. Pick one core mechanic and make it good. §6.9's Challenge added a "Get Ready!" countdown to a game whose core mechanic was already fully working; that's the right order — depth on one idea, then polish, not breadth across several half-built ones.
7.1.3 The Requirements
Whatever your concept, your finished game must include everything in this table. Each requirement names exactly where in Chapters 5-6 you already learned how to build it — this section teaches no new moSHion API.
| Requirement | Where you learned it |
|---|---|
A player sprite with a real physics response — gravity, bounciness, friction, or applyForce (not just .vel alone) |
Chapter 5, §6.3 |
At least one Group with overlaps()-based scoring or hazard interaction |
§6.1-6.2 |
| Either a camera following the player through a world larger than one canvas, or a state machine with at least three states (e.g. title/play/end) — at least one of the two | §6.4 or §6.6 |
Persistent data via storeItem/getItem (a high score, unlocked levels, anything that survives a reload) |
§6.5 |
| An original win or lose condition you designed yourself — not a copy of the courtyard's "reach x = 820" | §7.1.2 |
Two more, optional but worth the reach:
| Stretch requirement | Where you learned it |
|---|---|
A clickable button or drag interaction, hit-tested with world.getSpriteAt() |
§6.7 |
A joint-based hazard or a timed event (frameCount or setTimeout) |
§6.8-6.9 |
Look at your one-sentence pitch from §7.1.2. For each required row in the table above, write one sentence describing how your specific game will satisfy it. If you can't think of a natural fit for a requirement, that's useful information now — before you've written any code — not a problem to discover halfway through building.
Worked example (using a different game than the courtyard, so you can see the pattern — not something to copy)
Pitch: "A top-down game where you steer a delivery cart through a maze of moving crates before a timer runs out."
- Physics response: the cart has
bouncinessso glancing off a crate doesn't stop it dead. - Group + overlaps: a
packagesgroup the cart collects; acratesgroup that costs time on contact. - Camera or state machine: a state machine — title, play, and a win/lose screen depending on whether the timer or the package count ran out first.
- Persistent data: best completion time saved with
storeItem. - Original win/lose: win by collecting all packages before the timer; lose if the timer hits zero first — different from the courtyard's "reach the far wall."
Notice this satisfies every requirement without touching a single moSHion API the book didn't already teach — the design work was choosing which techniques fit this game.
7.1.4 Planning Your Build Order
A synthesis project fails more often from scope than from missing skill. The fix is a build order, not more time:
- Get one thing on screen and moving first. A canvas, a player, gravity or top-down movement — nothing else. Confirm this works before adding anything.
- Add the core mechanic before any decoration. If your core mechanic is "collect items," get one item collectible before spawning twenty of them in a designed layout.
- Add scoring and the win/lose condition next. A playable loop, even an ugly one, beats a beautiful screen that does nothing.
- Add the title screen and persistence last, not first. It is tempting to build the title screen because it feels like real progress, but a polished title screen in front of an empty game is a worse deliverable than a plain "press space to start" in front of a finished one.
- Cut scope, don't compress time. If you're running out of time before this section's requirements are met, remove a planned feature rather than rushing every feature half-finished. A three-requirement game that fully works beats a five-requirement game where two are broken.
7.1.5 Playtesting and Polish
Once your game meets every requirement in §7.1.3, hand it to someone else — a classmate, a family member, anyone who hasn't watched you build it — without explaining the controls first. Watch what they do.
This order is the reverse of how most games look finished from the outside — polish is the last 10% of the work and the first 10% of what a player notices. Building in this order means that if you run out of time, what exists is playable; building title-screen-first means that if you run out of time, what exists is a menu in front of nothing.
A short checklist for what you're watching for:
- Does the win/lose condition make sense without narration? If you have to explain "oh, you win when you reach the wall," the game hasn't communicated that on its own — a text prompt or visual cue usually fixes this in one line.
- Does anything fail silently? A
changeAnitypo, a missingbreak, anoverlaps()check on the wrong group — Chapter 6's Insight Notes named several of these traps for a reason. A playtester finding a silent failure is far cheaper than a playtester finding nothing, because at least you know where to look. - Is there a moment where the player doesn't know what to do? That's a design gap, not a bug — the fix might be a requirement you already built (a HUD element, a button) that just needs to be more visible.
Run your own playtest checklist against your finished game, using the three questions above. Write down what you found — even "nothing, it all worked" is a valid, useful result to record.
Solution
There's no single correct answer here — the point is the habit, not a specific finding. A useful playtest note names something concrete and testable: "a first-time player didn't realize pressing space would jump until they'd already lost once" is actionable; "it felt fine" is not. If your test genuinely surfaced nothing, the useful record is which three things you specifically checked and confirmed, so a future revision can trust that ground was covered.
7.1.6 Challenge: Going Further
Once your game meets every requirement in §7.1.3, these are optional directions — pick one, or design your own:
- A leaderboard instead of a single high score.
storeItemcan hold an array — store the top 5 scores, sorted, instead of just one number. - A second level with different pacing. Reuse your mechanic, but change the layout, timing, or hazard density enough that it feels like a genuinely different challenge, not a recolor.
- A joint-based signature obstacle. A hazard unique to your game, built from the
HingeJoint/DistanceJoint/GlueJointtoolkit from §6.8, that no other game in the class has. - A pause menu, built the way §6.6's Challenge suggested: a frozen
'paused'state that resumes exactly where it left off.
Problem Set 7.1
Problem 1. What is the difference between a "synthesis project" and every earlier Try It Now in this book?
Solution
Step 1 — Recall what every earlier Try It Now looked like: Each earlier Try It Now practiced exactly one technique in isolation, and it came with scaffolding: starter code to begin from, a walkthrough of the steps, and a worked solution to check your result against. You were also always building the book's running example alongside it, so there was a known-correct answer to compare against.
Step 2 — Recall the definition of a synthesis project: The Definition box in §7.1.1 states that a synthesis project "requires combining multiple previously-taught techniques into one original piece of work," and adds that "the design decisions are the exercise, not a single correct answer to check against."
Step 3 — State the contrast on three axes:
- Techniques: one technique in isolation versus several (physics, groups, camera/state machine, persistence) combined into a single working whole.
- What's actually being exercised: reproducing a taught technique versus making design decisions — the choices are the work, and there is no answer key for them.
- Scaffolding: no starter code, no walkthrough, no running example to build alongside, because the finished thing is genuinely yours.
Answer: An earlier Try It Now practices a single technique in isolation, with starter code and a worked solution to check against; a synthesis project requires combining multiple previously-taught techniques into one original work, where the design decisions themselves — not a single correct answer — are the exercise.
Problem 2. Write your one-sentence pitch (from §7.1.2) here, and identify its genre, core mechanic, and win condition separately.
Solution
Step 1 — Note that there is no single correct answer: This question asks about your design, so the solution below models one complete answer — a hot-air-balloon canyon climb — so you can see the shape of a full response, the way Try It Now 7.1.1's worked example used a delivery-cart game. Your specifics should differ.
Step 2 — Write the one-sentence pitch: "A one-button game where you pilot a hot-air balloon up a canyon, grabbing fuel canisters and dodging birds, trying to reach the cloud deck before your fuel runs out." It passes the §7.1.2 test: sayable out loud in five seconds, and compressible to exactly one repeated action.
Step 3 — Identify the genre separately: A vertical one-button ascent game (dodge-and-collect).
Step 4 — Identify the core mechanic separately: Firing the burner in short bursts to control the climb. That is the one action the player repeats; fuel, birds, and the canyon layout all exist to make that thrust-timing interesting.
Step 5 — Identify the win condition separately: Reach the cloud deck at the top of the canyon before the fuel gauge hits zero. (The recommended lose condition falls out of the same design: birds cost fuel on contact, so if the fuel reaches zero first, you lose.)
Answer: Pitch: "A one-button game where you pilot a hot-air balloon up a canyon, grabbing fuel canisters and dodging birds, trying to reach the cloud deck before your fuel runs out." Genre: a vertical one-button ascent game. Core mechanic: firing the burner in bursts to control the climb. Win condition: reach the cloud deck before the fuel runs out.
Problem 3. Of the five required rows in §7.1.3's table, which one do you expect to be hardest for your specific concept? Why?
Solution
Step 1 — Note that the honest answer depends on your concept: There is no universally correct row to pick — the question is testing whether you can assess your own design. Below is one worked answer using the balloon game, showing how to justify the choice rather than just name it.
Step 2 — Check each of the five rows against the concept:
1. Physics response — easy: the game is literally gravity plus applyForce (the burner), the exact Chapter 5 pattern.
2. Group with overlaps() — easy: two groups, two checks — the fuel group adds fuel on overlap, the birds group subtracts it.
3. Camera or state machine — hard: this concept needs the camera option, since the whole point is climbing a world taller than the canvas.
4. Persistence — easy: one number (best altitude reached) saved with storeItem.
5. Original win/lose — already settled at design time in §7.1.2; it's fuel-managed, not a copy of the courtyard's \(x = 820\).
Step 3 — Pick the hardest and justify it specifically: The camera row (§6.4), for three reasons: the follow logic is subtler in a vertical world (the camera should track the balloon's \(y\) only when it's in the upper part of the screen, or sinking wouldn't feel like sinking); canisters and birds must be spawned in world coordinates above and below the current view, so positions can't be tested against the canvas the way Chapter 6's example did; and the cloud deck and start line are world coordinates too, so a camera bug silently breaks the win/lose condition, not just the view.
Answer: The camera requirement (§6.4) — it's the one row where correctness isn't locally checkable, because it interacts with spawning, the win trigger, and the lose trigger all at once. Your own answer should name a different row only if you can point to a specific reason, not a vague feeling.
Problem 4. Explain in your own words why §7.1.4 recommends building the title screen last, not first.
Solution
Step 1 — State the recommendation precisely: §7.1.4's build order puts the title screen (and persistence) at step 4, after the core mechanic and the win/lose loop are working — with the warning that a title screen "feels like real progress" even though it isn't the game.
Step 2 — Give the scheduling reason: The Insight Note makes the stakes concrete: building in this order means that if you run out of time, what exists is playable; building title-screen-first means that if you run out of time, what exists is "a menu in front of nothing." Polish is the last 10% of the work but the first 10% of what a player notices — so it's precisely the part that can safely wait.
Step 3 — Give the design reason: You can't build a good title screen before the game exists, because the title screen's job is to teach the finished game: the real controls, the real win/lose condition, the real art direction. Build it last and it's a short task describing something you know; build it first and you'll either guess wrong or redo it.
Answer: Because the title screen is polish, and §7.1.4's ordering guarantees that whatever exists when time runs out is playable. Building it last also means it can teach the actual finished game — controls, win condition, art — instead of a guessed-at version, so it's both the safer order and the better result.
Problem 5. What is the difference between "cutting scope" and "compressing time," and why does §7.1.4 recommend the former when a project is behind schedule?
Solution
Step 1 — Define cutting scope: Scope is "the set of features a project commits to" (Key Terms). Cutting scope means removing a planned feature — deciding the game ships with four finished features instead of five.
Step 2 — Define compressing time: Compressing time keeps every feature on the list but rushes each one — starting everything and finishing nothing properly. The schedule keeps its promises on paper while the work stops keeping them in reality.
Step 3 — Explain why §7.1.4 recommends cutting:
Its stated standard is that "a three-requirement game that fully works beats a five-requirement game where two are broken," and two facts make that trade correct. First, each requirement in §7.1.3 is all-or-nothing: a half-built feature earns no credit but still costs the same debugging time. Second, broken features don't stay contained — a half-finished joint hazard or a state machine with a missing break can crash the features that did work, so rushing everything can destroy what was already finished.
Answer: Cutting scope = removing a planned feature so the remaining ones get finished properly; compressing time = keeping every feature and rushing each, leaving them half-done. §7.1.4 recommends cutting because finished, working requirements are what the project is graded on — a smaller complete game beats a bigger broken one, and half-built features can even take working features down with them.
Problem 6. Name one moSHion technique from Chapter 6 (not Chapter 5) that your specific game design uses, and the section number where you learned it.
Solution
Step 1 — Check the constraint:
Chapter 6 means §6.1–§6.9: groups and overlaps(), the camera, storeItem/getItem, state machines, world.getSpriteAt(), joints, and timed events. Plain sprites and gravity are Chapter 5 material, so they don't count here even though the game uses them.
Step 2 — Name one Chapter 6 technique the design actually uses: The camera (§6.4). The canyon in the balloon game is several times taller than the canvas, so the camera follows the balloon's \(y\) position as it climbs — the world scrolls vertically past it exactly the way §6.4's example scrolled horizontally.
Step 3 — Confirm the citation is specific:
The section number is §6.4. (The same design also uses a three-state title/play/end machine from §6.6 and storeItem from §6.5, so either of those would be an equally valid answer to this question.)
Answer: The camera that follows the balloon up the canyon — a technique learned in §6.4. Any Chapter 6 technique with an honest section number and a concrete use in your game is a correct answer.
Problem 7. After running your own playtest (§7.1.5), what is one concrete thing — not a vague impression — that you would change if you had another hour to work on this project?
Solution
Step 1 — Apply the concreteness test: The solution to Try It Now 7.1.2 sets the bar: a useful playtest finding names something specific and testable ("a first-time player didn't realize pressing space would jump until they'd already lost once"), not an impression ("it felt fine"). So the answer must start with an observed behavior, not an impression.
Step 2 — Report one concrete finding: In my playtest, the first playtester steered away from the fuel canisters — they read the bright canisters as hazards because the birds were drawn as small bright shapes too — and ran out of fuel two-thirds of the way up the canyon. Per §7.1.5's checklist, that's a design gap, not a bug: the player didn't know what to do, and nothing on screen corrected them.
Step 3 — Name the specific one-hour change: Make the two groups visually unambiguous and add one line of instruction: darken the birds to silhouettes, give the canisters a slow pulsing halo, and print "Grab fuel before it runs out!" at the top of the play state. That's about an hour of work, it attacks exactly the observed failure, and it needs no new API — §7.1.5 points out the fix is usually making something you already built more visible.
Answer: I'd make the fuel canisters unmistakably collectible — dark bird silhouettes, a pulsing halo on the canisters, and a one-line "Grab fuel!" prompt in the play state — because my playtester avoided the canisters as if they were hazards and ran out of fuel partway up. Your answer must come from your own playtest; the test of concreteness is that someone else could implement and verify your change from your description alone.
Key Terms
| Term | Definition |
|---|---|
| Synthesis project | A project requiring multiple previously-taught techniques combined into one original piece of work |
| Core mechanic | The single repeated action a game is built around |
| Scope | The set of features a project commits to; cutting scope means removing a planned feature rather than rushing it |
| Playtesting | Observing someone else use a finished (or near-finished) build without explaining it first, to find gaps a builder can no longer see in their own work |