API

En pingvin er et enkelt REST API med to endepunkt:

Info-endpunkt

/info URLen på APIet ditt mottar en GET request. Svar med JSON på følgende format:

{
  "name": string, /* penguin name */
  "team": string /* team name */
}

Command-endepunkt

/command URLen på APIet mottar informasjon om de synlige delene av kartet, og du må svare med en kommando.

Sjekk Eksempelrequest og Eksempelrespons.

Response format

Du må svare med content type application/json og en slik JSON struktur:

{
  "command": "string"
}

Gyldige kommandoer:

Den enkleste måten å se resultatet av ulike kommandoer er å manuelt sende de fra Testsiden.

Request-format

Endepunktet mottar en application/json POST-request som inneholder følgende payload:

{
  matchId: string, // unik kamp-ID
  mapWidth: int,
  mapHeight: int,
  suddenDeath: int, // antall runder til sudden death starter
  wallDamage: int, // hvor mye skade som pingvinen tar av å gå inn i veggen
  penguinDamage: int, // hvor mye skade pingvinen tar av å krasje med en annen pingvin -- også hvor mye skade pingvinen din gjør på veggen når den krasjer med den
  weaponDamage: int, // hvor mye skade pingvinen tar av å bli skutt
  visibility: int, // avstanden i felt du kan se på radaren
  weaponRange: int, // avstranden i felt pingvinens laser rekker
  you: PENGUIN, // informasjon om din pingvin -- se pingvinstrukturen nedenfor
  enemies: [PENGUIN], // array. fiendlige pingviner. se struktur nedenfor
  bonusTiles: [BONUS], array. felter som inneholder bonuser. se bonusstruktur nedenfor
  walls: [WALL], // array. synlige vegger. se vegg-struktur nedenfor
  fire: [FIELD] // array, synlige felt som brenner
};

Koordinater og kart

Kartet er en 0-basert matrise, der [0,0] er øverste venstre hjørne. Kartets bredde og høyde finnes i request bodyen sine mapWidth og mapHeight felt.

Fiendlige pingviner

enemies-feltet på kartet inneholder informasjon om fiendlige pingviner, og opplysninger om din pingvin finnes i you-feltet. Du kan alltid se fullstendig informasjon om din egen pingvin, og pingviner innenfor synsfeltet ditt. Pingviner som er langt unna får en bare oppsummert informasjon om.

Oppsummert informasjon-format (utenfor synsfeltet)

{ strength: int }

Fullstendig informasjon-format (din egen pingvin og fiendlige i synsfeltet)

{
  x: int,
  y: int,
  strength: int,
  direction: string, /* 'left', 'right', 'top', 'bottom' */
  ammo: int,
  weaponRange: int,
  weaponDamage: int
}

Vegger

Når du krasjer med veggene tar du skade. Du kan bare se vegger innenfor synsfeltet ditt:

{
  x: int,
  y: int,
  strength: int
}

Merk: beveger du deg utenfor kartet tar du tilsvarende skade som du gjør ved å krasje med øvrige vegger. Veggene rundt kartet er ikke i listen, men du kan anta at alt utenform [0,0] -> [mapWidth, mapHeight] er vegg.

Brann-felt

Når du oppholder deg i felt som brenner tar du skade. Du kan bare se brann innenfor synsfeltet ditt. Når spillet går inn i sudden death-fasen sprer brannen seg hurtig.

{
  x: int,
  y: int
}

Bonuser

Enkelte av rutene inneholder bonuser som gir deg fordeler. Bonustyper:

Bonus-JSON:

{
  x: int,
  y: int,
  value: int,
  type: string
}

Eksempelrequest

{
  "matchId": "d191f1cc-c179-4779-b649-af5e9dab198e",
  "mapWidth": 20,
  "mapHeight": 20,
  "wallDamage": 30,
  "penguinDamage": 50,
  "weaponDamage": 60,
  "visibility": 5,
  "weaponRange": 5,
  "you": {
    "direction": "top",
    "x": 29,
    "y": 8,
    "strength": 300,
    "ammo": 995,
    "status": "firing",
    "targetRange": 4,
    "weaponRange": 5,
    "weaponDamage": 60
  },
  "enemies": [
    {
      "direction": "bottom",
      "x": 29,
      "y": 4,
      "strength": 240,
      "ammo": 1000,
      "status": "hit",
      "weaponRange": 5,
      "weaponDamage": 60
    }
  ],
  "walls": [
    {
      "x": 16,
      "y": 7,
      "strength": 200
    },
    {
      "x": 18,
      "y": 7,
      "strength": 200
    },
    {
      "x": 17,
      "y": 7,
      "strength": 200
    },
    {
      "x": 15,
      "y": 7,
      "strength": 200
    }
  ],
  "bonusTiles": [
   {
      "x": 12,
      "y": 5,
      "type": "weapon-range",
      "value": 1
  },
  {
      "x": 15,
      "y": 11,
      "type": "strength",
      "value": 3
  },
  {
      "x": 17,
      "y": 10,
      "type": "weapon-damage",
      "value": 4
  }],
  "suddenDeath": 10,
  "fire": []
}

Eksempelrespons

{
  "command": "fire"
}