/Tetromino-AI

A typical falling Tetromino game, and an AI to play it.

Primary LanguageClojure

# Falling Tetromino Game AI

An implementation of a typical falling tetromino game and a corresponding AI controller. 
I wrote this for a term project in my artificial intelligence course.

I had originally intended to do a comparative analysis of AI methods for
playing this game, but my ambition outweighed my cleverness (and I caught pneumonia).
I was only able to finish one actual AI controller, but I still managed an A in the 
course!

The project is mostly written in Clojure, with the exception of the GUI, which
is in Java (what else?). It's my first Clojure project, so the style is probably
a bit different from a long-time Clojure programmer, and it's horribly inefficient in
places. Still, I think I did a pretty good job for a first attempt...

There are a couple of bugs -- occasionally, the AI cheats and makes impossible moves. 
It also occasionally stops working - just restart the program to fix it.

Credit where credit is due:
The heuristics used for the algorithm (but not their weights) are derived from the article here:
https://luckytoilet.wordpress.com/2011/05/27/coding-a-tetris-ai-using-a-genetic-algorithm/

## Usage

Run core.clj to run the game with an AI controller. To use the human or random
choice controllers, modify the players vector in the main method of core.clj. The
comments should make it clear what to do.

## License

Copyright (C) 2011 Joel Hobson

The source code is distributed under the MIT license, printed below.

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.