# Different screens in a game [Programming guides](README.md) A game often has several **screens**: a title screen, the game itself, a winning screen, and a losing screen. These do not have to be separate programs. One program can remember which screen is active. This article builds on [state](state.md). We will model the changes with text before adding drawings or buttons. ## Choose the next room Think of the screens as rooms connected by doors. Pressing Start takes you from the title to playing. Winning takes you from playing to the winning room. Some doors should only work from particular rooms. A change from one state to another is called a **transition**. A transition table helps you decide the rules before you draw anything. | Current screen | Action | Next screen | | --- | --- | --- | | Title, won, or lost | Start | Playing | | Playing | Win | Won | | Playing | Lose | Lost | Our prototype also allows Start during play to restart a round. ## Rehearse a game The action list is pretend input. It lets us test a whole sequence without clicking buttons. ```pliro # language: en let screen = "title" say screen for action in ["start", "win", "start", "lose"]: if action == "start": set screen = "playing" else: if screen == "playing": if action == "win": set screen = "won" if action == "lose": set screen = "lost" say screen ``` ## Predict, then run Can the second Start bring us back from the winning screen? ```text title playing won playing lost ``` Yes. The current screen is one text value. This prevents combinations such as “won and lost at the same time,” which are easy to create accidentally with several unrelated true/false flags. ## Your challenge Put `"win"` at the beginning of the action list, before Start. It should leave the title screen unchanged. Explain which condition prevents a player winning before playing. ## A common mistake Changing a picture without changing the remembered state can make buttons react as if the previous screen were still active. In a graphical version, draw the scene that matches `screen` and handle only the actions allowed there. The strings here are your program's own labels, not special Pliro keywords. ## Where next? [State](state.md) · [Events](events.md) · [Drawing](graphics.md)