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