Skip to content

schlunzis/Kurtama

Repository files navigation

Kurtama

This repository contains the code for the first implementation of the board game Kurtama.

Origin

After we finished our mandatory project in the course "Software Projekt" at the University of Oldenburg, we decided to start from scratch with a new project. The goal is to create a playable version of the board game Kurtama. "What is Kurtama?" you might ask. And it's a valid question. Chances are, you have never stumbled upon this game and this is for good reason. Basically the game is not published and there is only one copy of the game in existence. The game was made by some Environmental Sciences students at the University of Oldenburg. It tackles the topic of climate change and is aimed to help, especially kids, understand what the reasons are for climate change and what we can do to stop more devastating situations.

Build

This project is written in Java 23 and uses Maven as its build tool. To build the project, you need to have Java 21 installed. Clone this repository and run the following command in the root directory of the project:

./mvnw clean install package

This will build all modules of the project. To run the server, you can run the following command:

java -jar server/target/server-0.0.1.jar

Make sure to not have the port 8007 in use, as this is the default port the server will listen on. You can change the port by setting the environment variable KURTAMA_SERVER_PORT to your liking. Keep in mind that you will also have to update the port in the client.

When the server is up and running, you can start as many clients as you want by running the following command:

java -jar client/target/client-0.0.1.jar

Again, if you changed the port on the server you need to change the port on the client as well. You can do this by setting the environment variable KURTAMA_SERVER_PORT to the same value as on the server. If you are on the same machine, then this might already be done with the server configuration.

To build the client with jpackage, you can run the following command:

./build-client.sh <linux|windows> <version> [windows-version]

This will build the client for the specified operating system and version. The given version is automatically set as the project version in Maven. The Windows version is optional and only needed if you want to build the client for windows. It is needed, because windows has specific versioning requirements for executables. See here for more information.

This will create a .deb package and a .exe installer in the target/jpackage-out directory.

Docker

The server might be build using Docker. You might use the provided image from the GitHub container registry or build it yourself. If you desire to build the image yourself, we recommend to use the provided docker-compose.yml file, which takes care of the build process.

To build the image, you run the following command:

docker compose up

If you changed some code and want to force a rebuild of the image, you need to run the following command:

docker compose up --build kurtama-server

This will build the server image and start the server in a container. The server will listen on port 8007 by default.

In case you want to access the container and see the files in the system, you may do so by performing the following command:

docker compose exec kurtama-server /bin/sh

To access the application logs you can run the following command:

docker compose exec kurtama-server tail -f /opt/kurtama/logs/server.log

Note

server.log does only contain the explicit server logs. Logs from dependencies are not written to this file.

To see the whole log output you need to run the following command:

docker compose logs -f kurtama-server

Please refer to the wiki for more information on how to use the Docker image.

Further information

This is our first big project in Java completely written from scratch. We are still learning and trying to improve our knowledge and skills. If you have any suggestions or feedback, feel free to contact us. We are always happy to learn something new. Also, we are in an early stage of development and there might come huge changes and rewrites to the codebase as we are constantly finding new libraries and strategies that we want to adopt for our project. We hope, that one day, once the base project is done and the dust is settled, the development will go much more rapidly, as we have a solid base to build upon.