aboutsummaryrefslogtreecommitdiff
path: root/web/pw-server/src/lib/components/RulesView.svelte
blob: 92de37eb101d4db74edaa77fbe3a56fe25afaa12 (plain)
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>