Magazyn Enter, maj 1993

Andrzej Stasiewicz

Pluton

Jak już informowałem, trzecie miejsce w I Mistrzostwach Polski w Wojnach Rdzeniowych zdobył młody wojownik z Turka, Pan Robert Grzymowicz. Pluton Roberta był jednym z najciekawiej skonstruowanych programów. Oddajmy głos autorowi:

Program ostrzeliwuje arenę zadaną liczbą bomb. Potem kopiuje w nowe miejsce swego współtowarzysza i uruchamia go jako proces równoległy. Czynności te Pluton powtarza w nieskoczoność. Oto jego opis:

  skąd    DAT #0
  start   MOV #160     dokąd
          MOV #5       cel
  skok3   MOV #14      skąd
          MOV #20      ileb

Ustalenie wartości początkowych zmiennych programu. Zmienna ileb oznacza liczbę bomb do wystrzelenia.

  skok1   MOV bomba    @cel
          ADD #7       cel
  ileb    DJN skok1    #0

Powyższy fragment jest właściwą pętlą, w której następuje atak poprzez ostrzał areny co 7 komórek.

  skok2   MOV @skąd    <dokąd
          DJN skok2    skąd
  dokąd   SPL @dokąd

Tutaj Pluton stworzył i uruchomił nowego wojownika. Nowy wojownik to tylko 14 instrukcji, począwszy od etykiety start (jest to regulowane przez wartość wpisywaną do zmiennej skąd). Dlaczego tylko 14 instrukcji, wyjaśnię za chwilę.

          ADD dokąd    dokąd
          ADD dokąd    cel
          ADD dokąd    dokąd

Powyższe trzy rozkazy zajmują się takim wyliczeniem nowych adresów rzucenia bomb i umieszcenia kolejnego potomka, by nie kolidowały one ze strefami wpływów wcześniej uruchomionych wojowników.

          JMZ skok3    skąd
  bomba   DAT 0        0

Przy poprawnym działaniu programu wartość zmiennej skąd w powyższym fragmencie zawsze powinna wynosić zero. Instrukcja JMZ specjalnie została umieszczona na początku programu jako czujnik kontrolujący, czy wojownik nie jest atakowany przez przeciwnika, np. Skoczka. Jeżeli zmienna skąd jest różna od zera, wojownika natychmiast popełnia samobójstwo, aby nie spowalniać działań swych współtowarzyszy.

          MOV #-6      cel
  skok4   MOV bomba    <cel
          MOV sznur    <cel
          JMP skok4    <cel
  sznur   SPL 0
  cel     DAT 0

Powyższa część występuje tylko w przypadku pierwszego wojownika, umieszczonego na arenie przez sędziego i nie jest kopiowana do potomków. Jej zadaniem jest ochrona przed przeciwnikiem uderzającym od tyłu. Ochrona polega na intensywnym ostrzale areny sznurami i bombami. Powoduje to zniszczenie własnego kodu umieszczonego przed tą częścią i ewentualnego intruza, który może się tam znajdować. Oczywiście ta częśc programu może być uruchomiona tylko przez przeciwnika.