"Escape", a 2D Graphical Tile-Based Game

Developed a tile-rendering world-generation game for players to escape.

Role: Developer and Game Designer

Tools: Java, IntelliJ

Product
Design

Here's a gif of my game being played.

Overview

This class-based project was focused on creating an engine for generating explorable worlds — providing me an opportunity to work at every stage of development, from ideation to presentation. The goal was to learn how to handle a larger piece of code with little starter code, emulating something similar to that of a product development cycle.

Let’s define a few terms before getting into how I designed and implemented this 2D tile-based game.

  • “Tile-based” means the world consists of 2D grid of tiles, made up of graphical images.
  • “Game” means that the player will be able to walk around and interact with the world from an overhead perspective.

An example of a more sophisticated version of what I created would be the NES game “Zelda II.”

A screenshot of Zelda II being played.

Some key features about this game was that each time a new game was started, a new world would be created, pseudorandomly generating various lengths and widths of rectangular rooms, hallways, and outdoor spaces. Players would be able to move their character around with the “WASD” keys, tasked with the goal of exiting out through a door. Hovering over certain tiles in the world would also let you know what object that tile specifically was. Players would also be able to save and load previous game states so they could continue playing the game from where they left off!

Drawing inspiration from several of these other tile-based games, I used an A* algorithm to generate the world and added UI interactions to give the players an interface to play on.

Here’s a sample play-through of the login screen. See the first image for a playthrough of the world:

A gif of the login screen.

Takeaways

This clearly taught me how to think about game design and its integrations with algorithms, especially when building it with a Java data structure, showcasing a fairly complex system. And while I ran into and fixed many (many oh so many) bugs with IntelliJ IDEA, I’m definitely grateful for some of the core concepts I learned with A* and how to create a simple, but easy to understand UI/UX interface for behavioral movements within a game.

Now I might not hate on Java flash games so much anymore. :')

If I were to continue working on this project, I’d flush out more of the graphics and the user interface of the final look of the game.