ITPW

Microwars

Zasady

Gra odbywa się na planszy złożonej z kwadratowych pól, o rozmiarze n×m. Pola są ponumerowane tak jak w kartezjańskim układzie współrzędnych (zobacz rysunek 1).

Rysunek 1: Współrzędne pól na przykładowej planszy 4×3
\includegraphics[width=0.25\textwidth]{rys_1}

Występują 2 typy pól:

  • dostępne,
  • niedostępne.

Gra jest przeznaczona dla dwóch graczy. Każdy z graczy na początku ma do dyspozycji k czołgów i l armat rozmieszczonych dowolnie na planszy. Zadanie polega na zniszczeniu jak największej liczby wrogich jednostek w ustalonej liczbie tur t.

Na każdym polu w jednej chwili może przebywać co najwyżej 1 jednostka.

Sąsiednie pola są rozumiane tak, jak na rysunku 2.

Rysunek 2: Sąsiednie pola
\includegraphics[width=0.25\textwidth]{rys_2}

Pojedyncza tura

Każda tura składa się z następujących faz:
  1. Pobranie Informacji - każdy z graczy otrzymuje stan planszy
    Uwaga: Pola niedostępne nie zmieniają swojego położenia.
  2. Strzał - każda jednostka na planszy oddaje strzał (lub nic nie robi), który trafia ze 100% celnością w docelowe pole. Strzał polega na wybraniu pola położonego w zasięgu strzału jednostki znajdującego się na planszy, na które spadnie pocisk.

    Uwaga: trafienie własnej jednostki powoduje jej uszkodzenie.

    Jeżeli punkty życia trafionej jednostki spadną poniżej 1, to znika ona z planszy na samym końcu tury (czyli może jeszcze wykonać ruch).

  3. Wybór pola ruchu - każda jednostka wybiera na planszy sąsiednie puste pole, na które chce się ruszyć (albo nic nie robi),
    Uwaga: Puste pole oznacza pole dostępne i takie na którym nie ma żadnej innej jednostki.
  4. Ruch- jeżeli pole docelowe wybrane przez jednostkę nie zostało wybrane przez żadną inną, to wykonywany jest ruch. W przeciwnym przypadku jednostka pozostaje w miejscu.

    Zauważmy, że gdy kilka jednostek chce pójść na to samo pole, to żadnej się to nie uda.

Zauważmy, że każda tura może być obliczana równolegle przez obu graczy (nie żeby to było komuś potrzebne :-), tylko tak jest sprawiedliwie).

Gra kończy się po zakończeniu tury nr t.

Specyfikacja jednostek

Każdą jednostkę cechują współczynniki opisane w tabelce. Siła oznacza ilość odbieranych punktów życia pewnej jednostce po każdym trafieniu.

Zasięg strzału r (r jest liczbą naturalną) z pola o współrzędnych (x,y) składa się ze wszystkich pól znajdujących się na planszy, o współrzędnych (i,j) takich że x-r<=i<=x+r oraz y-r<=j<=y+r.
Pole rażenia jest zdefiniowane analogicznie.

Typ Siła Zasięg strzału Pole rażenia Początkowe punkty życia
Czołg 1
1
0
25
Armata 1
4
1
10

Punktacja

Punktacja w rozgrywce

Za każdą zniszczoną jednostkę przeciwnika gracz otrzymuje 1 punkt. Możliwy jest remis. Wygrywa gracz, który zdobędzie więcej punktów.
Uwaga: Za zniszczenie własnej jednostki gracz otrzymuje 0 pkt, a przeciwnik 1 pkt.

Punktacja wyniku meczu

Wynik meczu jest ustalany na podstawie stanu gry po zakończeniu ostatniej tury (albo nie zastosowaniu się pewnego gracza do reguł).
  • wygrana: 3 pkt.
  • remis: 0 pkt.
  • porażka: -1 pkt.

Uwaga 1: Jeżeli gracz wykona nieprawidłowy ruch albo przekroczy limit czasowy, to przegrywa on rozgrywkę (dostaje -1 pkt.), a przeciwnik wygrywa (dostaje 3 pkt.).
Uwaga 2: Może się zdarzyć że w pewnej turze obaj gracze przekroczą czas albo wykonają nieprawidłowy ruch. Wtedy obaj przegrywają (otrzymują -1 pkt.).

Program Gracza

Protokół Rozgrywki Gracza

Program Gracza komunikuje się z Arbitrem poprzez standardowe wejście i wyjście.
Protokół wygląda następująco (A: - wiersz wysyłany przez Arbitra, G: - wiersz wysyłany przez Gracza). Oczywiście napisy A: i B: są wprowadzone tylko w celu informacyjnym. Program gracza nie powinien ich wypisywać ani odczytywać.

Inicjacja

  1. A: n m t
    gdzie:
    n,m  - rozmiar planszy ( 1<=n,m<=30)
    t - maksymalna liczba tur ( 1<=t<=10000)

Pojedyncza Tura

Tury są ponumerowane kolejnymi liczbami 1,2,3,...
  1. Dla każdego pola planszy o współrzędnych x,y i zawartości u,v :
    A: x y u v

    gdzie:
    u,v są liczbami naturalnymi, określającymi pole. u jest typem pola, a v dodatkowymi informacjami o nim. Przyjmują następujące wartości:

    • u=0, v=0 - puste pole
    • u=1, v=0 - pole niedostępne
    • u=2, v>0 - czołg Gracza, posiadający v punktów życia
    • u=3, v>0 - armata Gracza o v punktach życia
    • u=4, v>0 - czołg Przeciwnika, posiadający v punktów życia
    • u=5, v>0 - armata Przeciwnika o v punktach życia

  2. Dla nie zniszczonych jednostek Gracza:
    G: x y sx sy rx ry 
    gdzie:
    x,y - pozycja jednostki Gracza, którą chce wykonać ruch
    sx, sy - współrzędne pola strzału, lub sx=0,  sy =0, gdy nie chcemy strzelać
    rx , ry  - współrzędne pola, na które zamierzamy się ruszyć, lub rx = x, ry  = y, gdy chcemy pozostać w miejscu

    Uwaga 1: Nie można podawać 2 razy współrzędnych x,y tej samej jednostki w jednej turze.
    Uwaga 2: Gracz może nie podawać współrzędnych jednostek, którymi może się ruszyć, ale nie chce. Wtedy stoją one w miejscu.
    Uwaga 3: Gracz ma obowiązek odczytać stan planszy w każdej turze.
    Uwaga 4: Należy używać operacji FLUSH na standardowym wyjściu pod koniec każdej tury aby informacje o ruchach nie pozostawały w buforze.
    Uwaga 5: Gracz ma obowiązek kontynuować rozgrywkę aż do końca, nawet gdy ewidentnie przegrał (na przykład jeżeli nie pozostała mu już żadna jednostka).

  3. G: 0
    Oznacza zakończenie tury.

Ograniczenia

  • Czas działania programu Gracza w każdej rozgrywce jest ograniczony do 10 sekund. Przekroczenie go powoduje porażkę.

Informacje

  • Nie zastosowanie się gracza do reguł opisanych w protokole jest uznawane za zły ruch i jest karane porażką.
ITPW, KNI TEAM