Genetic Race AI is the project I created for my dissertation in the final year of University in 2019. As I have a keen interest in simulations of and real motorsport, it seemed natural to pair this with another interest in genetics and evolution. As such, I chose to try to implement a Genetic Algorithm to create and control the drivers for a racing simulation and/or game. The project as shown here is the state at which it was handed in, containing a successful training environment and a number of circuits.
One of the key features I wanted was to have each set of evolved genes to able to safely (i.e without leaving the circuit) navigate any track layout. This was an achieved outcome, however it should be noted that this is heavily linked to track width, this has been fixed in later versions.
I also used the Dear ImGui framework (along with the sf::ImGui binding to make it work with SFML) to display menu's and live data analysis to the user.
I enjoyed working on this project as there were multiple areas to delve into and develop. It also received lots of interest when I presented it at ExpoTees 2019 .
I am currently rewriting this to implement all the changes that I felt were necessary and implementing some suggestions from ExpoTees. As of 18/09/2019 I have written an editor using SFML and Dear ImGui to create the Track files, outputting a .png and YAML text file to hold any information, following this I have started to reimplement much of the original code. I hope to merge the two projects into one and port to Windows and Linux in the near future!
DigDug + HAPI Game Engine
This project was part of the Games Engine Construction, where the task was to first create a simple 2d game engine, including writing black-boxed Graphics class, using C++ and the HAPI framework. I later also added a similarly black-boxed Sound class. This was an enjoyable project and I especially enjoyed working with lower level games systems, learning how to draw to the screen using a screen pointer and screen array. It also encouraged me to learn to use XML to load and save each level.
In the same semester I had a module which asked us to create a tile based game editor using c# WPF, this seemed the ideal opportunity to combine the two modules and create an editor for my DigDug Game.
Not a JRPG
This project was to create a game in a 4 person team. Unfortunately, finding a capable artist on a programming degree is not the easiest task, as such the game does not look too visually appealing. The title of the project was a 'tongue in cheek' reference to the fact that every other group on the course were making JRPG's.
My role on the team was to create the random maze algorithm, in which I used a Recursive Tree algorithm. I used this algorithm because it guaranteed that there were no closed areas, thus making it very easy to randomly add power-ups and an end to any cell in the maze. I also helped to optimise the game to run at more than 5fps, primarily by deleting the shards of wall after they had crumbled from the wall and enabling GPU instancing in the Unity settings.
The video below is showing off the wall breaking and maze creation features of the game. Please be aware that there are unexpected sounds in the video that still make me jump when watching.
'Snakey Brakey'
This was my first project in C++ and SFML. I manually created a crude UI system as well as following the brief, a variation of the game Snake. The square in the middle of the screen is 'glue', which allows the player to apply the brakes to their snake - If they have moved through that area in the past
Spice my Sponza
This project was my first experience programming in openGL (3.3) and creating shaders. This was created using the TYGA (Tyrone Graphics Application) framework, and was set out as a kind of puzzle. A kind of puzzle because the model had all of the features of the scene, and I had to enable them through code.
Unfortunately whilst i really enjoyed working with openGL at the time, a hand in mixup soured the experience for me. As such I chose the networking pathway the following year and haven't used openGL since.