.vscode | ||
app | ||
doc/Notes | ||
gradle/wrapper | ||
.drone.yml | ||
.gitattributes | ||
.gitignore | ||
.project | ||
catan.gif | ||
gradlew | ||
gradlew.bat | ||
README.md | ||
settings.gradle |
The Settlers of Catan: Mini Triple Deluxe Edition
Introduction
SlothBuster's first magnum opus has arrived! The Settlers of Catan: Mini Triple Deluxe Edition is an intense settlement building simulator. 2-4 players fight and trade for resources by creating intricate networks between and around their settlements in order to cut off their competition from resources. Will you persevere in this high stakes game?
Note: Some features have been omitted from the original Catan due to budget constraints.
Compilation
To compile the code gradle and JDK 17 is required.
To generate a jar file use gradle jar
. The generated jar will be placed in "app/build/libs/" and
can be executed with java -jar catan.jar
Installation
Catan doesn't require any installation by itself. Just download the .jar from the releases page. However, a functional Java installation is required. Note that only JDK 17 is supported.
To start Catan simply use java -jar catan.jar
.
How to play
Player selection
Catan: Mini Triple Deluxe Edition is intended to be played with 2 to 4 players. After launching the application this will be your first choice. Player factions are assigned automatically in this order:
- Red
- Blue
- Green
- Yellow
The Board
The game board uses a simple number-based coordinate system to determine placements of settlements, cities, roads, fields and bandits. To ease the process of entering coordinates during gameplay please refer to the map below:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
0--- ( ) ( ) ( ) ( )
// \\ // \\ // \\ // \\
1--- ( ) ( ) ( ) ( ) ( )
2--- || ~~ || ~~ || ~~ || ~~ ||
|| || || || ||
3--- ( ) ( ) ( ) ( ) ( )
// \\ // \\ // \\ // \\ // \\
4--- ( ) ( ) (Sr) (Sb) ( ) ( )
5--- || ~~ || LU rr WL bb WL || ~~ ||
|| || 09 rr 03 bb 08 || ||
6--- ( ) ( ) ( ) ( ) ( ) ( )
// \\ // \\ rr rr // \\ // \\ // \\
7--- ( ) ( ) (Sr) (Sr) ( ) ( ) ( )
8--- || ~~ || GR || OR || GR || LU || ~~ ||
|| || 02 || 04 || 05 || 10 || ||
9--- ( ) ( ) ( ) ( ) ( ) ( ) ( )
// \\ // \\ // \\ // \\ // \\ // \\ // \\
10-- ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( )
11-- || ~~ gg LU || BR || -- || OR || GR || ~~ ||
|| gg 05 || 09 || 07 || 06 || 09 || ||
12-- ( ) (Sg) ( ) ( ) ( ) ( ) ( ) ( )
\\ // \\ // \\ // \\ // \\ // \\ bb \\ //
13-- ( ) ( ) ( ) ( ) ( ) (Sb) ( )
14-- || ~~ || GR || OR || LU rr WL || ~~ ||
|| || 10 || 11 || 03 rr 12 || ||
15-- ( ) ( ) ( ) ( ) ( ) ( ) ( )
\\ // \\ // \\ // \\ // rr // \\ //
16-- ( ) ( ) ( ) ( ) (Sr) ( )
17-- || ~~ || WL || BR || BR || ~~ ||
|| || 08 || 04 || 11 || ||
18-- ( ) ( ) ( ) ( ) ( ) ( )
\\ // \\ // \\ gg \\ // \\ //
19-- ( ) ( ) (Sg) ( ) ( )
20-- || ~~ || ~~ || ~~ || ~~ ||
|| || || || ||
21-- ( ) ( ) ( ) ( ) ( )
\\ // \\ // \\ // \\ //
22-- ( ) ( ) ( ) ( )
Building
Building is an essential element in Catan. Settlements allow roads to be built adjacent to them. Settlements also grant resources to the owner of those settlements. When building a settlement or city, simply provide the desired latitude and longitude of that structure. As for roads, simply provide 2 points on the map and the road will connect those points.
There are, however, some caveats to the placement of structures:
- Settlements can only be built on corners of fields
- Settlements must be at least one corner apart
- Cities can only be built on existing settlements
- Roads can only be placed next to settlements or existing roads
Initial settlements
After the number of participating players have been chosen, the initial phase of Catan starts. Every player gets to place one settlement and one road anywhere on the board by entering coordinates. Roads must connect to settlements, though. After that, another round of building initial structures starts but in reverse order. If, for example, four players are participating then Red will start building in the first round and Yellow starts building in the second round.
After everyone has placed their structures, the bank disributes resources based on settlements that were placed second.
Main phase
Now that everything is set up and ready to go, the main gameplay loop can start. At the start of every turn the curret player rolls two dice. The sum of those rolls determine which resources will be distributed. Once resources have been handed out by the bank, the player can choose to build settlements, cities or roads. The player can also decide to trade resources with the bank at a 4:1 ratio. This cycle repeats for until a winner is chosen.
Victory points
The main goal of the game is to acquire enough victory points as fast as possible. Victory points, or VPs, can only be gained by building. Settlments grant 1 VP, cities grant 2 VPs, and roads grant no VP at all. The first player to reach 7 VP wins the game.
Additional information
If any other questions arise during gameplay, it may be helpful to consult the official Almanac: https://www.catan.com/sites/prod/files/2021-06/catan_base_rules_2020_200707.pdf
Technical info & quirks
Specification
One of the project's most prevalent oddity is the very strict and well defined specification. The biggest challenge that comes with this specification is the codebase that we have to use. We are not allowed to modify any classes in the hexboard
package and some classes in catan
. Additionally we cannot use any external libraries except those already provided in the code. As a result, our flexibility is greatly reduced which leads to rather odd design choices. Always look out for javadoc or inline comments that may explain why certain things were done in a certain way.
Violations
As mentioned above, this project imposes very strict limitations on changes to the codebase. However, we have managed to negotiate a few exceptions to these rules. An exhaustive list of exceptions can be found below:
Violation | Location | Description |
---|---|---|
The project's dependencies may not be changed | /build.gradle |
TextIO was missing the dependency JLine. We received express permission to add this dependency. |
The provided test cases must not be modified. | SiedlerGameTestBasic.requirementLandPlacementTest() |
Changed the expected result since we store fields differently than originally intended by the creators of the codebase. We received express permission to modify this test. |
Tests
JUnit tests are available and are documented in Test Cases.
Class diagram
A complete class diagram is available here.
Credits
- Tanja Aeberhardt
- Jonas Costa
- Manuel Thalmann
- Sebastian Zumbrunn