For this project you may choose an arbitrary game that is played between at least two people based on the players taking turns. The aim of this project is to implement a user interface and game engine to run this game and add artificial intelligence and possibly networking capabilities to the game. There should be a core interface to the game engine for any player-decisions where the player decisions can either come from some AI program, a local or remote human player, or a remote AI program. A remote AI program may be able to utilise a separate computer or even a cluster to make faster and better decisions. The interface can also allow users to contribute their own AI game playing agent. You will have to decide on the game and the particular functionalities you wish to realize by the start of the project for the initial plan and then update this description accordingly. If you course has a particular specialism you may want to adapt the problem to be suitable for this. The focus of this project can be either on efficient networking and synchronization or advanced AI implementation, but ideally, depending on complexity, both issues should be addressed. A minimum required is to implement the actual user interface and game engine, but this is insufficient to achieve a high result. An advanced version of this project could try to implement multiple games via user-defined rules. You will need good programming skills in a language of your choice (C, C++, D, Java, Python, Scheme, Haskell, Lisp, etc) and will have to acquire a good understanding of networking and AI techniques. Ideally the result is released under the GPL V3 or compatible license.