Accessible Codenames

This was my final year project for my Software Engineering course at Swansea University. I recreated the board game Codenames as an Android application with a strong focus on accessibility.

A screenshot of the board of the game as shown in the app.

Codenames is played with 2 teams of players, both having a minimum of 2 members. One member per team is assigned the role of 'spymaster' whilst every other member is simply just a regular player.

A screenshot of the scene for setting up teams for the game.

Once the teams have been setup and you start the game, you will be presented with the board which contains 25 unique words all assigned to one of 4 colours. By default these are blue for team A, red for team B, a light green for neutral and black for the bomb word.

To play the game, the starting teams spymaster must find a word that links to as many of the words coloured with their teams colour. For example, if their team has the words "file" and "root" you could give the hint "directory" as that relates to both words. To indiciate to your team how many words they have to choose, you must also give a number along with the word, in this case 2.

A screenshot of the game in the guessing phase of the game.

After a hint has been given, the other members of the team must select which words they think the hint relates to. They are allowed to guess 1 more than the number given, so if the hint relates to 2 words, 3 guesses can be made.

However, you aren't allowed to freely guess as guessing a word belonging to the other team or a neutral word will end your teams turn early and clicking the bomb word will instantly end the game with your loss.

After your team completes your turn, the opposing teams spymaster must now give a hint for their team and the cycle repeats until either the bomb word is clicked, or one team successfully clicks all of their words.

The game features two ways to play, either as a replacement to the board game or you can play online with friends. If you choose to play locally then you can select team members to make it easier to remember whos team everyone is on, or you can play without setting up teams. You then pass the device around your group dependent on who the current game phase applies too.

The online version of the game can be played on your own device and allows you to play with people not in the same room as you. The game still functions the same but now includes a chat option to communicate with team members.

A screenshot of the teams in an online match of the game.

For the accessibility features in the game, I chose to go with Text-to-Speech and customising colours. The Text-to-Speech is triggered by performing a held press on an element that has text associated with it, so a button or just plain text for example. This will then read the text out to the user.

As for customising colours, you have free control over the colour of 8 different categories in the app. These are:

There are 3 available slots to save different combinations of colours.

A screenshot of the scene in the game that allows you to choose the colours of different elements of the game.

I initially started by created designs for how each scene in the app would look and then I created that using XML in Android Studio. Afterwards I created basic code in Kotlin for navigating through the different scenes, testing that every piece of code I wrote worked as intended as I went.

The server to connect the devices together for online play was written in JavaScript using the Node.js framework. Whilst is certainly has room for improvement, given that it was self taught due to JavaScript not being taught on my course at University I think it works very well.

The GitHub repository for the Android application is
available here and the server is available here.

My dissertation for this project is available below.