Crossing Guard Joe is a arcade game. Inspired by the original game of the same name on Steam, this version recreates its core mechanics for educational purposes using a text-based interface.
The objective is simple: guide children safely across the street while avoiding aggressive drivers that never stop. Although the controls are straightforward, the game relies on quick reactions and careful timing to keep each crossing under control.

Overview #
This project was built without a game engine or framework, relying almost entirely on Lanterna, a text-based UI (TUI) library. The goal was to reproduce the feel of the original game while learning how to design and implement a complete interactive experience in a terminal environment.
In the game, you take the role of Joe, a crossing guard responsible for helping children cross the street safely. Alongside the core gameplay loop, the project also includes customization features, allowing players to change character outfits and car colors.
Below are some of the game’s main screens and interactions.

Figure 1: Gameplay preview

Figure 2: Main menu

Figure 3: Character and vehicle customization

Figure 4: In-game movement for Joe

Figure 5: In-game movement for the children

Figure 6: Instructions screen
Figure 7: Additional menus and interface screens
Architecture & Testing #
Beyond gameplay, this project was also an exercise in object-oriented design. The codebase was structured with maintainability, modularity, and scalability in mind, using patterns such as MVC, Observer for input handling, State, Factory, and Singleton where appropriate.
To validate the implementation, the project used JUnit for unit testing, Mockito for isolating dependencies and testing behavior, and PIT for mutation testing. Combined with code coverage analysis, this helped verify not only that the core systems behaved as expected, but also that the tests themselves were meaningful and reliable.
Overall, this was a valuable experience in building a complete game with a terminal UI, while also applying software architecture and testing practices in a practical setting.
You can explore the code and implementation details in the repository below.