Teach a 45-minute game-design lesson
One lesson, one room, no prior coding: every student writes a short story in plain English and walks out having played the 3D game it built.
Why this lesson works
Before the pedagogy, the constraints — because those are what usually kill a computing lesson before it starts.
- No accounts for children. You create a class and get a code. Students join with the code and a nickname. No email address, no password, no sign-up screen, nothing to reset on Monday.
- Nothing to install. It runs in the browser tab. Locked-down, managed Chromebooks are the target case, not the edge case.
- Everyone finishes with something playable. Six lines is a working game. The floor is low enough that the slowest writer in the room hands in a real thing.
- Their work stays out of the public feed. Class games are visible to you on the class page and to the class. They are not published to strangers.
The mechanism, stated plainly
A child writes a sentence in near-English and presses Play. Three seconds later they are standing in a forest and a character they named is talking to them.
World "forest":
Character "Mara":
say Find the lost crown!
Win when: talk to Mara
That is the whole trick: the gap between an idea and its consequence is seconds, not a marked-in-a-fortnight worksheet. Children debug because the world is wrong in front of them, not because a teacher told them it was wrong.
The second half of the lesson does the harder work. Once they add a goal, the compiler checks whether the game can actually be finished — and refuses to pretend. A child who asks for a star that no world contains is told so. To fix it they have to reason about their own logic: what does the player need, where does it come from, what counts as winning? That is the sequencing and selection strand of most computing curricula, arrived at by argument with a machine rather than by definition.
What this lesson is not
It is not learning Python, and it will not teach syntax that transfers to a text language. It is computational thinking through authoring: decomposition, sequence, state, conditions, and debugging — practised on something a ten-year-old wants to finish. Treat it as the lesson that makes the Python lessons land, not a replacement for them.
The 45-minute lesson
One lesson, one room, no prior coding. Students write a short story in a plain-language script called VXLScript; a 3D game builds live next to the text as they type. Nothing to install, no student accounts, no email addresses collected.
Before the bell — 5 minutes, once
- Go to
vxlverse.com/class, sign in with Google (teacher only), name the class (e.g. Tuesday P4) and press Create class. You get a code that looks likeZEUS-K7M2Q. - Write the code on the board, large. It is the only thing students need.
- Open a second tab at
vxlverse.com/studio-liveon the projector machine. Click into the code panel, pressCtrl+AthenBackspace, and type (or paste) the six-line hook game below. Leave it there. Do not play it yet. - Plan groups of three. Two reasons: pair programming beats one-kid-one-Chromebook for a first lesson, and a free class accepts 10 hand-ins. Thirty students in threes is exactly ten. If your students work alone, only the first ten hand-ins land on the class page — everyone still builds and plays in their own browser.
The six-line hook game
Title: The Lost Crown
World "forest":
Character "Mara":
say I lost my crown somewhere in these woods. Find it for me!
item 👑 crown
Win when: player has 👑 crown
That is a complete, winnable 3D game. Read it downward: where (World), who (Character), what she says (say), what is out there (item), how you finish (Win when).
Timing
| Minutes | Teacher does | Students do | Why it matters |
|---|---|---|---|
| 0–5 Hook | Plays the six-line game on the projector — walks to Mara, presses E, finds the crown, wins. Then points at the code panel and reads the six lines out loud. Changes one word; the world rebuilds. | Watch. Guess how many lines it took. Read the six lines back. | The game is not a black box. Everything on screen came from text they can read — so text is worth writing. |
| 5–10 Join | Reads the four join steps off the board. Circulates for the two kids who typed the code wrong. | Open Chrome, go to vxlverse.com/class, type the code, pick a nickname, land in the editor. | No accounts, no passwords, no email. Five minutes is the whole cost of entry, and nothing personal is collected. |
| 10–20 First world | Types three lines on the projector, one at a time, pausing after each so the room sees what changed. Asks the swap question. | Clear the sample code, type World, Character, two say lines. Click the world and walk up to their character. | Sequencing. Lines run in the order they are written, and the order is visible in the world — swapping two say lines changes what the character says first. |
| 20–30 Make it a game | Adds wants:, gives:, an item and a Win when: line. Deliberately leaves Win when: out first and reads the compiler's message aloud. | Add the same four ideas to their own story. Play until they see the win screen. | Goal state and debugging. A world with a person in it is not yet a game. The compiler proves the game can be finished — or says it cannot, before anyone plays it. |
| 30–38 Make it yours | Stops talking. Circulates. Writes three "try one" prompts on the board: change the world word, add an Enemy, add a choice. | Rename everything, change the biome, add an enemy, add an if choice is branch, keep playing. | Selection and iteration. A choice is a fork in the program. Every change is tested by playing it three seconds later. |
| 38–45 Arcade | Calls hand-in at 38 exactly. Opens vxlverse.com/class/YOUR-CODE on the projector and plays three or four student games, author narrating. | Press 🎒 Hand in. Then watch, and shout instructions at whoever is holding the keyboard. | The work is finished, public to the class, and playable by someone else. That is what makes them come back. |
Stage 1 — 0–5 min: the hook
The projector tab already has the six lines in it. Do not show the code first.
Say: "Nobody touch anything. Watch this for one minute."
Click the 3D world on the right. You are now in the game. W A S D walks, hold the left mouse button and drag to look around, E talks to whoever you are standing in front of. Walk to Mara, press E, let her line finish, then go and find the floating crown. Take it. The win screen appears.
Say: "That was a 3D game. Somebody guess — how many lines of code is that? Hands."
Take three guesses. They will say hundreds. Now point at the left-hand panel.
Say: "Six. And here they are. Read them with me."
Read each line and say what it does, in these words:
World "forest":— "where it happens."Character "Mara":— "who is in it."say …— "what she says when you talk to her."item 👑 crown— "a thing lying in the world that you can pick up."Win when: player has 👑 crown— "how you finish. Without this line it is not a game yet — hold that thought."
Now the concept question. Click into the code and change forest to volcano. Do not press anything else — the world rebuilds by itself in about a second.
Ask: "I changed one word. What just happened to the world? … So what is the code actually for?"
You want someone to say out loud that the text is the game, not instructions about the game. Change it back to forest and move on. Do not explain anything else.
Stage 2 — 5–10 min: joining
Read these five steps off the board, one at a time, and wait for hands down after each. Point at the code on the board every time you say it.
- "Open Chrome. Go to vxlverse.com/class — that is v-x-l-verse dot com slash class."
- "On the left there is a box that says I have a class code. Type ZEUS-K7M2Q — it's on the board. Press Join."
- "You should see our class name at the top. Press the yellow Make your game button."
- "It asks for a nickname. Not your real name. A game name — Astronaut, Pancake, Ravenclaw. That is the name your game shows up under on our class page."
- "Press Let's go. You should now see writing on the left and a little 3D world on the right. Thumbs up when you're there."
Say once, plainly: "There is no password, there is no account, and nobody is asked for an email address. If you close the tab your work is still here when you come back on this same computer."
Then clear the decks:
Say: "There is some example code already in there. Click on it, press Ctrl and A together, then Backspace. Make it completely empty. We start from nothing."
The three things that go wrong here, and the fix in one sentence each:
- "Class not found" — the code is mistyped; the dash matters, the letters are not case-sensitive.
- Sharing a Chromebook with a partner who joined earlier — tap the nickname in the yellow
🎒chip at the top to switch to a different student. - Nothing on the right-hand side — the editor is empty, which is correct at this point. The world appears with the first line.
Stage 3 — 10–20 min: your first world
Type on the projector one line at a time and have the room type it with you. Pause after every single line and look at the right-hand side.
Say: "Line one. Where does your story happen? Type World, space, then the place in quotes, then a colon."
World "snow":
Say: "Look right. You are standing in it. Try a different word — desert, jungle, dungeon, volcano, beach, city. Ten seconds. Go."
Let the room shout out the worlds they found. Then:
Say: "Line two. Somebody has to be in there. Type Character, space, a name in quotes, colon."
Say: "Line three matters — watch my fingers. Press space space first, so the line starts further in than the one above it. Then say and whatever they say. The indent is how the computer knows this line belongs to that character."
World "snow":
Character "Bo":
say Hello! Who are you?
say I have been standing in this snow all morning.
Win when: talk to Bo
Say: "Click the world. W A S D to walk, hold the left mouse button and drag to look, walk up to Bo and press E. Somebody you invented is talking to you. Go."
Give them four minutes. Circulate. Then bring them back for the question that makes the concept land.
Ask: "Everyone look at your two say lines. If I swap them over — put the bottom one on top — what will change in the game? Say it before you do it."
Take a prediction, then have them do it and talk to their character again. Confirm it out loud: "The computer does your lines in the order you wrote them. Top to bottom. Nothing clever, nothing hidden — the order on the screen is the order it happens. That has a name: sequencing, and it is true of every program ever written."
They will notice a message at the bottom of the editor saying the game has no way to win yet. Do not fix it. Say: "It's right. This isn't a game yet. That's the next ten minutes."
Stage 4 — 20–30 min: make it a game
Say: "You have a world and a person. Why is that not a game? What is missing?"
Push until someone says something like you can't win or there's nothing to do. That is the whole idea of the stage.
Say: "A game needs three things: something you have to get, someone who wants it, and a rule that says you've finished. Three lines. Watch."
Type these on the projector, in this order, saying what each one is:
World "snow":
Character "Bo":
say I have been standing in this snow all morning.
say My dog ran off. Bring me a bone and I will call him back.
wants: 🦴 bone
gives: 🐕 puppy
item 🦴 bone
Win when: player has 🐕 puppy
wants:— "Bo will ask you for this and won't stop asking until you bring it."gives:— "what he hands you when you do."item 🦴 bone— "the bone actually exists in the world now. Notice this line is all the way to the left, not tucked under Bo. It belongs to the world, not to him."Win when:— "the finish rule."
The deliberate mistake — do this, it is the most valuable 60 seconds of the lesson. Before you type the last line, stop with only wants: and gives: in place and point at the status line under the editor:
💡 Your game has no way to win yet — add `win` inside a choice, or a `Win when:` line.
Say: "Nobody has played this. Nobody has tested it. The computer has already read it and told me it cannot be finished. That is what a compiler is — a machine that reads your work and finds the hole before your player does."
Now type the Win when: line. The message flips to:
✓ Looks good — click the game to play it.
Say: "Now go and win yours. Talk to your character first — the thing they want only appears once they've asked you for it."
While circulating, the two errors you will actually see:
- The item is indented under the character. If
item 🦴 bonesits underCharacterwith spaces in front of it, it belongs to the character and quietly disappears from the world. Symptom: the status line says it "auto-placed" the item. Fix: delete the spaces so the worditemstarts hard against the left edge. - The
Win when:line is indented. Same cause, same fix — it is a rule for the whole game, so it lives at the left edge.
Say this to whoever you help, every time, because it is the transferable idea: "Where the line starts tells the computer who it belongs to."
Stage 5 — 30–38 min: make it yours
This block is theirs. Write three prompts on the board and then stop talking.
- Change the place. Change the word in
Worldand see what you get. - Add an enemy. Three lines, and the second and third are indented:
Enemy "Frost Wolf": kind: wolf tier: 2Say this out loud when you write it up: "
kind:goes on its own line, indented. If you put it on the same line as the name, you get a monster called Frost Wolf: kind: wolf — the computer thinks that whole thing is its name. Try it if you don't believe me." Kinds worth knowing:wolf dog bat spider skeleton zombie ghost slime robot drone golem raider wyrm.tier:is difficulty, 1 to 50 — start at 2. - Give the player a choice. The
saylines under each choice are indented one more step:if choice is "I will find him": say You are a good one. Hurry! if choice is "It is too cold out there": say ...Then I will wait a little longer.
Put together, a finished 38-minute game looks like this — this is the version to leave on the projector while they work:
Title: Bo and the Frost Wolf
World "snow":
Character "Bo":
say My dog ran off into the storm.
say Bring me a bone and I will call him back.
wants: 🦴 bone
gives: 🐕 puppy
if choice is "I will find him":
say You are a good one. Hurry!
if choice is "It is too cold out there":
say ...Then I will wait a little longer.
Enemy "Frost Wolf":
kind: wolf
tier: 2
item 🦴 bone
Win when: player has 🐕 puppy
Two things to say to the room during this block, and nothing else:
- At 34 minutes: "If you have not played your own game in the last two minutes, play it now." (Iteration. They forget.)
- To anyone stuck: "Read the message at the bottom of your editor to me." (Not "what's wrong?" — make them read the compiler. By the third time they do it without you.)
For fast finishers, point at the 💡 How to… button in the toolbar rather than teaching anything new — it lists every command with a line they can drop straight in. Examples opens finished games they can open and take apart.
Stage 6 — 38–45 min: the arcade
Call it firmly at 38. Nobody is finished; that is fine and is in fact the point.
Say: "Hands off. Everyone press the 🎒 Hand in button at the top. Yellow confetti means it worked. You can press it again later — it updates your game, it does not make a second one."
Then, on the projector, go to vxlverse.com/class/YOUR-CODE. Every handed-in game is there as a card with the author's nickname on it. (These pages are not listed in search and student games do not appear in the public gallery — the code is what opens the page.)
Play three or four. Choose the ones you saw being built, and one you have never seen. The rule that makes this work:
Say: "Author does not touch the keyboard. Author sits there and says nothing. I play it. If I can't work out what to do, that's information."
Play for 60–90 seconds each. Then ask the author one question — always the same one:
Ask: "What did you have to fix to make it finishable?"
That question closes the lesson on the right idea. Everybody hit something that did not work, everybody read a message, everybody changed a line and tried again. That is the thing you are actually teaching, and it is worth naming in the last thirty seconds:
Say: "Nobody in this room wrote a working game first try. You all wrote a broken one and fixed it. That is not the bad part of programming. That is programming."
If the room falls behind
- Joining ate 12 minutes. Cut Stage 5 to five minutes and keep the arcade. The arcade is the part they remember; the customisation is the part they will do again at home.
- Half the class hasn't got a win by minute 30. Put the finished eight-line Bo game on the projector and leave it there. Copying it and then changing the names is a legitimate route through — most of them will diverge within two minutes anyway.
- No time for the arcade. Hand-in still takes ten seconds; do it, and open the class page at the start of the next lesson. The games do not expire.
What was actually taught
Named honestly, without dressing it up: sequencing (lines run top to bottom, and Stage 3's swap proves it), selection (if choice is — the program takes one path or another), state (the player either has the bone or does not, and the win rule reads that), decomposition (a game is a world, plus characters, plus things, plus a rule), and debugging as the normal case (the compiler reports, the student reads it, changes one line, re-tests). This maps onto the sequencing and selection strands of most computing curricula; check the wording of your own scheme of work rather than trusting a number quoted by a website.
What the children actually learn
This is one 45-minute lesson, so the claim is deliberately modest: children do not leave fluent in anything. They leave having met six ideas in a context where the ideas mattered — because getting them wrong meant the game did not work, and getting them right meant it did. Below, each concept is given in one plain sentence, then the exact minute of the lesson where a child meets it, then what a child who has understood it can do afterwards.
1. Sequencing
What it is: instructions run in the order you write them, and where a line sits (indented under something, or at the left margin) decides what it belongs to.
Where they meet it: 10–20, FIRST WORLD. The child types three lines and presses Play. The two say lines come out of the character's mouth in the order typed — swap them and the conversation is nonsense. The indentation is doing real work: those say lines are indented under Mara, so they are Mara's lines.
World "forest":
Character "Mara":
say Welcome to the forest.
say I have lost something precious.
Win when: talk to Mara
A child who has got it can: predict what will happen before pressing Play, and fix a conversation that comes out in the wrong order without being told which line to move. They can also explain why a line indented under a character belongs to that character — the first step towards understanding scope.
2. Selection (conditionals)
What it is: a program can test something and then take one path or another, so not every player sees the same thing.
Where they meet it: 30–38, MAKE IT YOURS, when they add a choice. This is the first moment the game stops being one fixed track. One branch ends the game; the other does not.
World "forest":
Character "Mara":
say A wolf blocks the path. What do you do?
if choice is "Share my bread":
say The wolf steps aside and lets you pass.
win
if choice is "Run away":
say You are back where you started. A child who has got it can: trace both paths on paper and say which one wins; write a branch deliberately so that one option is a dead end and one is progress. The strongest signal is a child who tests both options rather than only the one they wrote first — that is the beginning of thinking about coverage.
3. Variables and state
What it is: a program remembers things while it runs — what you are carrying, how many coins you have — and can make decisions based on what it remembers.
Where they meet it: twice. At 20–30 the inventory is state: Win when: player has 🌟 star is a question the game asks about something it is remembering. At 30–38, faster groups meet a named counter that goes up during play and is tested at the end.
World "forest":
Character "Mara":
say Help me and I will pay you in coins.
if choice is "Fetch the water":
coins + 10
say Thank you!
if choice is "Chop the wood":
coins + 10
say Warmth at last!
Win when: coins is 20 A child who has got it can: answer "how many coins do you have right now, and how do you know?" and — the real test — work out that a win set to coins is 30 with only two ten-coin jobs in the game can never happen. That is arithmetic reasoning about a running program, which is exactly what a variable is for.
4. Decomposition
What it is: a big thing ("make a game") is built out of small parts that each do one job.
Where they meet it: 0–5 and again at 20–30. The hook does this in one move: the teacher plays a finished game, then shows the six lines behind it. The class can see the whole made of parts — a place, a person, a thing, a rule. By 20–30 they are assembling those parts themselves.
World "forest":
Character "Mara":
say Find the lost star!
wants: 🌟 star
item 🌟 star
Win when: player has 🌟 star A child who has got it can: point at any line and say what job it does, and answer "which line would you delete to break this?" They can plan the next thing they want by naming the part it needs ("I want a locked door, so I need an item and a character who gives it") instead of asking for a general "how do I make it harder".
5. Debugging
What it is: when the program does not do what you meant, you read what it actually says, form a guess about the cause, change one thing, and test again.
Where they meet it: everywhere, but sharpest at 20–30. The compiler runs as they type, and its messages are written as sentences a child can act on rather than error codes. Three they are likely to hit in this lesson:
- No way to finish. "Your game has no way to win yet — add
wininside a choice, or aWin when:line." This is the expected state at the end of 10–20, and it is what drives the next twenty minutes. - A name that does not exist. If a child writes a win rule about talking to a character they misspelled, the build stops with "I don't know anyone called ...". This is the only failure in the language that stops the build outright, and it is a good one: it teaches that names must match exactly.
- The item put in the wrong place.
itembelongs at the left margin (or directly under aWorld), not indented under a character. A child who indents it will see the compiler report that it has auto-placed the item on the floor so the win is still reachable — a visible cue that the line was not doing what they thought. Worth putting on the board at the start: items live at the edge of the page.
A child who has got it can: read the message before putting their hand up, change one thing rather than rewriting everything, and re-test. The habit to praise out loud in this lesson is "read it, change one thing, press Play again".
6. Narrative goal and obstacle
What it is: a story only holds attention when somebody wants something and something is in the way — and in a game, both of those have to be written down as rules, not implied.
Where they meet it: 20–30 supplies the goal (wants: and Win when:); 30–38 supplies the obstacle (an enemy, or a choice that can be got wrong).
World "cemetery":
Character "Mara":
say Something is moving between the graves.
Enemy "Bone Rider":
kind: skeleton
count: 4
Win when: defeat all A child who has got it can: state their game's goal and its obstacle in one sentence each, and see why "a nice forest where you walk around" is not yet a game. This is the same want/obstacle analysis they do in English lessons, applied somewhere the answer is testable — the story either resolves or it does not, and the machine will tell you which.
A note on the enemy block: each trait goes on its own indented line. Writing Enemy "Bone Rider": kind: skeleton all on one line folds the trait into the enemy's name and the creature comes out wrong. It is the most common formatting slip in the lesson and worth pre-empting on the projector.
The compiler's winnability check as an assessment signal
This is the part that makes the lesson assessable in 45 minutes, so it is worth being precise about what it does and does not do.
Before a game is handed in, it is checked for whether it can actually be finished — not whether it is good, but whether a route to the ending exists. If nothing in the script can ever produce a win, the child is told so in plain language. If the win depends on holding an item that no player could ever pick up, that is reported too. The check is not a grade and it is not a style opinion; it is a reachability question, and the child has to answer it by reasoning about their own game.
That reasoning is the assessment evidence. To clear the check a child must hold two things in their head at once — "here is what my game asks the player to do" and "here is the path that makes it happen" — and notice when the second does not exist. A child who has a star in the world, a character who asks for it, and a win rule that tests for it has demonstrated that they can trace a path through a system they built. A child whose game says "no way to win yet" and who then works out, unprompted, that they wrote a wants: but never a Win when: has demonstrated something better.
Practically, this means you are not marking 28 games at home. Walking the room, the screen tells you where each child is: still typing, warned and puzzling, or clean and playable. The teacher-facing signal to collect is not "did it build" (almost everything builds) but "can this child say, in words, why their game can be won?" Ask three or four children that question in the last ten minutes and you have your formative assessment for the lesson.
At a glance
| Concept | Where in the 45 minutes | Evidence you can see or hear |
|---|---|---|
| Sequencing | 10–20 First world | Predicts the order of the dialogue before pressing Play; reorders lines to fix it |
| Selection | 30–38 Make it yours | Tests both branches, not just the one they wrote |
| Variables and state | 20–30 and 30–38 | Says what the player is carrying and why the win does or does not fire |
| Decomposition | 0–5 hook, 20–30 | Names the job of each line; names the part a new idea would need |
| Debugging | Throughout, peak at 20–30 | Reads the message, changes one thing, re-tests, without asking first |
| Goal and obstacle | 20–30 and 30–38 | States the goal and the obstacle in one sentence each |
For a scheme of work
In one 45-minute lesson, pupils aged 10–14 write a short text script that builds a playable 3D game in the browser, then play each other's work. The script is plain indented English — a place, a character, some dialogue, an item, and a rule for winning — so no prior programming experience is needed by pupils or by the teacher, and nothing is installed. Pupils meet sequencing (the order of lines and what indentation groups together), selection (a branching choice where one path ends the game and one does not), variables and state (the player's inventory, and a counter tested by the win rule), decomposition (a game broken into place, character, object and rule), and debugging (reading a plain-language message from the compiler, changing one thing, and re-testing). It also sits alongside English and literacy work: pupils must express a want and an obstacle explicitly, because the game only resolves if both are written as rules. The work maps to the sequencing, selection and debugging strands common to most computing curricula, and can be assessed without collecting books: before a game can be handed in, it is checked for whether it can actually be finished, so every pupil has to reason about — and be able to explain — the path that makes their own game winnable. Suggested follow-on: a second lesson adding a second location and a multi-step goal, or a cross-curricular version where the script retells a text pupils have studied.
Assessment
Four strands, four levels. Every cell describes something you can see on a screen — a missing star, a message in the status bar, a child changing a line and pressing Play again. Nothing here needs you to read code you don't understand.
The strands name concepts rather than standard codes: strand 1 is sequencing and structure (order and indentation change the result), strand 2 is goal state and decomposition (what has to be true for this to be finished, and what has to exist for that to happen), strand 3 is narrative design plus selection (a goal, an obstacle, a branch), strand 4 is debugging. They map cleanly onto the sequencing/selection and debugging strands of most computing curricula — map them to your own scheme rather than trusting a code printed by someone who has never seen your syllabus.
The rubric
| Strand | Emerging | Developing | Secure | Extending |
|---|---|---|---|---|
| The game runs | Nothing on the class page: the Hand in button refused the script with "Fix the little errors first, then try again", and no world ever built in the preview. | It builds and plays, but something they wrote is not on screen — the item they typed indented under a character isn't lying in the world, or the enemy is called 'Raider': kind: raider because the trait was typed on the header line. | Press Play: the world, the named character and every item they wrote are all there, and walking up and pressing E opens the dialogue exactly as written. | The game still builds clean with something structural added — a second World the player can walk through the portal into, or an Enemy with kind: on its own indented line that spawns as the creature they meant. |
| The game can be won | No Win when: line and no win anywhere; the status bar under the editor reads "Your game has no way to win yet — add win inside a choice, or a Win when: line." A lone wants: scores points and the game just carries on. | There is a Win when: line, but the editor had to rescue it — the status bar reads "auto-placed [item] on the floor so the win is reachable", meaning the thing the win asks for was never really put in the world. | You can play their game and reach the win screen: the Win when: names an item that exists at world level, spelled the same way, and the player can walk to it and pick it up. | Winning takes a condition rather than a walk — win sits inside a choice or an if player has …: branch, or the winning item only exists because an enemy drops it — and there is an Ending: line that fires when they get there. |
| The story has a goal and an obstacle | Every say line is a greeting or scenery; no line anywhere tells the player what they are supposed to do. | A say line names the goal ("Bring me the star") but the star is lying in the open a few steps away with nothing between the player and it. | The goal is said out loud and something stands in the way: an enemy holding the item, a gate that needs a different item first, or a character who will not hand it over until you bring them something. | The obstacle belongs to the story — the enemy drops the exact thing the character asked for, or a choice sends the player to a different Ending: — and the ending sentence answers the goal sentence. |
| The child debugged something | The same message has been sitting on their screen for two minutes with a hand in the air; nothing in the script has changed. | They read the message and change something, but need you or the child next to them to point at which line to change. | They spot the fault while playing ("the star isn't there"), go back to the script, find the line, fix it, press Play again to check — and can tell you in one sentence what was wrong. | They predict a fault before pressing Play ("that item is indented under her, it won't appear"), or they fix a classmate's game and explain the fix to them rather than typing it for them. |
What "secure" looks like on screen
Secure on strands 1, 2 and 3 at the same time — six lines, a named goal, a reachable win:
Win when: player has 🌟 star
World "forest":
Character "Mara":
say Bring me the star and the forest wakes up.
wants: 🌟 star
item 🌟 star Extending on strand 3 — the item is not lying about, an enemy is holding it, and the ending answers the goal:
Title: The Cave Star
Win when: player has 🌟 star
Ending: The forest wakes up.
World "cave":
Character "Mara":
say A raider took our star. Get it back!
Enemy "Raider":
kind: raider
drops 🌟 star Extending on strand 2 — the win is behind a condition and there is a real failure branch, so the player can be turned away:
Title: The Bridge
Ending: You crossed the bridge before dark.
World "forest":
Character "Toll Keeper":
say Nobody crosses this bridge for free.
if player has 🪙 coin:
say A coin! Cross, friend.
win
else:
say Come back when you have a coin.
item 🪙 coin Marking thirty of these in ten minutes
Open your class page at /class/ plus your class code and mark straight down the grid: each hand-in is one card with the child's nickname, the title they chose and a screenshot of their world, and because the Hand in button refuses a script that will not build, every card on that page has already cleared emerging on strand 1. For strands 2 and 3, click a card, then Remix this game — that opens the child's own script in the editor, where the status bar tells you in one line whether it can be won ("Your game has no way to win yet…" or nothing at all) and the say lines in front of you tell you whether a goal was ever named, which is about fifteen seconds a child. Strand 4 is the one the class page cannot show you, so tick that one in the room during the 20-30 and 30-38 blocks — a mark on the register the moment you watch a child read a message, change one line and press Play again — and you walk out with the whole grid marked.
If you only have time for one judgement
- Can it be won? That single question separates a piece of writing from a game, and the editor answers it for you in one line — which is why it is worth more of your marking attention than anything else on this page.
- Keep the evidence cheaply. The class page URL is the whole set of work; the script behind any card is one click away via Remix if a parent, a moderator or a head of department wants to see what a child actually wrote.
Troubleshooting: what breaks in a real room
Everything below is written to be handled standing up, in about 30 seconds, without leaving the child's desk. Each entry gives you the symptom, a sentence you can actually say out loud, and the fix.
Two rules that will save you most of the lesson:
- Never take the keyboard. Point at the line. The child types the fix. It takes ten seconds longer and it is the whole point of the lesson.
- Broken is normal. If you treat a red message as a disaster, thirty children will treat it as a disaster. Treat it as the game talking to them.
Fast lookup
| Symptom | Almost always |
|---|---|
| "It says my game can't be won" | No Win when: line, or it names a thing that isn't in the world |
| Play shows an empty world, no one there | The Character line lost its colon or its quote marks |
| The item isn't anywhere in the world | item is indented under a Character — it was silently dropped |
| The enemy has a ridiculous name | kind: got typed on the same line as the name |
| Class code "doesn't work" | Letter/number confusion (O vs 0, I vs 1) or a stray space |
| Everything is choppy | Too many browser tabs. Close them all but one. |
| Blank screen after Play, spinning | School wifi. Wait fifteen seconds, then reload once. |
1. "It says my game can't be won"
What it looks like: the child presses Play or Hand in and gets a message saying the game can't be finished, naming something — a missing goal, or an item nobody can ever pick up. The child reads this as "I failed".
Say this: "That's not an error, that's the computer telling you it played your game and couldn't finish it. Which means neither could a person. What are they supposed to do to win?"
Fix: walk three questions, in order.
- Is there a
Win when:line at all? A game with onlywants:gives the player a job and a score, but there is no finish line, so it can never be won. This is the single most common one in the 20-30 minute stretch. - Does
Win when:name exactly the same thing as theitemline? Same emoji, same word.👑 crownand🌟 crownare two different things to the compiler. - Is the
itemline actually in the world? See problem 3 below.
The shape that always works:
World "forest":
Character "Mara":
say Find the lost crown!
wants: 👑 crown
item 👑 crown
Win when: player has 👑 crown If you are short on time, tell the whole room once: "Every game needs a last line that starts with Win when:." That one sentence prevents about half of these.
2. Nothing appears when they press Play
What it looks like: the world loads — ground, sky, they can walk — but there is no character, or nothing at all happens. Or the screen stays blank with a loading spinner.
Say this: "The world built fine, so your World line is good. Something under it isn't being read. Look at the line with the person's name."
Fix, in this order:
- Missing colon.
Character "Mara"with no:at the end. EveryWorld,CharacterandEnemyline ends with a colon. - Missing or curly quotes. If a child pasted a name from a document, the quotes may be the slanted kind. Delete them and retype straight quotes on the Chromebook keyboard.
- Nothing is indented. The
sayline must sit further right than theCharacterline. If everything is flush left, the character has no lines to speak and stands silent. - Blank spinner, no world at all. That is the network, not the script. Wait fifteen seconds. Then reload the page once — their text is still there. If it happens on more than three machines at once, it is the school wifi and you should switch to the projector plan (see problem 8).
3. The item is written but isn't in the world
What it looks like: the child swears they wrote the star. They can walk the whole world and there is no star. No error appears — and that is what makes this one nasty.
Say this: "Look at how far right your item line starts. It's tucked under Mara, so the game thinks it's something about Mara instead of something in the world. Push it all the way left."
Fix: item lives at the far-left edge, level with World — never indented under a Character. Indented under a Character it is silently ignored, which is why nothing complains. Correct version:
World "cave":
Character "Rook":
say I dropped my lantern somewhere in here.
wants: 🔦 lantern
item 🔦 lantern
Win when: player has 🔦 lantern Worth saying to the whole room once, around minute 22: "item goes hard left. Items belong to the world, not to a person."
4. The enemy has a silly name
What it looks like: a monster wandering around called Raider kind: raider. The class finds this extremely funny, which is fine, but the trait didn't apply.
Say this: "Everything after the name has to go on its own line underneath, indented. One idea per line."
Fix: split it.
World "desert":
Character "Sam":
say The raiders took my water key.
wants: 🔑 key
Enemy "Raider":
kind: raider
item 🔑 key
Win when: player has 🔑 key 5. The class code doesn't work
What it looks like: "Class not found", or the page just sits there. Usually one or two children, occasionally the whole room.
Say this: "Read it back to me one character at a time." Nine times in ten they read it correctly and have typed it wrong.
Fix:
- One or two children: it is character confusion. Zero versus letter O, one versus letter I, five versus S. Write the code on the board in big, well-spaced capitals and say the ambiguous characters out loud ("that's a zero"). Also check for a space at the start from a copy-paste, and check they are on
vxlverse.com/classand not a search results page. - The whole room: you are probably reading yesterday's code, or a code from a different class. Open your class page on the projector and read the code off it live.
- "We're having trouble right now": that is the server being briefly busy, not a wrong code. Wait a minute and press try again. Do not regenerate the code — you will invalidate the one that is already on the board.
Prevention: leave the code on the board for the entire lesson, not just the first two minutes. Late arrivals and reloads both need it.
6. A Chromebook is slow or the 3D is choppy
What it looks like: the world moves in slideshow steps, or the fan is audible, or Play takes twenty seconds. School Chromebooks are usually the culprit and it is almost never the game's fault.
Say this: "Close every tab except this one. Right now, all of them."
Fix, cheapest first:
- Close all other tabs. Children accumulate fifteen tabs by second period; this alone fixes most cases.
- Come out of fullscreen. A smaller picture is much less work to draw.
- Press Play, don't keep it running. Ask them to stop the game while they are writing, and only Play when they want to check something.
- If it is still bad: keep the world small. One
World, one or two characters, one enemy. Tell them enemies cost the most. - If a specific machine is hopeless, pair the child with a neighbour. Two children on one script is a good lesson, not a compromise — one types, one reads the story aloud, swap at the halfway point.
7. A child finishes in eight minutes and is bored
What it looks like: "I'm done." They have a working, winnable game and thirty minutes left. Left alone they will start narrating other people's screens.
Say this: "Good. Now make it so I can't guess what happens. Give me a choice where both answers are tempting."
Fix — hand them one of these, in escalating order. Do not hand them all four.
- Add a real choice with
if choice is, where neither option is obviously the right one. - Add an
Enemy, then make them justify it in the story — why is it here, what does it want. - Add a second character who disagrees with the first. Two people who want different things from the player is the fastest route to an actual story.
- Play a neighbour's game and write down one honest sentence about what confused them. This is the best one: it is peer review, it costs you nothing, and it makes the arcade at the end much better.
World "forest":
Character "Mara":
say The crown is lost. Will you help me look?
wants: 👑 crown
if choice is "I'll help":
say Try the tall rocks past the river.
if choice is "Not today":
say Then the forest stays dark a while longer.
Enemy "Thorn":
kind: raider
item 👑 crown
Win when: player has 👑 crown 8. A child freezes and writes nothing
What it looks like: an empty editor at minute 18. The child is not being difficult — they have been asked to invent a world from nothing, in public, and that is genuinely hard.
Do not say "just write anything" or "use your imagination". That is the thing they cannot do right now.
Say this: "Don't invent anything. Copy this exactly, press Play, and then change three words: the place, the person's name, and the thing they want."
World "forest":
Character "Mara":
say Hi! Bring me a star.
wants: 🌟 star
item 🌟 star
Win when: player has 🌟 star Fix: the unblock is always a working thing to modify rather than a blank page. If they still stall, ask two closed questions instead of an open one — "forest or desert?" and "who's in it, a person or an animal?" — and type nothing yourself. Once one word is theirs, the rest follows.
9. Two children pick the same nickname
What it looks like: two Dragons on the class page, and at the arcade nobody can tell whose game is whose. Usually it is not a collision at all, it is two friends doing it deliberately.
Say this: "You need a name I can read out at the end and everyone knows it's yours. Add something."
Fix: ask one of them to add a couple of letters — Dragon becomes DragonJK. There are no accounts, so nothing is broken and nothing is lost; the only cost is ambiguity on the class page. If it happens after they have handed in, sort it at the arcade by asking "whose is this?" rather than making them redo anything.
Prevention: say the rule once at join time — "your nickname must be one I can read out loud to the class, so no real surnames and nothing rude". Getting in front of it takes ten seconds; unpicking it later takes five minutes.
10. The projector shows the wrong thing
What it looks like: your class code page is showing while you are trying to demo, or your email is showing, or you are mirroring a child's screen and their half-written game is on the wall.
Fix: use two browser windows from the start, not two tabs — tabs are one keystroke from disaster.
- Window one, on the projector: your class page. This is what is up during joining, and again during the arcade.
- Window two, on your laptop screen only: everything else. Email, register, notes.
If you are demonstrating, do it in the projector window and then go back to the class page. Never open your email in the projector window "just for a second".
For the arcade: you open each child's game from the class page on the projector. That is the whole mechanism — there is no separate arcade tool to set up or fail. Open, play for sixty to ninety seconds, name the person, move on. Decide your order in advance and start with a quiet child, not the loudest game.
If the projector fails entirely: the lesson still runs. Skip the demo and read the six lines out while children type them. The arcade becomes children walking to each other's desks in pairs for two minutes.
11. "I handed in but my game isn't on the class page"
What it looks like: the child is certain they pressed Hand in; the class page doesn't show it.
Say this: "Reload the class page. If it's still not there, press Hand in again — nothing bad happens if you do it twice."
Fix: reload the class page first (it does not update by itself while you leave it open). If it is genuinely missing, have them press Hand in again from their tab. Handing in twice updates the same entry rather than creating a duplicate. If their tab is gone entirely, see the next one.
12. A child closed the tab or the Chromebook slept
What it looks like: panic. "It's all gone."
Say this: "Go back to the class page, put the code and your nickname in again."
Fix: rejoining with the same code and the same nickname is the recovery path, and anything already handed in is safe on the class page. Work done since the last Hand in may not be. This is the practical reason to say, at minute 25 and again at minute 35: "press Hand in now, you can always hand in again later." Treat Hand in as a save button, not a final submission. Say that to the class explicitly, or they will hoard their work until the last minute and one of them will lose it.
13. Thirty laptops playing music at once
What it looks like: the room becomes unusable around minute 20 when the first games start playing.
Fix: get ahead of it. Before anyone presses Play, say: "Volume all the way down, or headphones if you have them. Sound comes on at the arcade." Then have sound on the projector only, at the end. This is a two-second instruction that saves the second half of your lesson.
14. A child writes something rude
What it looks like: a name or a line of dialogue that you would not want on the wall. It is a text editor and they are eleven; expect one per class.
Say this, quietly and without an audience: "This is going on the projector at the end. Change it now and we won't discuss it again."
Fix: the deterrent that actually works is announced in advance, at minute 5: "Everything you write, I read out on the projector at the end." Say it once, lightly, and most of it never happens. When it does, handle it at the desk. If it is still there at arcade time, skip that game and deal with it after the lesson — do not put it on the wall to make a point.
Before the lesson: five-minute check
Do this at the actual teaching machine, on the actual school network, in the room you will teach in. A check done at home on your own wifi proves nothing about the Chromebooks.
- Make your class and write the code down. Put it on the board in large, well-spaced capitals now, not during the lesson. Say the ambiguous characters to yourself: is that a zero or an O?
- Join your own class as a student from a second window or a spare Chromebook, using a nickname like
TEST. Type the six-line game, press Play, win it, press Hand in. This is the single most valuable ninety seconds of preparation — it proves the code, the network, the 3D and the hand-in in one pass. Delete or ignore the test entry afterwards. - Check one real student Chromebook, not the good one at the front. Press Play and walk around for ten seconds. If that machine is smooth, the room is fine. If it is choppy, plan to pair children up and say so at the start rather than discovering it at minute 15.
- Set up two projector windows — class page on the projector, everything else on your own screen — and check the projected text is readable from the back row. The editor text is small; increase the browser zoom on the projector window now.
- Have the six-line game on the board or on paper. It is your answer to the frozen child, your fallback if the projector dies, and your demo script. Do not rely on being able to remember it while thirty children watch.
Optional, worth it if you have another two minutes: decide in advance which five games you will open at the arcade and in what order. Thirty games will not fit in seven minutes, and choosing under pressure means you pick the loudest.
One page. Press Ctrl/⌘+P — only this card prints.
VXLScript — Desk Card
You write the story. The computer builds the 3D world while you type. If your game can't be finished, the checker tells you before you hand it in.
The six lines that make a game
World "forest":
Character "Mara":
say Find the lost star!
wants: 🌟 star
item 🌟 star
Win when: player has 🌟 star That is a whole game. A world, someone in it, something they want, something to find, and a way to win. Everything else you learn today is a change to one of these six lines.
Indent = inside. The two spaces before say mean "this belongs to Mara". Lines with no spaces in front belong to the game itself.
What each word does
| Word | What it does | Example |
|---|---|---|
World | Sets the place you stand | World "desert": |
Character | Puts a person there | Character "Rin": |
say | What they tell you | say Hello, traveller! |
wants | Item to bring them | wants: 🐟 fish |
gives | Reward for that delivery | gives: 🏅 medal |
item | Thing lying on ground | item 🔑 key |
Enemy | Something that fights you | Enemy "Sandclaw": |
kind | What the enemy looks like | kind: raider |
Ally | Friend who follows you | Ally "Rex": |
if choice is | Player picks an answer | if choice is "Yes": |
if player has | Only when carrying it | if player has key: |
if talked to | Only after meeting them | if talked to "Elder": |
Win when | The rule for winning | Win when: player has 🔑 key |
win | Wins right there, instantly | win |
Music | Picks the background music | Music: fantasy |
Mode | Changes the game type | Mode: waves |
Worlds you can ask for: forest, beach, desert, snow, jungle, swamp, volcano, dungeon, city-night, canyon, cemetery, mushroom, crystal. Enemy kinds: skeleton, zombie, wolf, raider, robot, slime, bat, spider, ghost, wyrm, golem.
The three things that always break
1. An item hiding inside a Character
This one is nasty because nothing turns red — the star just never appears in the world, and the quest can never be finished.
Wrong (the item is indented, so it belongs to Mara):
Character "Mara":
wants: 🌟 star
item 🌟 star Right (the item starts at the far left, so it belongs to the world):
Character "Mara":
wants: 🌟 star
item 🌟 star Rule of thumb: item lines live at the left edge, not tucked under a person. If you press Play and the thing you need is nowhere, check this first.
2. Squashing an enemy onto one line
Wrong — the computer thinks the enemy's whole name is "Sandclaw": kind: raider:
Enemy "Sandclaw": kind: raider Right — the colon ends the line, the details go underneath:
Enemy "Sandclaw":
kind: raider 3. A quest with no way to win
wants: gives you points when you deliver the item. Points are not winning. If there is no Win when: line and no win inside a choice, your game runs forever and nobody can finish it. Add one line at the left edge:
Win when: player has 🌟 star Now try — three challenges
Challenge 1 — Make it yours
Change the world, rename the character, and swap the item for something you invented. Read it out loud after: does the story still make sense?
World "volcano":
Character "Ash":
say My lantern fell in the lava. Find me another!
wants: 🏮 lantern
item 🏮 lantern
Win when: player has 🏮 lantern Challenge 2 — Add danger
Add an enemy that guards the thing you need. Remember: kind: goes on its own indented line. tier: is how tough it is — start at 3, not 30.
World "desert":
Character "Rin":
say Something is out there. Bring me the star and we run.
wants: 🌟 star
Enemy "Sandclaw":
kind: raider
tier: 3
item 🌟 star
Win when: player has 🌟 star Challenge 3 — Give the player a decision
A choice means two players can play the same game and have different endings. Notice there is no Win when: here — the win inside the first answer is the way to win.
World "snow":
Character "Frost Guard":
say The gate is locked. Do you have the key?
if choice is "Here is the key":
say Then the mountain is yours.
win
if choice is "Not yet":
say Come back when you find it.
item 🔑 key Going further: make the second answer lead somewhere too, add an Ally who follows you, or use if player has key: so the guard reacts differently depending on what you are carrying.
Before you hand it in
- Press Play and actually finish your own game. If you can't, nobody can.
- Check every
itemline starts at the left edge. - Check you have a
Win when:line or awinthe player can reach. - Read your
saylines. Would you want to read them in someone else's game?
Then hand it in — and get ready to play everyone else's on the big screen.
Ready for Tuesday?
Making a class takes about a minute and gives you a code. Nothing to install, nothing for the children to sign up for.