Projects

Everything I have built while learning — university coursework taken further than it needed to go, plus the ones nobody assigned.

Showing 21 / 21
Java

Animal Drawing Classifier

A Java Swing app that recognizes hand-drawn animals using only classic techniques — HSV colour histograms, flood-fill shape descriptors, PCA and a from-scratch neural network trained with backpropagation, one network per class.

Java

Game of the Goose Simulator

A Java Swing app that estimates by Monte Carlo simulation how many turns a Game of the Goose takes to finish, validates the estimate against an exact analytical solver, and plays it out on an isometric 2.5D board.

Blender

Boxing Match Cinematic

A one-minute cinematic built in Blender 4.5 and rendered with Cycles — a boxing match between Baki Hanma and Yuji Itadori in a UIB-inspired arena, resolved as a single continuous take that chains nine cameras, with NLA-driven animation and Python-scripted consoles.

Video Report
Java

Modified Connect 4 Agent

A Java Swing app that builds game-playing agents for a modified Connect 4 with adversarial search — minimax, alpha-beta pruning and a transposition table — lets a human face them, and runs agent-versus-agent tournaments as a benchmark.

Prolog

Pips

A solver for the NYT Games Pips domino puzzle written in pure SWI-Prolog logic programming, where a single reversible predicate can either check a proposed solution or compute one from scratch through backtracking.

Java

Calculator Game Solver

A Java Swing app that solves the calculator game with dynamic programming, lets you play it interactively with perfect-play hints and a live decision tree, and benchmarks a family of DP solver strategies against each other.

MATLAB

License Plate Recognizer

A MATLAB image-processing pipeline that reads European license plates, identifies the issuing country from the EU strip, and stays robust to Gaussian noise — classic computer vision, no learned model.

Report
Lisp

Paintball

A turn-based Paintball simulator written in XLISP-PLUS in a strictly functional style — immutable state, no mutation, no loops — where two AI agents fight to destroy the enemy base by painting it in all three colours.

Java

Huffman File Compressor

A Java Swing app that compresses and decompresses files and directories with the greedy Huffman algorithm, visualizes the resulting code tree, and benchmarks four interchangeable priority-queue implementations used to build it.

Java

Closest & Farthest Pair of Points

A Java Swing app that finds the closest and farthest pair of points in a 2D cloud, pitting a brute-force strategy against a divide & conquer one both visually and in a benchmark that estimates where divide & conquer starts to pay off.

Java

Two-Piece Hamiltonian Chessboard Tour

A Java Swing app that solves a backtracking variant of the knight's tour: two pieces share a single Hamiltonian tour of a chessboard, moving in alternating turns, with the rule that neither may ever be in a position to capture the other.

Java

Asymptotic Complexity Analyzer

A Java Swing app that measures the real execution time of four reference growth orders on the JVM — linear to quadratic-logarithmic — plots the curves live, and checks a fitted prediction against a fresh measurement.

JavaScript

Brain MRI Scans Classification

A brain tumor MRI classifier trained with Teachable Machine over four classes — glioma, meningioma, pituitary and none — exported to TensorFlow.js and served as a web app that runs the inference in the browser.

Demo Report
Java

Java68 Compiler

A complete compiler for Java68, a small imperative language built for it, that takes a program through every classic phase — lexical, syntax and semantic analysis, three-address code and optimization — down to Motorola 68000 assembly ready to run on a simulator.

Python

Airline Passenger Satisfaction

A supervised-learning notebook over a 130k-row airline passenger survey: cleaning with the reasons written down, PCA and K-means segmentation, then five classifiers tuned by grid search and compared on accuracy, macro F1 and the train-test gap.

Python

FrozenLake Learning Agents

A Python comparison of four ways to cross slippery FrozenLake — Monte Carlo, Q-learning, SARSA and a genetic algorithm over deterministic policies — behind a single agent interface, charted against each other by success rate.

Python

Labyrinth Search Agents

A trio of Python agents that play the same labyrinth game three ways — depth-first, A* with a Manhattan heuristic and minimax with alpha-beta pruning — over one shared state model that serves an uninformed search, an informed one and a game tree.

C

ext2 Filesystem

A Unix-like filesystem written in C, inspired by ext2 — an mmap block layer, inodes with single/double/triple indirect pointers, path resolution with pluggable caching, and POSIX semaphores for safe concurrent access, all exposed as a suite of mi_* command-line tools.

Assembly

Pac-Man MC68000

A Pac-Man-style game written entirely in MC68000 assembly for the EASy68K simulator — game loop and state, map rendering, sprites, scoring and ghost AI, with no standard library and every service going through system traps.

Video Report
Java

Tetris Block Puzzle

A Java Swing puzzle in which nothing falls: random three-by-three shapes are dragged onto the board with the mouse, complete rows and columns clear together, and every finished match is appended to a file of serialised objects.

Report
Java

Contact Agenda Mailer

A console mail merge in Java that keeps an address book and its distribution lists in flat files and turns an HTML template into one personalised letter per contact, over a string type written by hand on top of a character array.

Report