Bennett Purdy

Full Stack Web Developer

No Future

No Future is a text-based adventure game. It is written in Python with the Flask web framework, and published at my website. The gameplay of No Future involves the user reading text which is displayed on the web page and selecting a button to click in order to advance the game state. The game tells the story of an ecologist who wakes up from cryosleep to discover a world in ruin, populated by strange, hostile creatures.

A dark-themed interactive text adventure screen titled No Future. The text reads: There is a flying creature that looks like a vulture. You hear the sound of water flowing, and as you draw closer, you see a small stream in the forest. It is choked with ash, and there does not appear to be anything living within. Below the text are three rectangular buttons labeled Cross stream, Follow stream, and Back. The background is black, with beige text and gray buttons.

Purpose

I created No Future to learn about web development, to learn how to use a web framework, and to practice using Git. Prior to beginning the project, I had created several small Python programs, but had not used a web framework. Additionally, I intended to make a fun and interesting story-driven game which would be enjoyed by friends and family.

Technology

No Future is a Python program that uses the Flask web framework to function as a web app. HTTP requests are employed to get user input and advance the program. The program’s data is stored in JSON files. HTML and Jinja are used to create the web page that the app displays on, and CSS is used to style the page.

The app is built as a Docker container and published to a subdomain of my website, yurupath.net. Nginx Proxy Manager was used to create SSL certificates and proxy the URL to the Docker container.

The project is version controlled with Git and pushed to a Gitlab repository.

Design

The model-view-controller pattern was used to organize the flow of data in No Future.

The Python program serves as the controller, handling the logic of the app. The program consists of a main route which calls various functions to process the player’s action according to the game logic, and return data to be utilized by the view.

The HTML template serves as the view, displaying the information returned by the controller and rendering specific buttons based on the game state. When the user clicks a button, it sends an HTTP POST request which is processed by the controller.

The JSON files serve as the model, storing information that will be utilized by the controller. One JSON file contains all the data for the “world” of the game, which is read-only, while the other file contains the present game state, which can be read and written. The game can be saved by the player, which writes to the “state” file.

User Feedback

About 10 people have played the game. Most users have expressed enjoyment while playing the game and an interest in the story. Multiple users have reported difficulty in understanding where their character is in relation to objectives in the game world (and how to move to those objectives), as well as understanding what their current objective is.

View source code

Copyright © Bennett Purdy 2025