Project Overview

In this project, my partner and I utilized our individual Raspberry Pi devices equipped with Sense HATs to develop an interactive game. The game was designed using the Python programming language, taking advantage of the capabilities provided by the Sense HAT, which includes sensors and an LED matrix for display. We began brainstorming concepts for the game and have decided to utilize the theme of teamwork and communications to engage our players through interactivity.

To facilitate the creation of the game, we splitted tasks based on our strengths. One focused on the user interface and visual design, while the other worked on the game logic and sensor integration of the game.

Through this project, we created multiple minimum variable prototypes (MVPs), conducted several rounds of user-testing to refine gameplay, adress bugs, and enhance the overall user experience. This project provided us to opportunity to understand the creation of game mechanics, creating MVPs and the understanding of using programming language to produce creative application.

Concept

This game requires two players, each utilizing a Raspberry Pi. Player A possesses all the information and instructions related to a bomb that Player B must defuse. Player A has access to a monitor, which displays detailed instructions and visuals related to the bomb's characteristics and potential defusal steps. In addition, Player A’s Raspberry Pi will display a digital timer using the Sense HAT LED display. The timer will provide real-time feedback during the gameplay, allowing Player A to keep track of elapsed time efficiently. This feature enhances the interactive experience and can be programmed to change colors or patterns as time progresses, further engaging the player.

Player B holds the second Raspberry Pi, which represents the bomb in the game. Their task is to follow Player A’s verbal instructions attentively to successfully defuse the bomb. Communication is crucial, as Player B cannot see the bomb's details and relies entirely on Player A for guidance.

If Player B completes the defusal tasks correctly as instructed, they will successfully disarm the bomb. However, if any of the tasks are performed incorrectly or if Player B fails to follow instructions, the bomb will detonate, resulting in the game ending prematurely. Effective collaboration and communication between the two players are essential for the game's success.

Timeline:

5 weeks

Roles & Responsibilities:

Python Coding, UX Research, Gamification, Game Development

Design & Development Tools:

Figma, Raspberry Pi, Google Sheet, Thonny, GitHub

PROGRESSION

FINAL VISION

In this game, the two players will turn their backs to one another. Player A possesses all the information required to defuse the bomb and will relay instructions to Player B. Meanwhile, Player B, who has the bomb, must carry out all essential steps to successfully defuse it.


PERSONA

SKETCHES

We created a userflow which clearly display the steps that players will experience and it outlines the process of losing and win each game.


This is an initial sketch of all the potential actions and display being shown on the sense hat for the “defuser” side of the game.


After roughly sketching all actions and displays, we used a spreadsheet to further refined and to have a clearer view of what it would like look on the sense hat. We used the colour blue to temporary replace the colour white on the spreadsheet for an easy view of the LED panel. Below we have also created a simplified code associated with the LED display.


MINIMUM VIABLE PROTOTYPE ONE

Given the nature of our game and how the users interact with the prototype, we figured that having MQTT implementation was not a priority in this MVP. That comes in the next MVP!

MVP ONE - USERTESTING ANALYSIS

MINIMUM VIABLE PROTOTYPE TWO

Since MVP in addition to implementing MQTT, we have added a timer to increase the sense of urgency we want in our bomb-defusing game. As of now, there are a few issues we still need to tackle but it works nonetheless.

Here, in this chunk of code, we are using the time function time() to set a start variable. This variable holds the time since the epoch (Jan 1, 1970) in seconds. Then the variable “t” holds the time since the first time that time() was called (the variable “start). With the difference of the current epoch time and the starting epoch time, we are able to implement various if statements depending on how many seconds have passed since to set pixels on the top of the LED array to visualize a timer. 8 if statements for each LED pixel. Once the timer (the variable “t”) hits a specified second (as of testing the code internally, 24 seconds), It ends the game.


For the instructor side, we added extra screens to also let the instructor know whether they lost or won. These screens will be triggered by the diffuser side via MQTT.

One problem we encountered, although not game-breaking, is that when the players lose when the instructor tries to click “back to the main menu” on the Lose Screen, they would have to press that button multiple times before actually getting back to the main menu.

MVP 2 OVERALL CHANGELOG

MQTT IMPLEMENTATION

TIMER IMPLEMENTATION

WIN & LOSE SCREEN

MVP TWO - USERTESTING ANALYSIS

MINIMUM VIABLE PROTOTYPE THREE

Bomb as key element of poster

Highlights key qualities that is expected from team members

Brief benefits of this game

Separate instructors for 2 players

Simple steps of instructions to understand both player’s role

Distinct visuals to guide players through gameplay

FINAL INSTRUCTOR CODE:

FINAL DEFUSER CODE: