The course project is done in groups of two. The course staff provides functionality that must be used in the project.
A king of a town state has dies, and the heir to the throne is not yet of age. The town council needs to choose a regent in their midst. As an esteemed member of the council you consider yourself the best and most natural regent to be selected. Now you just need to gain enough power and influence on the other council members to get them to support you in the final vote…
When starting the program a settings dialog is shown. After entering
the setting the program moves to the main window of the game where the game board depicting the town is shown. Players (two or more) place cards and game chips onto the board. There are several regions on the board (at least four), e.g. merchant’s guild, city watch etc. Each region is represented by a town council member. Each area has a game deck which contains at least the following cards:
A player can play an agent card from their hand onto any area on the board. When an agent card is played, the player’s chip is placed on it to show its owner. An agent in an area can perform at least the following:
During the game each player can on their turn play agents from their hand onto the board and/or perform operations with their agents already on the board. At the end of the game a vote is held where the vote of each of the council members is based on the chips on their area on the board and the influence cards in the players hands. The winner of the vode wins the game, and the throne.
The game contains ready-made parts. These are lifting cards to a players hand and playing cards onto an area on the board. The team needs to implement the graphical user interface of the game, the agents and their operations and a few details to the game mechanics. Below a rough example of what the GUI of the game might look like:
Many details of the game are left intentionally open and you can implement them as you wish. These include:
The following order of actions depicts the start and funtionality of the game. This is an example. Your game can be different from what is depicted here.
The player in turn clicks with a mouse an area on the game board in the main window. The logic of the game creates an move object depicting sending an agent and gives it to the driver. The driver completes the move which makes the needed changes into the game state. The objects in the game signal that the area in question and the state of the player’s hand have changed and they must be updated in the window. The driver signals the turn is completed. The driver notes it is unable to create moves for a human player and returns the control to the window.
You practice the following things:
You must implement at least the listed basic features to get the project work accepted. Moreover, there some optional additional features, and by implementing them you can increase your grade. With the minimum implementation you can pass (grade 1). Implementing the requirements set for the intermediate implementation, you can get the grade 3. A higher grade requires the implementation of some additional features.
Minimum requirements (Max Grade 1):
Note! The minimum implementation can use the GUI provided by the course as the main window.
Intermediate requirements (Max Grade 3):
Top-grade requirements (Max Grade 5):
The features listed below do not need to be implemented but a good implementation is worth an increase in the gradfe. Each additional feature is worth 0,5 grade. The effect of a feature can be increased if it turns out to require more work than expected. In order to get the grade increase, the feature must be documented in the submission. The people grading the projects do not look for features from the code. The TAs do not search for additional features from the code.
Grading will consist of smaller sections and bonus-points.
Final grade is limited by requirements specified in previous subsection
After meeting intermediate requirements, bonus points can compensate 1 grade.
After implementing 2 additional features, bonus points can give 2 extra grades.
Scoring from graded sections:
Extra work qualified for bonus points:
The working environment is in GitLab. Each team has a repository named based on the name of the team. It is worth to note that some team names were adjusted to match suitable names for a GitLab project. The parts implemented by the course are given also through version control.
The relevant classses in the program.
NOTE! The part depicting the students’ implementation is completely fictitious. There can be (and should be) more classes and there relationships can be completely different.
You can generate the Doxygen documentation of the interfaces directly from the project. Read the README for more information.
At least the following have been implemented by the course:
ActionInterface``with its decendants depicts a single players moves with their impact. The ``WithdrawAction
The loigc of the moves is illustrated in the sequence diagram:
In the diagram an AI move is performed first and then a move from a human player after which the game ends. (Sequence diagrams are not part of the course contents but the diagram is understandable as it is. Help can be found täältä ).
Some of the classes implemented (e.g. Game) inherits _std::enable_shared_from_this with which they can create a shared pointer pointing to themselves. Such class instances must be placed to shared pointer ownership immediately aftre creation by creating them with make_shared. Is is key that these are not created into the stack.
The team must implement at least the following:
main program that starts the first game window and possibly initializes the game state.
MainWindow, the main window of the program through which the players see the state of the game and make their moves.
Agent, the implementation of the agents according to AgentInterface.
Most ActionInterface classes implementing the consequences of the moves.
Some other window or dialog, e.g. settings, operation starting or showing the final result of the game.
Other classes are probably needed as well.