1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
<div class="container">
<div class="game-rules">
<h2 class="title">Welcome to planetwars!</h2>
<p>
Planetwars is a game of galactic conquest for busy people. Your goal is to program a bot that
will conquer the galaxy for you, while you take care of more important stuff.
</p>
<p>
In every game turn, your bot will receive a json-encoded line on stdin, describing the current
state of the game. Each state will hold a set of planets, and a set of spaceship fleets
traveling between the planets (<em>expeditions</em>).
</p>
<p>Example game state:</p>
<pre>{`
{
"planets": [
{
"ship_count": 2,
"x": -2.0,
"y": 0.0,
"owner": 1,
"name": "your planet"
},
{
"ship_count": 4,
"x": 2.0,
"y": 0.0,
"owner": 2,
"name": "enemy planet"
},
{
"ship_count": 2,
"x": 0.0,
"y": 2.0,
"owner": null,
"name": "neutral planet"
}
],
"expeditions": [
{
"id": 169,
"ship_count": 8,
"origin": "your planet",
"destination": "enemy planet",
"owner": 1,
"turns_remaining": 2
}
]
}
`}</pre>
<p>
The <code>owner</code> field holds a player number when the planet is held by a player, and is
<code>null</code> otherwise. Your bot is always referred to as player 1.<br />
Each turn, every player-owned planet will gain one additional ship. <br />
Planets will never move during the game.
</p>
<p>
Every turn, you may send out expeditions to conquer other planets. You can do this by writing
a json-encoded line to stdout:
</p>
<p>Example command:</p>
<pre>{`
{
"moves": [
{
"origin": "your planet",
"destination": "enemy planet",
"ship_count": 2
}
]
}
`}
</pre>
<p>
All players send out their commands simultaneously, so there is no turn order. You may send as
many commands as you please.
</p>
<p>
The amount of turns an expedition will travel is equal to the ceiled euclidean distance
between its origin and destination planet.
</p>
<p>
Ships will only battle on planets. Combat resolution is simple: every ship destroys one enemy
ship, last man standing gets to keep the planet.
</p>
<p>
The game will end when no enemy player ships remain (neutral ships may survive), or when the
turn limit is reached. The default limit is 100 turns.
</p>
<p>
You can code your bot in python 3.10. You have the entire stdlib at your disposal. <br />
If you'd like additional libraries or a different programming language, feel free to nag the administrator.
</p>
<h3 class="tldr">TL;DR</h3>
<p>
Head over to the editor view to get started - a working example is provided. <br />
Feel free to just hit the play button to see how it works!
</p>
</div>
</div>
<style lang="scss">
.container {
overflow-y: scroll;
height: 100%;
box-sizing: border-box;
}
.game-rules {
padding: 15px 30px;
max-width: 800px;
}
.game-rules p {
padding-top: 1.5em;
}
.game-rules .tldr {
padding-top: 3em;
}
</style>
|