CS 3110 Tournament History

Computer Science Department
Cornell University

CS 3110 (formerly CS 312) is the third programming course in the Cornell Computer Science curriculum. The goal of the course is to help students become excellent programmers and software designers who can design and implement software that is elegant, efficient, and correct, and whose code can be maintained and reused. CS 3110 covers a broad set of topics, including: alternative programming paradigms, especially functional and concurrent programming; writing and using specifications; modular programming and data abstraction; reasoning about program correctness; reasoning about system performance; and useful and efficient data structures and algorithms.

The course has often held a tournament at the end of the semester, in which student groups compete to produce the best program, usually one that played a game. This competition is not been a part of the official coursework, but students have nevertheless worked hard to win.

Many of the games have involved teams of robots running a program written in a concurrent programming language, called variously RCL or CL. In an earlier programming assignment, the students made the interpreter for the concurrent programming language work.

Fall 2017: Open-ended project

This semester students were again empowered to choose and build their own system. The course staff selected three projects as especially noteworthy:


Fall 2016: Open-ended project

This semester students were again empowered to choose and build their own system. The course staff selected three projects as especially noteworthy:


Fall 2015: Open-ended project

This semester students were empowered to choose and build their own system. The course staff selected three projects as especially noteworthy:


Spring 2015: Map/Reduce apps

This semester students competed to make the most exciting elective app for their map/reduce frameworks. Starting from an empty .ml file, our students constructed some fantastic distributed applications, including digital image and audio file comparison, dna sequencing computations, image asciifiers, and more. At the end of a fun-filled demo session, students and staff selected their favorites:

ray traced camel and balloons, produced by TrayRacers using Map/Reduce

Fall 2014: PokéJouki, Emerald Version

Gamers worldwide have been waiting for the third installment in the critically acclaimed PokéJouki series, and, thanks to the students of CS 3110, the release of PokéJouki Emerald was a resounding success! PokéJouki Emerald featured 135 new fantastical creatures, an assortment of new moves and techniques, and a completely rebalanced battle system that put your wits to the test.

Students submitted their bots to compete in a massive tournament to vie for the title of this semester's PokéJouki Master! Exceptions were thrown, Metapods wreaked havoc, and ultimately several trainers fought their way to the top:

  1. Anthony Lin and Jason Kurs
  2. Albert Heidmann, Kaushik Venkataraman, and Salvatore Elder
  3. Ann Bannon, Alanna Weiss, Seth Martin, and Tizoc Franco
  4. Kevin Gaan, Meghan McKenzie, Robert O'Donnell, and Timothy Murray

Spring 2014: Settlers of Gates Hall

Settlers of Catan Gates Hall! Bots competed for survival on a primitive island world (lovingly donated by a rich benefactor) divided into hexagonal segments. With nothing but sheep, grain, and rocks for currency, participant bots created deep networks of roads, populated the island with cities, and conducted maritime trade with the local pirates. Secret to success? Never accept a trade request!

Winning bots were:

  1. championbot, submitted by Aaron Rumack and Justin Hendrick.
  2. priority_bot, submitted by Humam Alwassel and Solomon Maina.
  3. hibot, submitted by Kavan Bhavin and Ryan Pindulic.
  4. robotBotratheon, submitted by Elise Cotton and Rachel Faust.

Fall 2013: Steammaku

Inspired by Touhou Project, Steammaku pits gorgeous opponents against one another on an open arena. Bullets are either directed bubbles, multi-pronged trails, or diffusing spreads, and players must avoid these yet remain close enough to danger to score graze points. Screen-cleaning bombs provided temporary relief, but the best bots had to navigate a dense field of missiles. Winning bots were submitted by:

  1. Chi Wei Zhang and Stepheny Cheuk
  2. Huong Giang Nguyen and Hung Tran
  3. Richard Davis and Sofonias Assefa
[bracket] [prologue] [writeup] [epilogue]

Spring 2013: SteamTron

Our version of Tron had bots manipulating teams of fast-moving SteamCycles which left trails of deadly red or blue steam on the playing field. Cycles could collect invincibility or shield powerups to temporarily survive the killer vapors. Winners were:

  1. betterbot, submitted by Alexander Gerstenberger and Ian Vermeulen
  2. switch, submitted by Lemuel Kumarga and Wen Hao Lui
  3. tourney_bot, submitted by Gil Landau and Jan Cardenas
  4. completebot, submitted by Drew Weymouth and Zachary Hempstead
[bracket] [writeup]

Fall 2012: PokéJouki Gold

The long-awaited sequel to 2011's PokéJouki featured additional Steammon, more robust movesets, and a few easter eggs. The winning trainers were Michael Dougherty and Simon Li.


Spring 2012: Age of Upson

Age of Upson (formally known as Age of Upson II: The Steam Age) bears a strong similarity to Age of Empires II, the major differences being no monks, no male villagers, and no spawn times for creating units. Many brave pikeman, archers, paladins, and villagers fought and died this day in the name of functional programming. Armies who reigned victorious were:

  1. bot, submitted by Andrew DeMaio and Gregory Manis
  2. agentsmith, submitted by David Kelly and Ross Hanson
  3. bot, submitted by Jane Yu and Michael Daggett

Honorable mention goes to the legendary natebotster.ml.


Fall 2011: Steamworms

Steamworms had little to do with the beloved Worms franchise. To quote one student: "This isn't worms! This is Halo except everyone looks like a worm." Worms crawled around firing rockets, lazors, and the all-powerful SteamBat™ in a real-time fight to the death. At the end of the night the survivors were Stuart Jackson and Ben Greenman.


Spring 2011: PokéJouki

Contestants choose teams of five Steammon (our version of Pokémon) and do battle for supremacy.

