Students judge which games suit Arcade by the building blocks each game needs, see that sprites pass through each other, change one building block to change a game's genre, then pitch and prototype a game that fits.
Load these into Waypoints Prepare: choose Load URL and paste the copied address, or download the file and import it. In Prepare, the worksheet's Teacher edition shows the answers; the student copy hides them.
Predict and Run 8 min · Investigate 12 min · Modify 12 min · Pitch card and prototype 15 min · Car 3 min
A game engine is the part of a game tool that does common jobs for you. Arcade's engine moves sprites by their speed and gravity, notices overlaps, keeps score, lives and a countdown, runs timers, fires projectiles and (outside this course) draws tilemaps: walls, floors and a scrolling camera made in a tile editor.
The rule of thumb for students: a game suits Arcade when it is made of those building blocks.
The key fact behind "realistic physics": an overlap is only an event. Sprites pass through each other unless blocks move or destroy them. The challenge primer has the full table. These engine facts were written from knowledge of Arcade; check anything a student disputes in the live editor.
Letting go of a dream game that Arcade can't make, and finding its core. Ask what the fun part is in one sentence and which building blocks it needs.
| What you will see | A question to ask | The fix |
|---|---|---|
| A student's dream game is 3D, online or physics-heavy. | What is the fun part of that game, in one sentence? | Keep the fun part and change the form: a top-down 2D racer instead of a 3D one; a 'knock the cans' game where hit crates are destroyed instead of toppling. |
| The dodger's rocks still give points. | Which kinds does the overlap block name? | It must be Player and Enemy, and the falling sprite must be made of kind Enemy too. |
| Shots pass through the rocks. | What kind is a projectile? | Projectile. Add an overlap for Projectile and Enemy (a spiral from Projectiles). |
One possible solution for each task. Other correct programs are fine.

let fruit: Sprite = null
scene.setBackgroundColor(9)
let basket = sprites.create(img`
e . . . . . . e
e e e e e e e e
. e e e e e e .
`, SpriteKind.Player)
basket.setPosition(80, 110)
controller.moveSprite(basket, 100, 0)
basket.setStayInScreen(true)
game.onUpdateInterval(1000, function () {
fruit = sprites.create(img`
. c c .
c b c c
c c c c
. c c .
`, SpriteKind.Enemy)
fruit.setPosition(randint(10, 150), 0)
fruit.vy = 40
fruit.setFlag(SpriteFlag.AutoDestroy, true)
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
otherSprite.destroy()
info.changeLifeBy(-1)
})

let fruit: Sprite = null
scene.setBackgroundColor(9)
let basket = sprites.create(img`
e . . . . . . e
e e e e e e e e
. e e e e e e .
`, SpriteKind.Player)
basket.setPosition(80, 110)
controller.moveSprite(basket, 100, 0)
basket.setStayInScreen(true)
game.onUpdateInterval(1000, function () {
fruit = sprites.create(img`
. c c .
c b c c
c c c c
. c c .
`, SpriteKind.Enemy)
fruit.setPosition(randint(10, 150), 0)
fruit.vy = 40
fruit.setFlag(SpriteFlag.AutoDestroy, true)
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
otherSprite.destroy()
info.changeLifeBy(-1)
})
controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
sprites.createProjectileFromSprite(img`
5
5
`, basket, 0, -100)
})
sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite, otherSprite) {
sprite.destroy()
otherSprite.destroy()
info.changeScoreBy(1)
})
Open task: any program that does what the step asks.

scene.setBackgroundColor(15)
let ship = sprites.create(img`
. . 1 . .
. 1 1 1 .
1 1 1 1 1
`, SpriteKind.Player)
ship.setPosition(80, 100)
controller.moveSprite(ship)
let star = sprites.create(img`
. 5 .
5 5 5
. 5 .
`, SpriteKind.Food)
star.setPosition(randint(10, 150), randint(10, 60))
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function (sprite, otherSprite) {
otherSprite.setPosition(randint(10, 150), randint(10, 60))
info.changeScoreBy(1)
})
Open task: any program that does what the step asks.
Stretch: Pick a famous game and write two pitch cards: one for a version that fits Arcade, and a list of what would have to change. Or prototype the hard part first: a cursor moved with the controller for a board game.
Support: Give students a pitch card template with the building blocks listed as tick boxes, and three example ideas to choose from (catch, dodge, maze).
Name one game Arcade is built for and one that is not a good fit, with a reason for each.
For example: a space shooter is built for it (projectiles, kinds and lives are built-in blocks); Angry Birds is not a good fit (sprites do not push or topple; there is no physics engine).
The optional lesson Your own game grows the prototype into a game in milestones. Beyond the course: tilemaps for mazes and platformers, animation frames, and extensions. Skillmaps (arcade.makecode.com/skillmaps): 3-in-a-row and Code an Adventure stretch the engine into genres it does not do out of the box. Games in text code (microStudio) and 3D engines are the next step for games Arcade cannot do.