Magazyn Enter, wrzesień 1994

Adam Ryba

Traper

Drugie miejsce na II Mistrzostwach Polski w Wojnach Rzedniowych zdobył wojownik Traper autorstwa Waldemara Bartolika z Warszawy. Traper jest sprawnym programem wyposażonym w skaner przeszukujący arenę ze zmienną częstotliwością.

Głos ma autor: Pierwsze cztery linie Trapera odpowiedzialne są za jak najszybsze zlokalizowanie przeciwnika.

  1. proces   CMP $-55  $55
  2.          JMP sprawdź
  3. szukaj   ADD krok  proces
  4.          JMP proces

Poszukiwanie odbywa się z krokiem zapisanym w linii 27. Punkty rozpoczęcia poszukiwania (linia 1) są tak dobrane, aby „siatka” pokrywająca arenę miała „oczko” zbliżone do połowy kroku. Po stwierdzeniu zmian na arenie następuje sprawdzenie, czy wojownik nie zlokalizował samego siebie, jeżeli tak, następuje krok do modułu odpowiedzialnego za rozpoczęcie nowych poszukiwań z mniejszym krokiem.

  5. sprawdź   SLT proces       wzór
  6. wzór      JMP trop $4970

Następnie Traper zapamiętuje adresy podejrzanych komórek w linii ślad.

  7.             MOV proces     ślad

W linii 8 sprawdzany jest rodzaj zmiany areny: prawdopodobnie bez zmian, pojedyncza bomba przeciwnika, kod przeciwnika lub więcej niż jedna bomba. W ostatnim przypadku następuje atak.

  8.            JMN atak        <proces

Jeżeli atak nie nastąpił, celownik ustawiany jest na drugi adres.

  9.          SUB proces        proces
  10.         SUB ślad    proces

Tutaj ponownie następuje sprawdzenie zmian na arenie i ewentualnie atak.

  11.           JMN dalej       <proces

Poniższy moduł odpowiedzialny jest za unieszkodliwienie przeciwnika (przesunięcie ceilownika o 10 i rzucenie 10 podwójnych bomb SPL/JMP)

  12. atak      ADD #10         proces
  13.           MOV arkan       <proces
  14.           MOV sznury      <proces
  15.           DJN $-2         #10
  16.           MOV #10         $-1
  17. dalej     MOV ślad        proces
  18.           JMP szukaj

Ten fragment odpowiada za trzykrotne przeszukanie areny z różnym krokiem:

  19. trop    MOV znów  proces
  20.         ADD zmiana      krok
  21.         DJN proces      #3

Na tym etapie wszystkie procesy przeciwnika powinny być unieruchomione lub bardzo spowolnione. Traper zaczyna ostrzał areny bombami DAT, zaczynając od nie używanej już części swojego kodu, na wypadek, gdyby któryś z procesów przeciwnika wbudował się w niego.

  22.         MOV bomba <-1
  23.         DJN -1            #4495

Gdyby po kasowaniu rdzenia przeciwnik nie został zniszczony, Traper wiąże się i skulony czeka na wyczerpanie limitu ciosów.

  24. sznury    SPL $0
  25. arkan     JMP $-1

Ostatnich pięć linii programu zawiera wartości pomocnicze.

  26. znów      CMP $-47        $47
  27. krok      DAT $-60        $60
  28. zmiana    DAT $25         $-25
  29. ślad      DAT $0          $0
  30. bomba     DAT $0          $0

Wartości liczbowe w liniach 1 i 26 były dobierane do aktualnego kroku. Rozmiar areny określił wartości w liniach 6 i 23. Wielkość kroku dobrałem biorąc pod uwagę długość Trapera oraz domniemaną długość przeciwników.

Traper, podobnie jak omówiona miesiąc temu Gisela2, ma możliwość przeszukiwania areny ze zmiennym krokiem. Nie robi tego jednak tak samo.

Jak pamiętamy, Gisela2 zmieniała krok poszukiwań przez odczytanie jego nowej wartości z wcześniej przygotowanej tablicy.

Traper natomiat po każdym przeszukaniu rdzenia zmniejsza krok o określoną stałą wartość (linia 20). Rozwiązanie to, z racji braku wydłużającej kod wojownika tablicy, jest krótsze, choć wielkość kroku nie może być ustalana tak dowolnie, jak w Giseli2.

Przyjrzyjmy się traz w jaki sposób Traper bada wykryte zmiany rdzenia. Do sprawdzenia ma dwa adresy zapisane w linii 1 (rozkaz CMP). Aby stwierdzić, czy pod którymś z nich znajduje się kod oponenta, Traper zagląda kolejno do obu podejrzanych komórek i sprawdza, czy ich `B-argumenty są różne od zera.

Jeśli w jednej z nich B-argument będzie niezerowy, będzie to oznaczać, że coś w tym obszarze znajduje i zapewne jest to warte ostrzelania. Warto przy tym zauważyć, że owymi podejrzanymi komórkami nie są te porównywane w linii 1, lecz te położone zaraz obok. Pozwala to Traperowi na wykrywanie i nie ostrzeliwanie pojedynczych bomb.

Działanie bomb SPL $0/JMP $-1, które Traper miota w podejrzane rejony rdzenia, jest raczej oczywiste: trafiony pojedynczy proces przeciwnika dzieli się na wiele procesów potomnych, uwięzonych w dwukomórkowej przestrzeni. Uwięzione procesy poważnie spowalniają działanie pozostałych, czyniąc z nich łatwy łup dla Trapera, a same mogą już jedynie czekać na ostateczną klęskę.