Philippe Demontigny




About Me

Computer Science Master's Student at the University of Waterloo
Email: phdemontigny [at] gmail.com

I am a math major turned computer science grad student who builds small games and applications in my free time. When I'm not working on these projects, I like to study interesting applications of mathematics, including computational geometry and machine learning. I also enjoy playing both computer and board games, participating in Magic the Gathering tournaments, training in Muay Thai, competing in intramural squash, and learning Japanese.

About This Site


This site is where I will post all of the papers, projects, and games I have worked on over the past few years. I will be updating this site regularly as I complete my various side-projects, so be sure to check back often!


Research and Publications







Programming Projects



PortfolioEditor.js

| July 2015

Links: website, github,
Tech: Javascript, HTML, CSS, Fancybox

A simple website editing API that I'm developing so a friend of mine with no programming experience can customize her personal website. The API abstracts away the standard HTML in favor of JavaScript calls for creating menus and pages. Current features include:
  • Edit every page in your portfolio from a single index.js file
  • Use intuitive, stack-based JavaScript commands to customize your site
  • A robust error-checking system that alerts you when commands are misused
  • Integrates with CSS for more advanced control over your site's design


Magic the Gathering Price Predictor

| December 2014

Links: report
Tech: Python, Scikit-Learn, Random Forests

This project was completed as part of a graduate course in Applied Machine Learning in the Fall of 2014. I investigated the viability of using Machine Learning Algorithms to predict the price of Magic the Gathering (MTG) cards using only the information contained in each individual card. In doing so, I hoped to predict which cards would be worth the most before they even became available. The results of my analysis suggested that even after 20 years of MTG, there are still too few cards in the higher price range to create a strong enough prediction algorithm using standard machine learning techniques.


KamiGo, a Simple Computer Go AI

| December 2013

Links: github, report
Tech: Java, Python, Fuego, Neural Networks

As part of the Artificial Intelligence final project in December of 2013, my partners Simon Chase, Daniel Seita, and I created a simple program that plays the game of Go over the course of about two weeks. The program uses a neural net implementation that we trained using transcripts from professional games on 9×9 boards. The final product succeeded in that it was able to learn a non-random strategy. My role in this project was to design and program the input generator, to write the script that trained the neural net, and to create a basic Go player for presentation purposes.



JavaScript Games



Endless Flow

| August 2015

Links: game, codeheart.js
Tech: Javascript, GIMP

This game is based off of the popular mobile puzzles game Flow Free. My version differs from the original in that the levels are procedurally generated rather than being made individually. The algorithm I used is based on the solution from this Reddit post, with a few improvements. In every Flow level, there exists a solution in which the following two conditions are met: 1) every flow has size 3 or more, and 2) no two grid locations share a color without being connected (no "overlaps"). Every puzzle generated by my algorithm has a solution that satisfies these two conditions, which I refer to as the "optimal solution."


Mind Crush, Set meets Candy Crush

| January 2015

Links: game, codeheart.js
Tech: Javascript, GIMP

This game was my second creation from the Machinis Ludo 48 hour game-jam in January of 2015. Inspired by titles such as Flappy Bird and Candy Crush, I modified the rules of Set to create a game that was both very challenging and very addicting. I hope to release this game as a mobile app in Google Play sometime soon. Note: All sound files were borrowed from The Legend of Zelda: The Wind Waker, another fantastic game.


Constellations, the Graph Theory Game

| April 2013

Links: game, codeheart.js
Tech: Javascript, GIMP

This game was my first creation from the Machinis Ludo 48 hour game-jam hosted by Professor Morgan McGuire in April of 2013. My goal with Constellations was to create a game that teaches graph theory and mathematical thinking through a series of thought-provoking puzzles. The game's main feature is the unlockable "challenge problems," many of which do not have solutions. This forces the player to prove to themselves which challenges are not solvable, as the game will never tell them.



Graphics Projects



Shadertoy Challenge

| June 2015 - Present

Links: profile, trello
Tech: GLSL

A "weekly" challenge in which members of our lab at Waterloo submit shaders that satisfy a given condition. Each subsequent challenege builds on the previous by adding more complex rendering requirements. The goal of this challenge is to gradually expand our knowledge of graphics and shaders as a group, and to eventually create some really cool scenes. For a description of each challenge and a list of the shaders submitted by our group, click on the "trello" link above!



The Weeping Forest

| April 2015

Links: game, report
Tech: JavaScript, WebGL, THREE.js

A horror-survival game in which the player is being chased through a forest by the Weeping Angel characters from the Dr. Who television series. The goal of the game is to turn on all of the lanterns in the forest without letting the angels sneak up on you. This project was inspired by the game "Slender: The Eight Pages," and attempts to create a similarly creepy experience for the player. It was implemented entirely in Javascript using the THREE.js WebGL API. The Weeping Forest took third place in the final project competition for my computer graphics class.


C++ Ray Tracer

| March 2015

Links: github
Tech: C++, Lua

A simple ray tracer implementation in C++ that draws scenes as specified in lua files. It has the following features, which can be seen in the generated image to the left.
  • Draws primitives such as spheres and boxes as well as triangular meshes.
  • Uses the Phong Reflection Model to calculate aggregate color intensity from multiple light sources.
  • Accurately renders shadows and specular highlights.
  • Models mirrored surfaces using recursively generated reflected rays.
  • Simple drawing acceleration implemented using bounding spheres.




Site Design by Philippe Demontigny