This application serves as a game interface where users are invited to play the classic Checkers board game in an online environment against other players.
The game is using the Desktop Compose UI framework, and the data is stored in the Mongo Database.
The whole project was a key evaluation point of the Software Development Techniques (TDS) course in the CSE undergraduate program of ISEL.
- Download
- Features
- Requirements
- Application Structure
- Initial Window
- Main Window
- Internet Connection
- Known Bugs
Download the JAR file here.
- Checker unique images
- Sound effects
- Expressive dialog windows
- Switch between automatic and manual refresh of the game screen
- JRE 1.4.0 or above (for running the application)
- JDK 17 or above (for development purposes)
In the repository root, access src/main/kotlin
where you can find the application structure which is divided in 5 major modules:
- checkers - includes modules that are mainly exclusive to the Checkers game context.
- model - includes all types used to construct the game logic.
- storage - includes a serializer specific of this game implementation along with the MongoDB access.
- ui - includes both console (cmd) and compose UI implementations.
- Main.kt and MainCMD.kt - are both entry points of the application, for the composable and cmd interfaces, respectively.
- composables - includes all major generic composables used in the application.
- encryption - includes the decrypt function but not the encrypt function as its content was not considered relevant.
- file - composes of all interfaces and classes that provide access to file operations such as read and write.
- storage - includes all the interfaces and classes that allow the usage of different types of storage.
When the program is launched, this is the initial window that appears which allows you to choose a board dimension from the list of the available options. At the bottom, there are a few shortcuts to contact the developer in order to report a bug, ask for future functionalities, or offer suggestions for improvement.
By accessing the Game Menu you can:
- Create a new game by providing a game identifier of your choice.
- Resume a game by using a previously created game identifier.
- Manually refresh the game interface. This option will only be enabled if it's not your turn.
- Exit the application. This option will terminate the application and does not return to the Initial Window. To create or resume a game in another board dimension, the application must be restarted.
It is only possible to join a game that has already been started. Both New and Resume options work for this operation, although the former is not advised because:
- It will overwrite the game data if more than one move has been made.
- if the first player to enter tries to rejoin a game while the second player already joined, it will take his turn instead.
By accessing the Options Menu you can toggle:
- Show Targets - shows small circles where a play can be made if a checker is previously selected.
- Auto Refresh - automatically refreshes the game when a play is performed by the other player. If this option is disabled the only way to refresh the game is manually, and can be selected in the Game Menu.
- Sound - adds sound effects to the game.
All options are enabled by default in order to provide a better user experience.
By accessing the Help Menu you can open the game rules, where a scrollable dialog window with several expandable cards will be shown.
If you're playing the game for the first time, it's advised that you read the rules first because Checkers has a variety of rules that differ from region to region, and you might not be familiar with the ones used in this version.
Because the game was designed to be played solely online, it won't work correctly without a consistent internet connection. If a connection to the database could not be established, a dialog window, as seen in the above picture, will appear to alert for this issue.
As the above image depicts, when a menu option opens a dialog window with a fixed height, that menu option disappears. The only workaround found was to set an unspecified height in the dialog state of the window or by manually resizing the window, but for this specific context it could not be used. A similar issue was discovered; however, as of this writing, there was no solution provided.
Instituto Superior de Engenharia de Lisboa
BSc in Computer Science and Engineering
Software Development Techniques
Winter Semester of 2022/2023