ScriptCraft - Dokumentacja

29.06.2010

Przejdź do gry, Tutorial

Tutaj znajduje się opis wszystkich elementów w grze, składni i semantyki poleceń oraz wejścia/wyjścia programów.

Na wszelkie pytania odpowiadam na forum. Można też pisać do mnie PW.

Obiekty i jednostki

Obiekt/JednostkaOpisTypParametrKoszt produkcji
Puste polePuste pole po którym mogą poruszać się jednostki.00-
Niedostępne polePole niedostępne dla jednostek - np. z powodu nierówności terenu.10-

Minerały
Minerały mogą być zbierane przez Zbieraczy, są niezbędne do konstrukcji nowych jednostek. Każde pole minerałów ma ograniczoną liczbę porcji, które można zebrać, jednak minerały odtwarzają się w czasie.2{minerały}
Liczba minerałów, które można zebrać z tego pola.
-

Drzewa
Drzewa uniemożliwiają przejście jednostkom. Mogą być zniszczone przez Czołgi.30-

Baza
Baza to najważniejsza jednostka w grze. Gromadzi zasoby, produkuje jednostki, potrafi nadawać programy. Nie może się jednak przemieszczać. Zaatakowana baza jest w stanie wytrzymać atak - jednak kosztem zgromadzonych minerałów, na odbudowę po 1 uderzeniu zużywa 1 minerał. Baza zostaje zniszczona gdy zaatakowana, nie posiada już minerałów.4{unit id}
Unikalny identyfikator jednostki, nadawany raz po utworzeniu każdej jednostce i zarezerwowany na stałe, także po zniszczeniu jednostki.
-

Zbieracz
Zbieracz zapewnia przypływ minerałów do bazy. Potrafi zebrać i przywieźć jedną porcję minerałów naraz.5
MINER
{unit id}3

Czołg
Czołg jest podstawową jednostką atakującą, jego tworzenie jest celem każdej gospodarki. Potrafi strzelać i niszczyć inne jednostki/obiekty.6
TANK
{unit id}10

Polecenia

Polecenia dla jednostek mogą być nadawane jednostkom bezpośrednio (Output) lub poprzez programy wypisujące polecenia na standardowe wyjście. Wielkość liter polecenia jest bez znaczenia.

Polecenia STOP, MOVE, GATHER, ATTACK, FIRE można także nadawać skrótowo używając przycisków obok zakładek i klikając na docelowe pole.

PolecenieOpisParametryDostępne dla:Przykłady
STOP
lub S
Wstrzymuje działania jednostki. To polecenie jest nadawane domyślnie i wykonywane także w przypadku podania nieprawidłowego polecenia bądź błędu programu.-WszystkoSTOP
Nic nie robi.
MOVE {x} {y}
lub M
Przemieszcza jednostkę w kierunku podanego pola, według wyszukanej najkrótszej trasy.{x} {y}
Współrzędne pola docelowego.
Zbieracz
Czołg
MOVE 10 22
Przemieszcza jednostkę w kierunku pola [10,22]. Jeśli jednostka jest już na polu docelowym to nic nie robi.
MOVE {dir}
lub M
Przemieszcza jednostkę w wybranym kierunku. Nie wyszukuje trasy, przemieszcza się zawsze na sąsiednie pole, jeśli jest wolne.{dir}
Jeden z czterech kierunków N, E, W, S (kolejno prawo-góra, prawo-dół, lewo-góra, lewo-dół).
Zbieracz
Czołg
MOVE W
Przemieszcza jednostkę na zachód (malejące x, lewo-góra).
GATHER {x} {y}
lub G
Zbiera cyklicznie minerały z podanego pola. Jeśli jednostka nie posiada zebranych minerałów to podąża do pola po czym je zbiera. Posiadając już minerały wyszukuje Bazę, przemieszcza się do niej i oddaje zebrane zasoby.{x} {y}
Współrzędne pola z minerałami do zbierania.
ZbieraczGATHER 10 22
Zbiera minerały znajdujące się na polu [10,22].
ATTACK {x} {y}
lub A
Przemieszcza jednostkę w kierunku podanego pola, atakując po drodze wrogie jednostki. Jeśli pole docelowe jest w zasięgu i znajduje się na nim wroga jednostka to oddawany jest do niej strzał. Inaczej jeśli w zasięgu są wrogie jednostki wówczas oddawany jest strzał do najbliższej z nich. W przeciwnym wypadku polecenie działa jak MOVE.{x} {y}
Współrzędne pola docelowego.
CzołgATTACK 10 22
Podąża do pola [10,22] atakując wrogie jednostki. Jeśli jednostka jest już na polu docelowym to utrzymuje pozycję atakując zbliżających się wrogów.
FIRE {x} {y}
lub F
Oddaje strzał na podane pole. Jeśli pole jest poza zasięgiem strzał nie następuje.{x} {y}
Współrzędne celu.
CzołgFIRE 10 22
Oznacza strzał na pole [10,22] o ile jest w zasięgu.
BUILD {type}
{language}
{program}

lub B
Buduje nową jednostkę i umieszcza ją w sąsiednim wolnym polu. Ustawia jej program w danym języku (opcjonalnie). Pusty wiersz zamiast nazwy języka oznacza polecenie wydawane bezpośrednio.
Konstrukcja pochłania minerały.
{type}
Kod typu jednostki: Zbieracz (5) lub Czołg (6), jak w tabeli "Obiekty i jednostki". Można też użyć tekstowych nazw MINER i TANK.

{language}
(Opcjonalnie) Język ustawianego programu (pusty wiersz oznacza bezpośrednio polecenie [Output]).

Program(Opcjonalnie) Kod programu.
BazaBUILD 5

M 10 22

Produkuje Zbieracza i wysyła go na pole [10,22] (ustawia bezpośrednio polecenie).

BUILD 5
Python
print "MOVE 10 22"

Produkuje Zbieracza i ustawia mu program w Pythonie.

BUILD 6
Produkuje Czołg i nie ustawia mu programu (domyślnie ma więc STOP).
PROGRAM {unit id}
{language}
{program}

lub P
Ustawia jednostce nowy program w danym języku. Pusty wiersz zamiast nazwy języka oznacza polecenie wydawane bezpośrednio.{unit id}
Unikalny identyfikator jednostki, której ustawiamy program.

{language}
(Opcjonalnie) Język ustawianego programu (pusty wiersz oznacza bezpośrednio polecenie [Output]).

{Program}
(Opcjonalnie) Kod programu.
BazaPROGRAM 1017
C++
#include <cstdio>
int main(void) {
printf("MOVE 10 22");
return 0;
}

Ustawia jednostce o identyfikatorze 1017 program w C++.
*Wykonuje polecenia otrzymywane w komunikatach. W każdej turze łączy wszystkie otrzymane komunikaty w tekst polecenia po czym wykonuje je. Polecenie może składać się z wielu wierszy, każdy osobny komunikat odpowiada jednemu wierszowi.-Wszystko*
Wykonuje polecenia otrzymywane w komunikatach. Jeśli jednostka otrzyma komunikat np. "MOVE 10 22" od jakiejś jednostki to wykona go jako polecenie MOVE.

Wejście programu

Na wejściu programu podawana jest informacja o aktualnym stanie jednostki w danej turze.

W pierwszym wierszu znajduje się uniwersalny nagłówek, o takim samym formacie dla wszystkich jednostek. Kolejny wiersz zawiera parametry specyficzne dla danego typu jednostki. Kolejne r wierszy zawierają opis widzianych pól z otoczenia jednostki. Ostatnie n wierszy to komunikaty odebrane od sojuszniczych jednostek.

Format danych wejściowych:

{type jednostki} {id jednostki} {id gracza} {liczba komunikatów n} {pozycja x} {pozycja y} {średnica widzenia r}
[inne parametry zależne od jednostki]
[opis otoczenia]
[komunikaty]

Gdzie:

  • {unit type} - jest to liczba oznaczająca typ jednostki.
  • {unit id} - unikalny identyfikator jednostki, nadawany raz po utworzeniu każdej jednostce i zarezerwowany na stałe, także po zniszczeniu jednostki.
  • {owner id} - unikalny identyfikator gracza, nadawany raz każdemu graczowi i zarezerwowany na stałe, także po opuszczeniu przez niego gry.
  • {liczba komunikatów n} - liczba komunikatów jakie otrzymała jednostka.
  • {pozycja x} {pozycja y} - pozycja jednostki na mapie.
  • {średnica widzenia r} - średnica widzenia w opisie otoczenia (zawsze nieparzysty), może być różna dla różnych typów jednostek.
  • [inne parametry zależne od jednostki] - wiersz zawierający inne parametry specyficzne dla jednostek, każdy typ jednostki ma przynajmniej 1 parametr. Są to:
    • Baza: {minerały}
    • Zbieracz: {minerały}
    • Czołg: {zasięg}
    Gdzie {minerały} to ilość zebranych/posiadanych przez jednostkę minerałów, {zasięg} to maksymalny zasięg strzału.
  • [opis otoczenia] - r wierszy po 3*r liczb w każdym:
    Trójka w i-tej kolumnie i j-tym wierszu oznacza {type i,j} {param i,j} {owner i,j} - fragment opisu otoczenia opisujący jedno pole.
    {typ} i {param} to liczby określające typ i parametr identyczne jak w "Obiekty i jednostki". {owner} to unikalny identyfikator gracza właściciela w przypadku gdy typem jest jednostka, w przeciwnym wypadku zawsze 0.
    W opisie podawane są wszystkie pola z kwadratu o boku r, w którym jednostka znajduje się dokładnie w środku (tj. punkt (r/2,r/2) w opisie odpowiada polu (x,y) na mapie, gdzie stoi jednostka).
  • [komunikaty] - n wierszy:
    i-ty wiersz {unit id i} {message i} - komunikat od jednostki o podanym identyfikatorze. Tekst komunikatu może być dowolnym łańcuchem znaków (bez '\n') zakończony '\n'. Komunikaty są jednorazowe, tzn. jednostka do której są adresowane komunikaty otrzymuje je tylko raz - w następnej turze po wysłaniu. Kolejność komunikatów od jednej jednostki jest zachowana zgodnie z kolejnością w jakiej zostały wypisane przez nadawcę. Kolejność komunikatów pochodzących od różnych jednostek jest niezdefiniowana.

Wyjście programu

Na początku wyjścia można podać opcjonalnie komunikaty wysyłane jednostkom. Kolejne wiersze, od pierwszego niezaczynającego się od liczby, są treścią polecenia do wykonania. Białe znaki na początku i na końcu są pomijane.

Format danych wyjściowych:

{unit id 1} {message text 1}
{unit id 2} {message text 1}
...
{unit id n} {message text n}
{polecenie}

  • Komunikaty zostaną podane na wejściu adresatom w następnej turze.
  • Można podawać kilka komunikatów dla tego samego adresata, odbierze on je w tej samej kolejności w jakiej były podane.
  • Treść komunikatu może składać się z dowolnych znaków ASCII oprócz '\n'.
  • W przypadku podania nieistniejącego adresata (błędny id) komunikat zostanie zignorowany.

Wykonanie programów i poleceń

  • Program po ustawieniu wykonuje się w drugiej następnej turze od tury nadania.
  • Jeśli polecenie nadawane jest bezpośrednio (Output) to wykonywane jest już następnej turze od tury nadania, ale komunikaty podawane w ten sposób obowiązują dopiero od drugiej następnej tury, tak jak programy.
  • Limit czasowy: 0.5 s. na program.
  • Limit pamięciowy: 120 MB na program.
  • Maksymalny rozmiar wyjścia programu: 10 KB.
  • Maksymalny rozmiar kodu programu: 128 KB.
  • W przypadku błędu programu bądź nieprawidłowej składni polecenia, wykonywane jest polecenie STOP.

Kolejność wykonywania w danej turze:

  • Najpierw wykonywane są programy, każdy otrzymuje dane o sytuacji z tej samej tury nie widząc wyników innych programów.
  • Na podstawie rezultatów programów nadawane są polecenia dla jednostek oraz wysyłane komunikaty.
  • Wykonywane są polecenia sekwencyjnie w przypadkowej kolejności jednostek. W przypadku sprzecznych poleceń (np. próba wejścia na to samo pole, atak i ucieczka) rezultat jest losowy z pbb. 1/2.

Komunikaty systemowe

Program może wysłać komunikat systemowy z zapytaniem. Komunikat systemowy wysyłany tak samo jak do jednostek ale adresowany do {unit id} = 0. W następnej turze jednostka otrzyma odpowiedź od systemu ({unit id} = 0), z aktualnymi danymi dla tej następnej tury.

  • W przypadku większych ilości zapytań, system wysyła odpowiedzi w tej samej kolejności w jakiej otrzymał komunikaty.
  • W przypadku niepoprawnych zapytań komunikat jest ignorowany i jednostka nie otrzyma odpowiedzi.

Oto lista możliwych zapytań wraz z odpowiedziami:

  • 0 LIST UNITS
    (lub LU)
    Zapytanie o listę wszystkich własnych jednostek. Odpowiedź:
    0 {n} {unit id 1} {unit type 1} ... {unit id n} {unit type n}
    Na początku podana jest liczba wszystkich jednostek, po niej następuje 2*n liczb, oznaczających id i typ każdej jednostki.
  • 0 UNIT {unit id}
    (lub U)
    Zapytanie o szczegóły podanej jednostki. Odpowiedź:
    0 {unit id} {unit type} {x} {y} [inne parametry zależne od jednostki]
    Pierwsze dwie liczby to id jednostki i typ, potem pozycja jednostki x i y, potem występują parametry specyficzne dla typu jednostki, takie same jak te podawane w danych wejściowych dla tej jednostki.

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com