The Ludii general game system, developed as part of the ERC-funded Digital Ludeme Project.

Overview

The Ludii General Game System

Build Status Maintenance twitter

Ludii is a general game system being developed as part of the ERC-funded Digital Ludeme Project (DLP). This repository hosts the publicly available source code for Ludii. A precompiled build (Ludii.JAR) can be downloaded from Ludii's downloads page.

Requirements

Working with Ludii's source code requires Java Development Kit (JDK) version 8 or higher.

Getting Started

After (optionally forking) and cloning this repository, we recommend importing all projects into the Eclipse IDE. The main method to launch Ludii from your IDE is located in /Ludii/PlayerDesktop/src/app/StartDesktopApp. At this time we do not use any more sophisticated build tools (such as Maven) in our day-to-day programming with Ludii. There are some relatively simple Ant build scripts, but we only use these -- specifically, the /Ludii/PlayerDesktop/build.xml script -- for generating the releases published on the Ludii downloads page.

Note on IDEs: Other IDEs than Eclipse should ideally work as well, but we have no extensive experience working with Ludii in other IDEs, and are aware of at least some issues. For example, some parts of Ludii's code assume that, when launching Ludii from your IDE, that the current working directory is the one of the module containing the main method (i.e., /Ludii/PlayerDesktop). This is the case in Eclipse, but does not (by default) appear to be the case in some other IDEs such as IntelliJ. If you prefer working with different IDEs and are able to write a clear set of instructions for that IDE, we would be happy to see it in a new Pull Request!

Other Resources

We have various other resources available at the following links:

Contributing Guidelines

While we of course cannot guarantee that we will accept every suggested change or contribution, in principle we welcome contributions and are excited to see what you come up with! Please send contributions on GitHub as new Pull Requests, and provide brief descriptions of what has changed and in what ways these changes improve Ludii (or other aspects of the repo, such as documentation). Please ensure that any new or changed code follows the same code style as the rest of the repository.

Note: pull requests should be used for code or documentation contributions, but not for new games (i.e., .lud files). We prefer that new games are submitted through our forums.

Citing Information

When using Ludii's source code in any publications, please cite our paper describing Ludii: https://ecai2020.eu/papers/1248_paper.pdf

The following .bib entry may be used for citing the use of Ludii in papers:

@inproceedings{Piette2020Ludii,
        author      = "{\'E}. Piette and D. J. N. J. Soemers and M. Stephenson and C. F. Sironi and M. H. M. Winands and C. Browne",
        booktitle   = "Proceedings of the 24th European Conference on Artificial Intelligence (ECAI 2020)",
        title       = "Ludii -- The Ludemic General Game System",
        pages       = "411-418",
        year        = "2020",
        editor      = "G. De Giacomo and A. Catala and B. Dilkina and M. Milano and S. Barro and A. Bugarín and J. Lang",
        series      = "Frontiers in Artificial Intelligence and Applications",
        volume      = "325",
    publisher	= "IOS Press"
}

Contact Info

The preferred method for getting help with troubleshooting, suggesting or requesting additional functionality, or asking other questions about Ludii's source code, is posting a message on the Ludii Forum. Alternatively, the following email address may be used: ludii(dot)games(at)gmail(dot)com.

Acknowledgements

