# 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.