Skip to content
HomeAboutWorkProjectsResourcesBlogServicesContact
WISTW· What I Shipped This WeekLevelKitPythonYear 8
January 16, 2026·5 min read

LevelKit-Text Ready for Year 8 Rotations

TL;DR

Quickly knocked together a framework students can use to create text adventure games which are a little more interesting and interactive.

BH

Benjamin Hyde

Education Leader & AI Builder

I shipped the first classroom ready version of LevelKit-Text (the reason for the name is I plan on adding a Platform game version for Year 9 later). Basically it's just a text adventure game that gets a really nice skin, allows students to add background images and the players have a nice user interface to interact with.

The goal was pretty simple: get kids programming in Python and let us have the opportunity to introduce classes, functions, loops and branching nicely without students needing to get bogged down in creating a game engine or interface themselves. I wanted them to just be the storytellers in the game. It was this lovely little blend between enough code but also some creativity. Students could lean into their story as much as they wanted.

Out of the box I wanted this thing to just run on Python. No extra packages because PIP installs are an absolute pain in the ass for most schools (including mine). So having the framework have no package dependencies was really important. That led to using TKinter as the UI rather than something a little nicer like PyQT, PySide or PyGame.

Why that mattered

For me the install process of getting packages onto kids laptops was always frustrating. Some students would follow instructions on LMSs and do the installs at home, others we had to work around the school's firewalls — which isn't great. So removing that friction just means we get to get started with the programming side of things sooner, which in turn lets students dive deeper into their learning and/or their story.

It was also about trying to hand something over to my colleagues that they could just pick up with PyCharm and run with, without needing to learn a complete framework or some true intricacies. As it turned out there were some intricacies that we didn't know were there (I'll be honest, the framework was mostly VibeCoded, but it just let me ship it much much faster). Things like that all the rooms needed to be named roomname_room.py — if they were named anything else, they would cause an error.

What shipped

Basically what we got was a nice little zero-dependency framework that allows for the creation of text adventure games. Students are able to add text, background images and sound effects (or background music) via the framework fairly simply and it just allows us to talk about how and why they're programming in functions.

One of the keys to making it interesting was allowing students to also keep a tracked inventory for their players. This also added an extra little challenge of making it so that inventory items actually had a purpose. I set up flags that could show or hide different menu options, or if the player had an item in their inventory it would allow them to open a chest or see a different option that for some players would have otherwise not been there.

I think this was a really cool addition to LevelKit as it allows the students to develop their games with some deployability in mind, because we could set up things like an armoury room where an NPC allows you to choose one item and that could dictate choices later in the game.

What's next

Next is some changes to how the game runs, making it a little more student friendly on the programming side of things, and also making some changes to the game engine and how it interacts with items, experience etc.

I've already pushed some changes to the GitHub repo that should make student understanding a little easier. For example, when they're creating their options on each of the screens (the clickable buttons), they create a list of OptionSpecs (Option Specifications) but what my staff that ran the unit worked out was that the students really just saw that as programming the buttons. So we're changing the object that is added to that list to be called Button rather than OptionSpec.

One of the other key things that caused students some grief was that when they named their rooms they left off the required prefix of _room prior to the .py extension. This made the game crash, so I've pushed another change that allows the levels to be called anything.

Finally, the last change we're looking to implement in this first round is all about items and experience. I want to be able to add some specific item classes like armour so that they can be equipped separately, as well as have items that require the player to be a specific level before they can use them. This will really make the game feel like something similar to World of Warcraft or any other RPG. With that comes the need to allow the player to level up. Currently after reaching a certain experience level the player will level up, but their stats don't change. So I've built in a default pathway (that students can change if they want for their game) so that when the player levels up their base stats like Health, Attack etc will all increase slightly.

Screenshots

Screenshots coming soon.

Build Notes

Approach

Build a classroom-ready text adventure framework where Year 8 students author content while the underlying systems stay stable.

Tools Used

Python, Tkinter, dataclasses, JSON, importlib

What Worked

The engine/content split made it far more teachable, and zero dependencies made deployment realistic in a school setting.

What Failed

Balancing flexibility with simplicity stayed tricky; every extra feature risked making the content layer harder for younger students.

What's Next

Refine classroom materials, improve validator tooling, and keep tightening the pathway from Year 8 LevelKit-Text into later LevelKit Platform work.

Resources Mentioned