This repository is part of the European Research Council-funded Digital Ludeme Project (ERC Consolidator Grant #771292) run by Cameron Browne at Maastricht University's Department of Data Science and Knowledge Engineering.

European Research Council Logo

Comments
  • Random Game Generation Miscellaneous Bug Fixes

    Random Game Generation Miscellaneous Bug Fixes

    I noticed that only 2% of the games could be parsed on my machine. I think this was largely because, in the Italian locale, DecimalFormat uses commas instead of dots. The other important fix is to sort the clauses before randomly selecting the next one. Previously, clause ordering was not guaranteed to be the same across different runs. Now, setting randomSeed to true will produce the same output across different runs.

    opened by PadLex 3
  • Ludii - Analysis metric outputing conflicting numbers with swap rules

    Ludii - Analysis metric outputing conflicting numbers with swap rules

    Hello, I'm currently conducting some experiments on the game Hex using the "Evaluation Dialog" and I noticed that when I allow swap rules, the Player 1 win rate and AdvantageP1 numbers do not match and Balance also doesn't reflect the reported win rates at times. Here is the console output for an experiment on 100 trials, with no timeouts and no draws, using MC-GRAVE AI agent:

    Analysing Hex [Board Size/11x11, Swap Rules/On, End Rules/Standard]

    Please don't touch anything until complete! Generating trials: .................................................................................................... Calculating metrics: AdvantageP1 Balance Completion Drawishness Timeouts Board Coverage Default Decisiveness Moves Ideal Duration

    Agent type: MC-GRAVE Draw likelihood: 0% Timeout likelihood: 0% Average number of moves per game: 30.76 Player 1 win rate: 58% Player 2 win rate: 42%

    AdvantageP1: 0.56 (weight: 1.0) Balance: 0.88 (weight: 1.0) Completion: 1 (weight: 1.0) Drawishness: 0 (weight: 1.0) Timeouts: 0 (weight: 1.0) Board Coverage Default: 0.25405 (weight: 1.0) Decisiveness Moves: 0.42 (weight: 1.0) Ideal Duration: 0.43987 (weight: 1.0) Final Score: 3.55391

    When I look into EvaluateGame function, the win rate is calculated using "RankUtils.agentUtilities(context);" where it is explicitly checked if players swapped positions, but metrics for Advantage and Balance are calculated using "trial.status().winner()" with no further checks. If the winner is wrongly attributed to a player index before the swap, this would explain this discrepancy.

    I'm not that well versed in Java and maybe I overlooked something, but can you please check my findings? The problem is reproducible on Ludii-1.2.8 and a version close to the current master.

    Thank you,

    David

    opened by David-Ciz 2
  • Random Game Generation Miscellaneous Bug Fixes v2

    Random Game Generation Miscellaneous Bug Fixes v2

    I noticed that only 2% of the games could be parsed on my machine. I think this was largely because, in the Italian locale, DecimalFormat uses commas instead of dots. The other important fix is to sort the clauses before randomly selecting the next one. Previously, clause ordering was not guaranteed to be the same across different runs. Now, setting randomSeed to true will produce the same output across different runs.

    opened by PadLex 0
  • Taikyoku shogi: Dog's move is incorrect

    Taikyoku shogi: Dog's move is incorrect

    The Dog piece as shown on the English Wikipedia moves to either one of the three forward squares. But it appears the Dog pieces in front of the pawns are either Left Dog or Right Dog, so they will need to be changed to a regular Dog.

    opened by Smooshy30 0
  • add POMs so we can build with maven and use IDEs other than Eclipse

    add POMs so we can build with maven and use IDEs other than Eclipse

    • Adapted the POMs to the existing structure.
    • Isolate (as far as possible) tests from production code.

    Additionally this will enable to add tests with more ease.

    opened by aliedperezmartinez 2
  • Remove trailing whitespaces from .lud files

    Remove trailing whitespaces from .lud files

    Purpose

    Remove 143437 white spaces from ludii game files (human linter :) ) in dev

    Specifications

    Use simple python script:

    for ludii_file in ludii_files:
        lud = open(ludii_file, 'r').read()
        n_lud = '\n'.join(line.rstrip() for line in lud.splitlines())
        # append a newline to the end of the file
        n_lud += '\n'
        open(ludii_file, 'w').write(n_lud)
    
    opened by fbarbe00 1
  • Remove trailing whitespaces from .lud files

    Remove trailing whitespaces from .lud files

    Purpose

    Remove 143445 white spaces from ludii game files (human linter :) )

    If there's any change you'd like me to make to the script I can easily change it and run it again.

    Specifications

    Use simple python script:

    for ludii_file in ludii_files:
        lud = open(ludii_file, 'r').read()
        n_lud = '\n'.join(line.rstrip() for line in lud.splitlines())
        # append a newline to the end of the file
        n_lud += '\n'
        open(ludii_file, 'w').write(n_lud)
    
    opened by fbarbe00 3
Owner
Digital Ludeme Project
Account for repositories related to the Ludii general game system, developed for the ERC-funded Digital Ludeme Project.
Digital Ludeme Project
A game named TikTacToe developed using Java.

Project_TicTakToe This is a game named TikTacToe developed using Java. TIC-TAC-TOE Introduction: In this oop project , we worked on a small game calle

Mahmudur Rahman Tushar 1 Jan 25, 2022
The game is a 2D side scrolling system, where a player moves left, right, vertically or diagonally to traverse the game.

The game is a 2D side scrolling system, where a player moves left, right, vertically or diagonally to traverse the game.

Ravi Mandal 7 Sep 11, 2022
Checks items in inventories to see if they were duped as part of the Crystal Hollows Dupe Event in Hypixel Skyblock.

Checks items in inventories to see if they were duped as part of the Crystal Hollows Dupe Event in Hypixel Skyblock.

