Amiga Minus 1/2001 - Niekomercyjny Magazyn Użytkowników Komputerów Amiga
  Wydanie internetowe Nr 1, Marzec 2001  

 Okładka
 Przełamując schematy
 Prawa autorskie
 Stopka redakcyjna

 Amiga Inc. zabija Amigę?
 Amiga Inc. w ocenie Polaków

 Jay Miner, ojciec Amigi
 Amiga w Gazecie Wyborczej
 Opinie
 Zamiast narzekać na piractwo

 Lato, lato...
 Amiga-fiction

 Urban Mueller
 Marcel Beck

 Pirackie oprogramowanie
 Ile za oryginalny program?
 Jakie programy do Internetu?
 Zdania o firmie Elbox

 Gwóźdź do trumny
 Dobra robota
 Najlepsi na scenie

 ZShell - z Unixa na Amigę

 Świat gier tekstowych
 Wojny rdzeniowe
 HArbiter


    Wojny Rdzeniowe (w oryginale Core Wars) opracowano w 1983 roku. Stworzył je amerykański matematyk dr Dewdney, wykładający na uniwersytecie Western Ontario. Dewdney z pomocą kilku studentów przez kilka miesięcy doskonalił i testował swój projekt, wreszcie w 1984 roku spopularyzował go na łamach magazynu "Scientific American", gdzie prowadził rubrykę "Computer Recreations".
    Wojny Rdzeniowe są specyficzną grą komputerową. Specyficzną, gdyż przeznaczoną dla programistów. Idea gry sprowadza się do walki dwóch programów napisanych w specjalnym języku. Pojedynek przebiega w wydzielonym obszarze pamięci, a kończy go "śmierć" jednego z programów bądź remis.
    Wojny Rdzeniowe szybko zdobyły popularność na całym świecie. Powstały setki klubów ich fanów, których jedynym celem było doskonalenie programowanych wojowników i udział w licznych turniejach, także międzynarodowych.
    Język służący do tworzenia walczących programów nazywa się Redcode. Zbliżony jest do asemblera, ale jest od niego znacznie prostszy. Na Redcode składa się ogółem dziesięć rozkazów (zgodnie z pierwowzorem dr Dewdneya), przy pomocy których programy mogą operować na komórkach wydzielonego obszaru pamięci. Język może służyć jako pomoc w nauce samego asemblera, gdyż oba języki cechuje podobny mechanizm tworzenia algorytmów, chociaż wiele osób jest zdania, iż Wojny Rdzeniowe są raczej doskonałą łamigłówką matematyczną niż zbiorem zagadnień dla informatyków.
    Walką zarządza tzw. arbiter gry, program o nazwie MARS (Memory Array Redcode Simulator). Rezerwuje on określonych rozmiarów obszar pamięci (w oryginalne 8000 komórek), a następnie umieszcza w niej w losowych miejscach dwa przygotowane do walki programy. Każda instrukcja programu (wraz z argumentami) zajmuje jedną komórkę pamięci. Oznacza to, że jedna komórka przechowuje trzy wartości: kod instrukcji i jej dwa argumenty.
    Arbiter po rozpoczęciu starcia wykonuje na przemian po jednym rozkazie każdego z programów. Programy operując na komórkach pamięci przemieszczają się w niej, niszczą wskazane komórki bądź przechwytują fragmenty kodu przeciwnika. W ten sposób zarezerwowany obszar zamienia się w prawdziwe pole walki, a jej przebieg zależy wyłącznie od inwencji programistów.
    Trudno znaleźć receptę na dobry program. Można stworzyć taki, który w inteligentny sposób zabezpieczy się przed atakiem przeciwnika i dla pewności rozbije się na kilka mniejszych programów, które zaczną działać na własną rękę. Według obranego schematu będą poszukiwać miejsca pamięci, w którym znajduje się przeciwnik. Gdy zostanie już znaleziony, odpowiedni fragment programu będzie go mógł wykasować komórka po komórce. Rozbudowane programy mają jednak tą wadę, że zajmują dużo miejsca w pamięci. Oznacza to, że podczas wykonywania programu zbudowanego z 50 instrukcji, program składający się z 10 rozkazów zdąży się wykonać pięć razy, zwiększając swoje szanse na zwyciestwo. W dodatku pokaźnych rozmiarów wojownik jest łatwym celem dla przeciwnika, który stosując prosty algorytm kasowania komórek na chybił trafił szybko dotrze do zajmowanego przez niego fragmentu pamięci i zastąpi niedozwoloną wartością jedną z jego komórek. Ingerencja w kod przeciwnika zwykle oznacza jego przegraną, chyba że program zdążył się sklonować bądź uda mu się naprawić swój uszkodzony fragment zanim arbiter do niego dotrze i nie mogąc wykonać nieistniejącej instrukcji ogłosi zwycięstwo przeciwnika.
    MARS został pierwotnie stworzony dla komputera Apple, ale ponieważ idea Wojen Rdzeniowych jest bardzo prosta, szybko zrealizowano wersje na inne komputery. Dziś można powiedzieć, że nie ma systemu operacyjnego, na którym nie można byłoby pograć w Wojny Rdzeniowe. Oprócz znanych mi wersji dla AmigaOS, MacOS i Windows są wersje linuxowe oraz odpowiedniki dla komputerów ośmiobitowych, w tym małego Atari i ZX Spectrum.
    Początkowo pakiety Wojen Rdzeniowych pozbawione były funkcjonalnych kompilatorów. Również nie od początku można było śledzić przebieg walki w formie graficznego odwzorowania pamięci. Wraz ze wzrostem popularności gry wyposażono ją w wiele dodatków. Należą do nich kompilatory pozwalające na stosowanie zmiennych i etykiet oraz możliwość testowania wojowników w praktyce. Różne wersje arbitrów umożliwiają walkę wielu programów jednocześnie oraz poszerzają Redcode o nowe instrukcje; jedną z nich jest PCT (protect) - instrukcja chroniąca wskazaną komórkę przed pierwszą próbą skasowania jej zawartości, co pozwala na tworzenie bardziej zaawansowanych algorytmów obronnych.
    Gra zaliczana jest do grupy gier symulacyjnych. Nie zmienia to faktu, iż jest jedyna w swoim rodzaju. Wojny Rdzeniowe doczekały się wielu kontynuacji i rozwinięć. W wielu placówkach naukowych służą za materiał do badań między innymi nad zagadnieniami sztucznej inteligencji, a dla studentów jako pomoc naukowa pozwalająca na poznawanie reguł rządzących wieloma dziedzinami nauki. Niemalejąca popularność Wojen Rdzeniowych świadczy o jednym - pomysł jest nieśmiertelny i warto go zaszczepić w naszym kraju. Tym bardziej, że mamy na Amidze doskonały pakiet Wojen Rdzeniowych, w dodatku polskiej produkcji.

Sławomir Wilk

 Do góry