The winners of this year's tournament were:

[ Problem set handout ] [ Impromptu performance at the tournament! ] [ Full bracket ]
Screenshot (click to expand):

Spring 2010: Steamed Fish

In this game, two bots controlling teams of fishes in a tank fight each other. The goal is to destroy the other team's fishes. There are four types of fishes, spawners, which create new fishes, carnivores, which grow by eating other fishes, petards, which can explode, and fishes that can create vacuum beams. The tournament winners were Hee Jung Ryu and Katie Lee Meusling.

[ more videos ]

Fall 2009: SteamKart

Our version of Mario Kart! Up to four competing racers navigate a closed track, picking up various items with special properties that can help them or hinder opponents, such as Pressure Mines, Steam Shells, Turbo Encabulators, Tesla Coils, and Armor. Racers control their acceleration around the board to choose an optimal path, avoiding high-friction areas and obstacles.

The top contestants this year were:

  1. Ran Zhao and Simon Zhang
  2. Daniel Birman and Nicolas Champagne-Williamson
  3. Matthew Goggin and Nicholas Hippenmeyer
  4. Gautam Kamath and Sohan Jain

[ Problem set handout ] [ YouTube video trailer ]
Screenshots (click to expand):

Spring 2009: Steam Fortress

Two teams fight for control of an area using steam-powered robots with a variety of weapons and abilities. The winning team was Kenneth Chu and Jun Hui Erh.

Fall 2008: SteamCraft

In this game, two steam-powered robot teams try in real time to capture each other's flag. Robots control their acceleration around the board, using a variable solar energy flux to recharge boiler pressure. Mines can be dropped to temporarily disable unwary robots that get too close. Robots are programmed using the CL language, which was made entirely functional this semester. A mailbox abstraction was introduced for communication between robot threads. The tournament was won by Lucas Waye and Ryan Musa.
[ Problem set handout] [ CL language fall 2008]

Spring 2008: Abalone

The game was a robot version of the board game Abalone, in which each piece was a separate bot. Bots could push the opponents around and off the board if they coordinated with each other. The winning bot team was by Jerzy Hausknecht.

[ Problem set handout]

(click to expand)

Fall 2007: λ-Quiddich

A two dimensional version of Quidditch. Teams of 5 try and score the quaffle in the goal and track down the snitch. The winning bot (named Tony) was written by Scott Rogoff and Rick Ducott.

(click to expand)

Spring 2007: 20,000 λ's under the Sea

The game was 20,000 λ's under the Sea, in which two underwater teams of squids and whales, controlled by RCL threads, tried to collect as much treasure as possible. Teams could spend treasure to buy more bots. Squids could squirt ink to temporarily immobilize opponents. Whales could eat squid but had to surface to breathe. The winning team was Mohan Zhang and Vincent Chan.

[ Problem set handout] [Java-based game viewer]

(click to expand)

Fall 2006: LambdaCraft

The game was “LambdaCraft”, inspired by the popular real-time strategy game WarCraft. Game pieces were wizards, archers, and knights, with the object of the game to capture the enemy wizard. The wizard could freeze archers and knights, or destroy arrows in flight. All pieces were robots programmed in CL. The board also had mountains and lambda-mines. Picking up lambda-mines (aka lambda-lifting) allowed teams to spawn new archers or knights. The team of Manuel Vargas Escalante and Nicholas Gallo won the competition. [Problem set handout]

(click to expand)

Fall 2005: ML-Man

The game was ML-Man, based on the arcade game Pac-Man. The game had five characters: the MLman and four ghosts, Zardoz (red), Eager (blue), Greedy (pink), and Curried (orange). The goal of MLman was to acquire points by consuming dots and enery pills, or by capturing ghosts. The goal of the ghosts was to intercept and capture MLman. When MLman collected enough points, the game moved to the next level and a new board was loaded. If MLman was captured by a ghost, the game was restarted at the same level. The winning team was Robert Albright and Tyler Steele. [ Problem set handout]

Spring 2005: Multi-Ball

This semester the students implemented “Multi-Ball”, a modified version of the soccer game with players, goalkeepers, and two balls on the field. Players could capture, carry, and kick the ball. Capturing enough randomly appearing powerups allowed teams to add new players. The actions of each player and the movement of each ball were implemented in a concurrent functional programming language called CL. The previous assignment defined this language and students built an interpreter for it. The CL code controlling each player was fully executed on the interpreter. The team of Daniel Margo and Edward McTighe won the tournament.
[Problem set handout]

(click to expand)

Spring 2004: Lambda Shark CTF

As in Spring 2003, the goal was to implement a set of robots using RCL. This time the robots played a capture-the-flag game. The robots were actually robotic sharks packing lasers that they could use to shoot at each other. The board contained a maze that the robots had to find their way through. Picking up star powerups enabled the team to add more robots. The winning team was Justin Pease and Elliot Bäck.
[Problem set handout]

(click to expand)

Spring 2003: Lambda Ball

The goal was to implement a team of robots that could play a soccer-like game called "Lambda Ball". In addition to the ball, which robots could carry or kick, powerups would randomly appear on the board, enabling teams to create more robots or to go into overload mode. The board was a hexagonal grid with an interesting coordinate system. Robots were implemented in a special "Robot Control Language" programming language (RCL). In a previous problem set, student groups had finished the implementation of the RCL interpreter. The winning team was Sanjeev Kapur and Ian Hall.
[Problem set handout]

(click to expand)

Spring 2002: Pente

The tournament game was the board game Pente. The goal was to produce a Pente player. Strong competitors implemented search algorithms that used alpha-beta pruning to search several moves ahead. The winning team was Oren Yeshua and Asher Walkover.
[Problem set handout]