About Ludowars
Machines play chess. Can they play Ludo?
Ludowars is a place to find out. You make a player, and it plays Ludo against everyone else's. There are two ways to make one:
- Write a robot: a small piece of code that picks a move.
- Train an AI: a small neural network that learns by playing itself. You don't need to know much about AI to get started.
Ludo has a lot of luck in it, but skill counts for more than you'd think. A good player beats a bad one most of the time, but not every time. That makes it a fun thing to teach a machine.
What's here
- Sandbox: try things out. Watch our robots, read their code, and test your own.
- Play: pick any four players and run a match in your browser.
- Arena: the leaderboards, and where you enter your own.
Two leaderboards
The Arena has two leaderboards, and no game ever counts on both.
- Real: only games we ran ourselves, on our server, in a protected environment. These are the ones that count.
- Self reported: every other game, played in someone's browser and reported by them. We can't check these, because anyone can change what happens in their own browser. So take them for what they are.
Run a self reported match
- Open Play.
- Pick four different players, and press Play 24 games. Anything people have entered can play here, even if it isn't approved yet.
- To put the result on the leaderboard, log in and press Report these 24 games. It shows up within 5 minutes.
You don't need an account to play, only to report. You can report 500 games a day.
Get on the real leaderboard
- Log in. Press Log in at the top of any page, and we'll email you a link. If you're new, that also makes your account.
- Choose a public name. It's shown next to your robots. We never show your email.
- Enter your robot in the Arena: paste your code, or choose your AI's file. You can have 10 active bots. An entry can't be changed afterwards, so a better version is a new entry with a new name.
- Wait for approval. A real game runs your robot on our server, so one of us reads it first. Until then we don't run it. It can play self reported matches in the meantime.
- It plays. A new entry gets priority, so its first games come soon after approval.
Everything you enter is public, code and AI files included. Anyone can read what plays here.
How real games work
- A match (we call it a bout) is 24 games between four players, in every possible order. That way nobody gets a better seat. Most wins takes the bout, and if two share the most wins, it's a tie.
- Bouts run on a schedule: up to 5 bouts every 5 minutes.
- You battle on your level. We pick a player that needs games, then draw opponents at random, mostly near its rating. A player's first 5 bouts are against anyone, since it has no rating yet.
- One player per account at a table, so your entries can't help each other.
- A player plays until it has 100 bouts, which is 2400 games. That's plenty for a rating. After that, it only plays when someone else needs an opponent.
- The limits are 0.1 seconds per turn, and 32 MB for a robot's memory. A robot that runs out of time or returns nonsense just misses that turn.
How the rating works
The rating is called Elo. Higher is better, and the random robot, monkey, is set at 1000. If you're 400 points above the three others at a table, you'd expect to win about 77% of the games.
There is a lot of luck in Ludo, and even a much better player loses games. So one match between close players doesn't say much, and the rating looks at thousands of games.
Play fair
We read entries before we approve them, and we can withdraw an approval. Please don't try to break out of the protected environment, signal to other players, or enter a near copy of someone else's work. If you do find a way past our walls, we'd love to hear about it.
For programmers
Everything here has an HTTP API, described at /docs. Reporting a game takes a login token, the ids of the four players by seat, and the seat that won:
POST /api/games/self-reported
Authorization: Bearer <token>
{"seats": [12, 3, 7, 19], "winner_seat": 2}
Use null for the winner if nobody finished. We keep the dice seed and every move of each real game, so they can all be replayed.