Fitchneal- AI Game Project for 2006

Game Executables

The game manager is now available! This program allows two other program to play one another automatically (via socket connections) and will greatly speed up the time it takes to play games. The program is written in C# and you can download source code which includes a binary. The program will only run under Windows. The code is here: (updated 10/28/06 to show moves and captures)

Information about using it is commented in the code. You can read about it here: README.txt

A sample client that you can use with the game manager is available. The client simply makes random moves. Source code in C# including a binary is here: (updated, bug fixes, 10/28/06)

A windows .NET executable of an AI-playing client is here: FitchnealAIClient.exe. Use it to test your program against. Be careful not to tune your program too much to just beat the AI client, beating it doesn't necessarily mean it will play well against other programs! For example, the program has been tweaked to be somewhat aggressive to avoid draws where both sides repeat the same moves.

Known issues:

Fitchneal Information

For this course, your project is to write an AI program that can play the game Fitchneal. This is an Irish game from the middle ages and is derived from a Norse game called Hnefatafl and the more modern incarnation of Tablut .  Your program will have up to 20 seconds to make its move. At the end of class there will be a tournament among the AI programs, and the team (or individual) with the winning program wins extra credit points worth half a letter grade.

For rules on how to play, see the Shire of Hartshorn-Dale page.

To try a Java applet so you can learn how to play, visit:   Note that the game piece layout is a little different than the layout described on the Shire of Hartshon-Dale page.  We'll use the same layout given on the applet's page, not the layout of the Shire page.  Aside from this difference, the game is identical. 

We will be playing the tournament in the CS lab so you must make sure that your programs run there.  To be fair in terms of processing power, you may not execute code on remote machines.

Tournament Format

We will attempt to play round-robin, where each team plays every other team twice (once where each team plays as attacker). If the game gets stuck where both sides repeat the same moves the game will be called a draw. During this phase we will tally the total number of wins, losses, and draws. The team with the most wins (not percentage) will be the declared the winner and the team with the next highest number of wins will be declared the runner-up.

If teams are tied then a rematch will be conducted but each team will have only 5 seconds to move. Two games will be played with each side playing as attacker. If one team wins more games then it will be declared the winner. Otherwise a tie will be declared and both teams will receive the extra credit.

If there is a tie for first place then no extra credit will be given to the third-place runner up team.

Note: Playing round robin requires 12 games per team. This may take more than the 1:15 minutes for class. If you are able to come early this will help us finish on time. You will also need to play simultaneous games in order to finish on time.

Team Entries

Team: TBD (Vikings? Pirates?)

Team: Carbombers

Team: The Cobras

Team: Oddsocks

Team: Mashroots

Team: Loki's Revenge

Team: Dominic
Dominic Williams

The Game Rules

To communicate moves all programs must conform to the same move format.  The move format is simply a pair of coordinates that specify the (X,Y) coordinate of the piece to move followed by the (X,Y) coordinate where the piece is to move.  (1,1) is in the upper left corner and X increases to the right and Y increases down, just like coordinates on the graphics screen.  It will be up to the programs to determine if a move results in the removal of pieces, winning the game, or an invalid move.

Here is an image of the board showing the move coordinates:

If it is the attacker (red's) turn then if we moved the piece at (1,6) to (2,6) this would be entered as:

       1 6 2 6

And result in the following game state: