The following project should be done in groups of at least two and no more than three. Each group will construct a complete client and server.
Construct a client/server application to support playing the game of Checkers across a network. Specifically, you are to write both a server (which manages client accounts and games) and a GUI-based client that connects to the server, and allows the user to play games with other connected users.
Note that you are not being asked to write an AI to play against human players. As an interesting aside, however, checkers is one of the few games that has been completely solved, with perfect play always resulting in a draw.
If you are unfamiliar with fine points of the game's rules, you can review them here: https://en.wikipedia.org/wiki/English_draughts
The graphics component for checkers is straightforward. You need only do a two-dimensional view of the checkerboard (though 3D boards are possible: I'll leave that to your sense of exploration).
A client should be able to login in to an existing account. Though it is a poor idea in the real world, you can settle for transmitting the password in clear text, rather than establishing an encrypted connection.
The client, once logged in, should see a list of existing client accounts. As a bonus, make it clear when other clients are currently logged in to the site. They should also see a list of ongoing games, and have the option of reviewing an archive of completed games.
Once an ongoing game is loaded, the client should be able to make a (legal only) move and transmit this move back to the server. No further move should be possible in the game until the opponent has played their turn.
The server should manage game files for each client account.
How much game data should be stored, and who should be responsible for it? Should the server manage the whole thing? Should the individual clients manage their own game archives, with the server remaining comparatively stateless? What is the application-layer protocol you will use? There is more than one way to approach this problem. Make it clear what you are doing, pick a strategy, and go for it.
Whatever conventions you settle on, they will have to be agreed upon by every group. This is because the pairing of client and server application is not predetermined. Every client application should work with either server, which means a total of six possible pairings.
[UPDATE: The results of our "standardization committee" meetings are available here (link)]