Learn what a program is, explore the SDLC, and write your first JavaScript using console.log().
Understand how to store and work with data using let, const, and typeof.
Practice arithmetic, string concatenation, and comparison operators.
Control program flow with if/else, ternary, and switch statements.
Implement simple algorithms following step-by-step pseudocode.
Learn what algorithms are and practice writing pseudocode.
Repeat actions using for, while, and do-while loops.
Learn what a software library is, import @jscad/modeling, and write your first 3D program.
Create 2D primitives and apply transforms to build compositions.
Use union, subtract, and intersect to combine and cut 2D shapes.
A dynamic block falls under gravity and lands on a static floor. Read the example, then experiment.
Your first q5play sketch: a canvas, a sprite, a background color.
Build a one-sprite platformer: arrow keys move, space jumps — but only when on the ground.
Learn how bounciness and friction change how sprites feel.
Build a two-wheeled car using WheelJoints and drive it up a ramp with arrow keys.
A rod hangs from a fixed anchor using a HingeJoint. Click to give it a push.
Catch falling apples with a basket. Learn overlap detection and per-frame spawning.
A ship flies through asteroids. Bullets (a Group) destroy asteroids on overlap; hitting one ends the game.
Groups let you treat many sprites as one. Create, configure, and iterate a Group.
Cycle frames procedurally: rotate, scale, recolor. A lightweight taste of animation without sprite sheets.
A level wider than the canvas. The camera follows the player, making the world scroll.
A multi-platform level with camera follow, a goal flag, and a win condition.
Connect two sprites with different joint types. See how each joint constrains motion.
Drag a ball back from a fixed anchor, release, and watch it launch.
Two sprites, two control schemes, one ball. Push the ball past the other player's side to score.