Projekt von github.zhaw.ch/slothbusters
Find a file
2025-05-24 18:26:48 +02:00
.vscode initial commit 2025-05-24 18:26:48 +02:00
app initial commit 2025-05-24 18:26:48 +02:00
doc/Notes initial commit 2025-05-24 18:26:48 +02:00
gradle/wrapper initial commit 2025-05-24 18:26:48 +02:00
.drone.yml initial commit 2025-05-24 18:26:48 +02:00
.gitattributes initial commit 2025-05-24 18:26:48 +02:00
.gitignore initial commit 2025-05-24 18:26:48 +02:00
.project initial commit 2025-05-24 18:26:48 +02:00
catan.gif initial commit 2025-05-24 18:26:48 +02:00
gradlew initial commit 2025-05-24 18:26:48 +02:00
gradlew.bat initial commit 2025-05-24 18:26:48 +02:00
README.md initial commit 2025-05-24 18:26:48 +02:00
settings.gradle initial commit 2025-05-24 18:26:48 +02:00

The Settlers of Catan: Mini Triple Deluxe Edition

Build Status

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