For the chess assignments we'll be using the XBoard/WinBoard for the GUI and a simplified version of Cassandre as a base for our programs. You can download the simplified version of Cassandre for either Windows (WinCassandre.zip) or Unix (UnixCassandre.tar.gz). Cassandre utilizes a Engine class to encapsulate the chess engine. The play() function in Engine.cpp is where plays are actually made. Cassandre also implements the popular "bitboard" representation for the chess board. Be sure to take a look through the bitboard references at the bottom of the chess page (http://web.umr.edu/~cs347a/sp2005/chess/).
In the fourth phase you need to fill in the play function in the provided framework to play a legal game with Alpha-Beta Transposition-Table Time-Limited Iterative-Deepening Minimax (ABTTTLIDM) with the depth limit specified by the maxDepth member of the Engine class. As in the last phase, state expansion should be partially randomized. ABTTTLIDM requires a State Evaluation Heuristic and you are to provide one that takes at least three strategic or tactical measures into account (e.g., material advantage, position of pieces, pawn structure, etc.). Also, your evaluation function needs to handle Win/Loss/Draw situations. Your transposition table needs to be implemented with a hash table and all the functionality specified in your class handout. Finally, you also need to terminate your iterative deepening search if you no longer have sufficient search time. You can find the remaining time by using the timeControler member of the Engine class. For example, timeControler.getRemainingTime() will provide the remaining time in the game. This is the total remaining time on the clock for the entire game - not just the time allowed for the current move. It's your responsibility to divide the time among individual moves.
Note: this is an individual project; plagiarism of any type will result in a zero grade.
While it is hoped that all code will be submitted error-free and on time, this may not always be the case, so the following rules apply if code is not submitted error-free or on time: