Tag Archives: text-based

Handheld text-based adventure gaming with Quest Smith

Post Syndicated from Alex Bate original https://www.raspberrypi.org/blog/handheld-text-based-adventure-gaming-with-quest-smith/

Play text-based adventure games that print out in real time, with Quest Smith: the Raspberry Pi Zero W–driven handheld gaming device from Bekir Dağ.

Quest Smith

Quest Smith is a raspberry pi zero driven thermal printing text based game. In each level, it gives you options to choose so every game is different than the other one.

Text-based adventure games

Today I learned:

Around 1975, Will Crowther, a programmer and an amateur caver, wrote the first text adventure game, Adventure (originally called ADVENT because a filename could only be six characters long in the operating system he was using, and later named Colossal Cave Adventure).

But I’m sure you already knew that.

According to the internet, text-based games in their most simple form are video games that use text instead of graphics to let players progress. You read the description of your surroundings and choose from a set of options, or you type in your next step and hope the game understands what you’re talking about.

Colossal Cave Adventure

We have a conversation going in our team right now about whether the term ‘text-based games’ is solely used for video games of this nature, or whether choose your own adventure books also fall into the category of text-based games. Leave your thoughts in the comments.

Anyway…

Quest Smith!

After encountering a similar handheld gaming device in a Berlin games museum, Bekir Dağ decided to build his own using a Raspberry Pi Zero W.

Quest Smith text-based game

For Quest Smith’s body, Bekir Dağ designed a 3D print, and he provides the STL files for free on Thingiverse. And for the inner workings?

A Raspberry Pi Zero W fits snugly into the body alongside a thermal printer, a battery, and various tactile buttons. The battery is powered by a solar panel mounted on the outer shell, and all components are connected to a TP4056 board that allows the battery to power the Pi.

Quest Smith text-based game

The Quest Smith software is still somewhat of a work-in-progress. While users can build Quest Smith today and start playing, Bekir has put out the call for the community to submit their own parts of the story.

Each level requires two versions of the story, which makes the possiblities grow exponentially. So it will be very difficult for me to finish a single story by myself. For the player to reach level 9, we will need to have 1023 story parts to be written. If you can help me with that, it would be amazing!

To see more of Quest Smith’s build process, find the files to make your own device, and instructions on how to contribute toward the story, visit the Quest Smith Hackster.io page.

More text-based adventuring with Python

If you’re interested in writing your own text-based adventure game in Python, we’ve got a free online course available in which you can learn about object-oriented programming while creating a text-based game. And for a briefer intro, check out Wireframe magazine issue 6, where game developer Andrew Gillett explains how to make a simple Python text adventure.

The post Handheld text-based adventure gaming with Quest Smith appeared first on Raspberry Pi.

Building a text adventure | Wireframe #6

Post Syndicated from Alex Bate original https://www.raspberrypi.org/blog/making-text-adventure-wireframe-6/

Game developer Andrew Gillett explains how to make a simple text adventure in Python — and what pitfalls to avoid while doing so — in the latest issue of Wireframe magazine, out now.

Writing games in BASIC

The first game I ever wrote was named Pooh. It had nothing to do with the bear. In September 1982, I was four years old, and the ZX Spectrum home computer had just been released. It was incredible enough that the Spectrum let you play games on the TV, but like most home computers of the time, it also came with a built-in language called BASIC, and a manual which explained how to program it. In my first game, Pooh (the title was a misspelling), the player controlled a baby, represented by a pound sign, and had to guide it to a potty, represented by the letter O. There were no obstacles, no enemies, and if you tried to walk off the screen, the program would stop with an error message. I didn’t have any idea how to create a graphical game more complex than Pooh. I didn’t even know how to display a sprite on the screen.

The Hobbit, released in 1982, was widely praised for its intuitive parser.

Text adventures

Instead, I focused on writing text adventures, where the game describes scenes to the player (“You are in a comfortable, tunnel-like hall. You can see a door,” from 1982’s The Hobbit) and the player enters commands such as “Go through door” or “Kill goblin with sword.” Although this type of game is comparatively easy to write, I implemented it in the worst way possible. The code was essentially a huge list of IF statements. Each room had its own set of code, which would print out a description of the room and then check to see what the player typed. This ‘hard-coding’ led to the code being much longer than necessary, and more difficult to maintain.

The correct way would have been to separate my code and data. Each room would have had several pieces of data associated with it, such as an ID number, the description of the room (“You are in a small cave”), an array of objects which can be found in the room, and an array of room numbers indicating where the player should end up if they try to move in a particular direction – for example, the first number could indicate which room to go to if the player enters ‘NORTH’. You’d then have the main game code which keeps track of the room the player is currently in, and looks up the data for that room. With that data, it can then take the appropriate action based on the command the player typed.

Getting it right

The code below shows how to implement the beginnings of a text adventure game in Python. Instead of numeric IDs and arrays, the code uses string IDs and dictionary data structures, where each piece of data is associated with an ID or ‘key’. This is a more convenient option which wasn’t available in Spectrum BASIC. We first create a list of directions in which the player can potentially move. We then create the class Location which specifies each location’s properties. We store a name, a description, and a dictionary data structure which stores the other locations that the current location is linked to. For example, if you go north from the woods, you’ll reach the lake. The class includes a method named addLink, which adds entries to the linked locations dictionary after checking that the specified direction and destination exist.

Following the class definition, we then create a dictionary named locations. This has two entries, with the keys being woods and lake, and the values being instances of the Location class. Next, we call the addLink method on each of the locations we’ve just created, so that the player will be able to walk between them. The final step of the setup phase is to create the variable currentLocation, specifying where the player will start the game.

We then reach the main game loop, which will repeat indefinitely. We first display the description of the current location, along with the available directions in which the player can move. Then we wait for the player to input a command. In this version of the code, the only valid commands are directions: for example, type ‘north’ at the starting location to go to the lake. When a direction is entered, we check to make sure it’s a valid direction from the current location, then update currentLocation to the new location. When the main loop restarts, the description of the new location is displayed.

I moved on from the ZX Spectrum eight years after my dad first unpacked it. Despite the poor design of my code, I’d learned the essentials of programming. Ten years later, I was a game developer.

Further reading

If you’re keen to learn more about making a text adventure in Python, you could check out Phillip Johnson’s guide to the subject, Make Your Own Python Text Adventure. The author has also written a condensed version of the same guide.

You may also be interested in our free online course Object-oriented Programming in Python: Create Your Own Adventure Game.

More from Wireframe

You can discover more tutorials, alongside great reviews, articles and advice, in Wireframe issue 6, out now and available in Tesco, WHSmith, and all good independent UK newsagents.

Or you can buy Wireframe directly from the Raspberry Pi Press store — worldwide delivery is available. And if you’d like to own a handy digital version of the magazine, you can also download the PDF for free.

The post Building a text adventure | Wireframe #6 appeared first on Raspberry Pi.