Jacob Rhys Jones


AUS Contact details

+61 489296096

Jones.Jacob.Rhys@gmail.com

Fernhill estate, Penrith, Sydney
NSW 2745





Code and 3D modelling

All of my projects can be found in my Gitlab projects folder



Dissertation Major project

Final Grade: 1st, 70%
Methodology: Agile
Language, librarys + tools: C++, SFML
Version control: GITlab


his project was an attempt to implement an AI opponent in a video game. It was developed over 18 weeks, utilizing an agile-style development methodology.

Developed in C++ with the use of one library, SFML, an implementation of OpenGL, allowing for the drawing of shapes and some basic operations on those shapes. I was the sole developer responsible for all other code.

The "AI", or more aptly the machine learning opponent I chose to implement, was a variant of Q-learning, which, loosely summarised, uses the game’s state, possible actions, and reward systems to generate a value known as a Q-value. This value is stored in a hash map. The Q-value is used to evaluate which action yields the greatest reward and, based on the outcome of that action, is recalculated and backwardly propagated. I had planned to implement Deep Q-learning, which uses a neural network to approximate Q-values for the game state. This approach eliminates the need for a hash map and reduces storage requirements, but due to time constraints this was not viable.

I further developed two additional opponents: one using an A* style search algorithm and another that undertakes random actions. These were implemented for comparison with the Q-learning approach.


Collision detection: Line-Line intersection.
Custom implementation of line-line intersection to allow for more accurate collisions between polygons and circles, while also allowing for collisions at an angle, which the prior solution (bounding boxes) did not accommodate.
The program is grossly inefficient, specifically with regard to the A* search algorithm, due to how it searches throughout the game space and the frequency with which it operates. This could be addressed in a variety of ways, such as changing the storage of in-game objects to a more component-system-style approach, switching to a more efficient search algorithm (such as binary search, though this would necessitate ordered object storage, as would many other search algorithms), or reducing how frequently the algorithm runs.

Hash map and function

The hash map itself is incredibly large in order to account for the numerous possible game states. I would aim to improve the hashing function and define more distinct game states to reduce the number of "collisions" in the hash map (multiple game states occupying the same hash value). Providing more distinct game states and implementing an improved hashing function would help reduce the size of the hash map while increasing its accuracy.

The opponent on the left is an opponent undertaking random actions, while the right opponent is the Q-learning hash map–based "AI".


Portfolio website

Language, librarys + tools: Html, CSS, Javascript
Version control: GITlab

The website you’re currently looking at was written in HTML using an IDE. Utilizing responsive design and a minimalist style, I aimed to create a simple and easily legible website to showcase several of my projects. Throughout the process of creating the site, I went through several iterations of both style and functionality, below is one such example.


Group project

Final Grade: 1st, 73%
Methodology: Scrum
Language, librarys + tools: Java, Javafx
Version control: GITlab

In this group project, the goal was to create a working exercise app within our group. I was elected to the role of programming lead and developed much of the application, ranging from backend features such as custom timers to the front-end UI. The project taught me many valuable lessons about teamwork and collaborating on a shared codebase.


3D render of town

Final Grade: 2nd, 65%
Methodology: Not relevant
Language, librarys + tools: Blender, Gimp(2d image editing software)
Version control: GITlab

This project was completed for my applied graphics assignment, in which the task was to model a snippet of life in the local town (Aberystwyth). For this, I modelled the main street of the town and several human-esque figures that interact within the environment. There are multiple renders depicting different scenarios aside from the one shown, which are available on my GitLab.



Sudoku solver + generater

Final Grade: 1st, 70%
Methodology: Agile
Language, librarys + tools: Java, Javafx
Version control: GITlab

This project was completed for my Algorithm Design assignment and includes a Sudoku puzzle solver and generator. I implemented a recursive solver, as it was an ideal scenario for the use of recursion. Much of the code, as instructed, was written based on several provided interfaces. The puzzles were supplied within one of the classes, and the task was to solve all of them within a reasonable length of time. No additional libraries need to be installed.



3D renders of van

Personal project
Methodology: Not relevant
Language, librarys + tools: Blender, Gimp(2d image editing software)
Version control: GITlab

Over the last year, I have undertaken a project to convert a van into a habitable living space. During the initial stages of the process, to gain a better understanding of the dimensions and final appearance of the space, I created several models and renders, which are displayed below. All relevant (and numerous) files can be found on my GitLab.

1 / 8

2 / 8

3 / 8

4 / 8

5 / 8

6 / 8

7 / 8

8 / 8