null 5 Dec 19, 2022
Minecraft Utility Mod for the latest release of Minecraft developed by Cypphi.

Minecraft Utility Mod for the latest release of Minecraft developed by Cypphi.

Haze 18 Jan 1, 2023
My Game Engine tested via my Cubecraft Game

My Game Engine tested via my Cubecraft Game Install: mvn -P {your OS name} clean install mvn -P mac clean install mvn -P linux clean install mvn -P wi

null 30 Oct 3, 2022
BattleShip-Game - This repository contains the code of the BattleShip (Bataille Navale) game programmed in Java.

Bataille Navale Auteur : SABIL Mohamed Amine Comment générer la documentation ? Placez vous dans le sous-dossier src : pour générer la documentation d

Mohamed Amine SABIL 1 Jan 4, 2022
Snake-Game - A simple snake game written in java.

What's this? A simple snake game written in java. How to play Download the latest release. Ensure that a compatible java runtime is installed (optimal

Patrick260 4 Oct 31, 2022
Othello PvP (2-Player) Game Application created in Java using Swing and AWT, for playing the Othello game

Othello PvP (2-Player) Game Application created in Java using Swing and AWT, for playing the Othello game, a simple game that played on an 8 by 8 checkered board with 64 double-sided black and white discs. The game is easy to learn, but it takes time to master and develop winning strategies.

Soumyadeep Pal 1 Feb 28, 2022
A simple puzzle game made with Unity to practice the game engine

A simple puzzle game made with Unity to practice the game engine.

Eyüb Salih Özdemir 1 Mar 30, 2022
A basic representation of the 0-player game, "Game-of-Life", a simple example of basic cellular automata

Game-Of-Life-Basic A basic representation of the 0-player game, "Game-of-Life", a simple example of basic cellular automata. A cellular automaton is a

Nikhil Narayanan 5 Oct 27, 2022
MMoCook - Mod including a mini game system to obtain good or bad quality food

MMo Cook Mod including a mini game system to obtain good or bad quality food. -> This mod is entirely inspired by the Genshin Impact system. How does

Titouan-Schotté 2 Jul 22, 2022
Visual In-game "Random Loot Box" rewards system for server monetization

Spincraft: Minecraft Plugin Visual In-game "Random Loot Box" rewards system Deployed on live server as monetization feature Features: Activity logs Au

Matthew Hoque 1 Jan 19, 2022
Dalek’s Game is a Java project for Object-Oriented Technologies classes

Dalek’s Game is a Java project for Object-Oriented Technologies classes. The goal of the game is to survive and eliminate Daleks (who are the enemies) from the board. Each time the main character (Doctor) moves, every Dalek follows him. When a Dalek bumps into another Dalek or junk, it becomes junk. When there is no Dalek left on the map, Doctor wins.

Adrian Jabłoński 4 Feb 7, 2022
An arcade game project which made using java and swing for graphics

Arcade_Game_Development This is an arcade game project which made using java and swing for graphics. Meteor Dodge Here you have to dodge the meteor an

Md. Shakib Shahariar Junayed 1 May 25, 2022
Desktop/Android/HTML5/iOS Java game development framework

Cross-platform Game Development Framework libGDX is a cross-platform Java game development framework based on OpenGL (ES) that works on Windows, Linux

libgdx 20.9k Jan 1, 2023
A complete 3D game development suite written purely in Java.

jMonkeyEngine jMonkeyEngine is a 3-D game engine for adventurous Java developers. It’s open-source, cross-platform, and cutting-edge. 3.2.4 is the lat

jMonkeyEngine 3.3k Dec 31, 2022
Java / JavaFX / Kotlin Game Library (Engine)

About JavaFX Game Development Framework Why FXGL? No installation or setup required "Out of the box": Java 8-15, Win/Mac/Linux/Android 8+/iOS 11.0+/We

Almas Baimagambetov 3k Jan 2, 2023
Jetserver is a high speed nio socket based multiplayer java game server written using Netty and Mike Rettig's Jetlang.It is specifically tuned for network based multiplayer games and supports TCP and UDP network protocols.

Note New version of Jetserver is called Nadron and is in a new netty 4 branch of this same repo. JetServer is a java nio based server specifically des

Abraham Menacherry 1.2k Dec 14, 2022
[LEGACY] LWJGL 2.X - The Lightweight Java Game Library.

[LEGACY] LWJGL - Lightweight Java Game Library WARNING This is the repository of the original LWJGL, which is no longer actively maintained. Unless yo

Lightweight Java Game Library 529 Dec 26, 2022