This arcade game is an Android remake of a DirectX game I made with a few friends in University. I subsequently ported the game to XNA, which vastly improved the performance and appearance. I decided with one of the other creators to remake the game for Android. It uses high resolution graphics and implements efficient collision detection between floating shapes. High scores are stored in an online database using PHP and SQL. The game logic was programmed in an abstract way to decouple it from the Android implementation. This will allow us to swap out different APIs without changing the main game code. The game can be accessed with a desktop or mobile phone here.
Aramaic Flashcards is an easy way to learn the language used in the Babylonian Talmud. This 1500 year old document is studied daily by thousands of scholars. Its text is inaccessible to those without knowledge of its ancient language, until now. This application contains over 100 key phrases used throughout the Talmud, in an easy to use format. This was my first solo Android application that I developed. Using a vocabulary list provided by a friend, I created the interface from scratch using Android APIs. The app is for sale on the Google Play store for a low price. It can be accessed with a desktop or mobile phone here.
WebGL Board Game
This was my first attempt at making a WebGL game. There is a board game I really like to play, and I couldn't find an online version of it. I decided it would be a fun challenge to implement it myself. It is a four player strategy game. The game's nature led to some difficult logic challenges. For example, to determine when a player's game was over, I had to compute if they had any remaining moves. This was harder than it seemed, and was an interesting challenge. The game can be downloaded and played in a WebGL compatible browser here. There you can also read the game rules and view source code commit history.
Stipple image generator
This application is a WebGL implementation of the paper Weighted Voronoi Stippling by Secord. Originally this was a school project in C++, but I recreated it from scratch in order to teach myself WebGL. Choose an image, the number of stipple points and their respective size and colour and the program will generate a stipple image representation. The program is iterative, meaning that it gradually gets more accurate over time. At any point you can stop the application and save the output to your computer. The source repo and commit history can be viewed on github. The application can be accessed on this page. You need a WebGL compatible browser to view the application.
University Honours Project
My University Honours Project was called: Modern to Historical Image Feature Matching. The link is to the condensed paper that I wrote on the project. It contains the main information and the final results. The abstract of the paper gives a good summary of the problem and my attempt at finding a solution. A much longer (~50 pages) version with all the tables that were compiled can be accessed here. The project itself, including the source code and final executable, can be downloaded here. The project was written in C++ using the OpenCV computer vision library. The data set that all the tests were conducted on can be downloaded here. My final mark on the project was an A+.
X2-Toon: An extended X-Toon Shader
For my Image Processing class we had to find a paper related to the course material, implement it, and extend it with features of our own. My partner and I chose X-Toon: An Extended Toon Shader. It extended the concept of toon or cel shading 3D models by using a second dimension of information to determine the level of detail to display. My partner and I implemented it in XNA, and added features of our own. We had to write a SIGGRAPH style paper, documenting our results. The paper can be read here. The code repository can be viewed on github. You can build the project yourself or download this executable. You will need to have DirectX/XNA installed.
In my Artifical Intelligence class, we were asked to create two multiplayer games using the MiniMax algorithm. This algorithm has a computer player choose intelligent moves to play based off the current game state. The games we made weren't very fun and highly unusual, so I decided to implement the classic game of Reversi to test out the algorithm. The game has 3 modes: Easy, Medium, and Hard. Each difficulty is determined by how many moves ahead the computer looks (4, 6, and 8 respectively). It was very easy to migrate my solution for school and use it in this project, since I made the algorithm independent of the specific game being played. Play it here.
Snake AI Search
For my fourth year Artificial Intelligence course, our first assignment was to implement the classic game Snake. The hard part was then to implement three different search algorithms so the snake will find the food by itself. The modified rules for the game were that there could be obstacles, and the snake wouldn't grow. For fun, I retained the original game's functionality of the snake growing when it ate food. The three search algorithms were Breadth First Search, Depth First Search, and A* Search. Each algorithm has its own advantages and disadvantages, which will be described. You can play the game normally here or try out the different search agorithms.
Towers of Hanoi
This is a program I made for fun trying to understand the recursion of the Towers of Hanoi problem. The solution to the puzzle is very simple from a recursion point of view. Without recursion the solution seems difficult to conceptualize/develop. It was programmed using the Processing library made for Java. It is a very simple application which is a visual representation of the solution to the problem. There are buttons which allow you to modify the puzzle. The first two buttons decrease/increase the solution speed. The other two buttons decrease/increase the number of pegs. The more pegs, the harder the puzzle in real life, but the recursion is the same. Preview it here.
When converting my website to SVN, I wanted a tool to allow me to avoid manually uploading commit changes to my FTP server. I found some solutions online, but most of them weren't exactly what I was looking for, and many were too complicated. I ended up making something from scratch using the changelist provided by SVN. This tool automatically uploads all new and modified files to the server, and deletes any file or folder that was removed from the SVN repo. The script runs when a commit completes. The script is very easy to install. The source repo, commit history and installation instructions can be viewed on github.
This was my third year game design course's final project. I developed it with a friend. The game has the player trapped inside a book, where pages are constantly falling. Each page has in it a randomly located hole which allows the player to survive to the next page. The goal of the game is to last as long as possible without getting squished by the falling page. The game was developed in C++, using the DirectX graphics framework. This was the first 3D game I had made. The goal was to make the game get harder as time went on, such as making the pages fall faster, but it didn't end up getting implemented. You can read more about it here.
In the Summer of 2009 I was honoured to be awarded a Research Internship by Carleton University. I got to choose from many professor's in my field of study and work with them and their research topics. I chose Dr. Anthony Whitehead who was researching Gesture Recognition in Motion Peripherals. My job was to find an effective method of recognizing simple gestures with an accelerometer. By the end of the summer I wrote a program that analyzed the data outputted by the device. My report of what I accomplished is posted here, you can also download the Word document here and the code I wrote here.
This was an assignment for my Java GUI course. We used Java Swing to create a "shuffleboard" game. It works as a two player game to see who can get the highest score with their stones. The further your stone stops the higher your score, as long as you don't hit any walls or fall outside the boundaries. Each player gets 4 stones to shoot. There is fully implemented collision detection so each stone bounces off the other appropriately. There is also satisfying friction so the stones stop properly. To toss a stone click on it and drag backwards. The length of the line you create determines how fast the stone is shot. The stone will be shot in the direction the line is facing. If a stone falls out of bounds...