ksp-proboj

module
v0.0.0-...-7c44c73 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 11, 2024 License: MIT

README

Ikona bežca

Proboj

Čo je to Proboj?

Proboj je aktivita, ktorej cieľom je naprogramovať vlastného bota to počítačovej hry. Boti následne proti sebe súťažia.

Štandardný Proboj sa skladá z niekoľkých častí:

  • server: program, ktorý získava od hráčov ich ťahy, posiela im zmeny v hre a pod.
  • observer: program, ktorý vie prehrávať replay-e hier
  • runner: program, ktorý zabezpečuje spúšťanie a management hráčskych procesov, ich komunikáciu s ostatnými časťami systému
  • bot: samotný hráč, ktorý hrá hru

Tento repozitár sa primárne zameriava na funkčnosť runnera a špecifikáciu komunikácie v Proboji.

Protokol medzi Runnerom a Serverom

Runner komunikuje so Serverom prostredníctvom stdin/stdout vo forme správ. Každá správa má nasledujúci formát:

HEADER (1 line)
PAYLOAD (0+ lines)
.

Na začiatku hry Runner spustí proces Servera a pošle mu úvodnú konfiguráciu. Header CONFIG, payload sa skladá z riadku so zoznamom hráčov oddelených medzerou a potom môže nasledovať niekoľko riadkov, ktoré načítavame z game configu args. Zároveň Runner pospúšťa všetkých hráčov.

Od tohto momentu je kontrola nad priebehom hry na strane Serveru, ktorý príkazmi ovláda Runner.

Runner príkazy

Server posiela Runneru príkazy, pomocou ktorých ovláda hru. Formát príkazov je:

COMMAND [args]
DATA
.

Odpoveď od Runnera je vo formáte:

STATUS
DATA
.

Kde status je jedna z hodnôt OK, ERROR, DIED. Dáta obsahujú výsledok operácie, resp. chybu, môžu sa skladať z viacerých riadkov.

  • TO PLAYER player comment...
    Príkaz pošle hráčovi player celý obsah dát na stdin. Ak je uvedená hodnota comment, vypíše sa do hráčovho logu.
  • READ PLAYER player
    Prečíta dáta od hráča player až po prvý riadok . a pošle ich ako dáta odpovede.
  • TO OBSERVER
    Zapíše celý obsah dát do observer logu.
  • KILL PLAYER player
    Ukončí proces hráča player (pošle mu SIGKILL).
  • PAUSE PLAYER player
    Pozastaví proces hráča player (funguje iba na Linuxe/MacOS, pošle SIGSTOP).
  • RESUME PLAYER player
    Obnoví beh procesu hráča player (funguje iba na Linuxe/MacOS, pošle SIGCONT).
  • SCORES
    Očakáva formát dát ako riadky player score (score je int). Tieto dáta uloží do súboru score.json v priečinku hry vo formáte {player: score}.
  • END
    Oznámi Runnerovi, že hra skončila. Runner pozabíja zvyšné procesy (vrátane Servera) a poupratuje po sebe.

Komunikácia medzi hráčom a serverom

Server vie komunikovať pomocou TO PLAYER a READ PLAYER príkazov. Obsah týchto dát nie je pre Runnera zaujímavý, je na implementácií hry, aké dáta posiela. Hráč dostáva dáta na stdin a odosiela dáta na stdout.

Hráč obdrží dáta ukončené riadkom ., rovnako sa očakáva, že dáta od hráča budú ukončené týmto riadkom.

Ak hráč po zavolaní READ PLAYER neukončí svoje dáta . do času nastaveného v timeout configu, Runner mu zabije proces.

Čokoľvek, čo hráč vypíše na stderr sa uloží do jeho log súboru.

Konfigurácia Runnera

Runner chce dva konfiguračné súbory -- config.json a games.json.

config.json hovorí o nastaveniach runnera. Aktuálne obsahuje tieto voľby:

  • server: cesta k binárke servera
  • players: mapovanie názov hráča → cesta k jeho binárke a jazyk (command, language)
  • processes_per_player: počet procesov na hráča (default 1, ak viac, tak sa vyrobia player_0, player_1...)
  • timeout: maximálny čas, ktorý môže hráč využiť pri čakaní na výstup v sekundách, pre každý jazyk (mapping jazyk -> timeout)
  • disable_logs: ak je true, deaktivuje ukladanie logov hráčov a servera
  • disable_gzip: ak je true, deaktivuje gzipovanie logov
  • game_root: cesta, kde sa budú ukladať dáta hier

games.json obsahuje definíciu hier:

  • gamefolder: názov priečinka hry, ktorý sa vyrobí v game_root
  • players: zoznam hráčov, ktorý sa v hre vyskytnú
  • args: dáta, ktoré dostane server v CONFIGu

Spoločné Go knižnice

Ak sa rozhodneš programovať Server v jazyku Go, v tomto repozitári nájdeš balík client, ktorý obsahuje všetko potrebné na komunikáciu s Runnerom.

Directories

Path Synopsis
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL