Wojny rdzeniowe
Nikt nie zdoła już chyba ustalić, kto pierwszy w zamierzchłej przeszłości (gdy pojemność pamięci komputerów mierzono jeszcze w ilości wypełnionych przez nią pomieszczeń) wpadł na genialny pomysł, że maszyny liczące wcale nie muszą być używane tylko do poważnych zadań. Myśl taka zaświtała jednak komuś w głowie i w ten sposób narodziła się GRA KOMPUTEROWA – termin, który obecnie znają chyba wszyscy.
Wiele lat później pewien amerykański informatyk, A.K.Dewdney, postanowił przyjąć rolę swata i połączyć ten termin z innym, który w owym czasie również rozpoczynał błyskotliwą karierę, a mianowicie z WIRUSEM KOMPUTEROWYM. „Ślub” nastąpił w 1984 roku i od tego momentu możemy mówić o CORE WARS, czyli „wojnach rdzeniowych”, którą to nazwą zostało ochrzczone dziecko młodej pary.
CORE WARS stanowią unikalną syntezę dobrej rozrywki i pracy umysłowej. Jest to jednak zabawa, która wymaga od nas większego niż zwykle wysiłku, bowiem zasady „wojen rdzeniowych” różnią się radykalnie od reguł typowego programu, który ma nas oderwać od szarej rzeczywistości.
Celem „gry” jest napisanie programu (nie przesłyszeliście się – napisanie), który zdoła zniszczyć program stworzony przez naszego przeciwnika. Walka dwóch „wojowników”, bo tak nazywa się owe programy, toczy się na specjalnie przygotowanej do tego arenie zbudowanej z komórek wydzielonych z pamięci operacyjnej komputera. „Wojownicy” tworzeni są za pomocą jedynego w swoim rodzaju języka programowania zwanego RedCode. Stanowi on esencję skuteczności i prostoty. Opanowanie wszystkich jego komend nie powinno zabrać więcej, niż godzinę, natomiast ilość możliwych do osiągnięcia kombinacji jest nieskończona. To sprawia, iż „wojnom rdzeniowym” brak mankamentu będącego problemem wielu gier logicznych i strategicznych – tutaj nie można znaleźć idealnej drogi do zwycięstwa. Zawsze ktoś może okazać się lepszy.
Cordat Core Wars to polska wersja „wojen rdzeniowych” autorstwa Marka Grzebyka. W programie tym znajdziemy wszystkie elementy, które są potrzebne tak do pisania i sprawdzenia funkcjonowania naszych programów, jak i do prowadzenia pomiędzy nimi walki. Jak już wspomniałem, do tworzenia „wojowników” służy prosty język typu asemblerowego zwany RedCode. Pomimo tego, iż zestaw jego komend wynosi zaledwie 11 pozycji, jest on bardzo wydajny i pozwala stosować wyrafinowaną taktykę. Cenną pomocą w „obłaskawianiu” RedCode jest znakomicie napisana instrukcja, w której oprócz zasad funkcjonowania komend tego języka, znajdziemy również wiele porad praktycznych oraz przykłady gotowych programów. Do zestawu dołączona jest jeszcze dokumentacja eksploatacyjna zawierająca wszystkie informacje na temat użytkowania samego programu Cordat Core Wars.
Wróćmy jednak do głównego tematu. Po przygotowaniu programu, „wojowników” umieszcza się na arenie walki, gdzie toczyć się będzie pomiędzy nimi rozgrywka. Polega ona na naprzemiennym wykonywaniu instrukcji każdego programu. Walka kontrolowana jest przez moduł nadzorujący, tj. „Zarządcę areny”. Dany program zwycięża wówczas, gdy jego przeciwnik spróbuje wykonać tzw. instrukcję niewykonywalną. Jest nią komenda DAT służąca do przechowywania danej liczbowej; jej wykonanie jest więc niemożliwe z samej istoty tej komendy. Oczywiście, trzeba przeciwnika do tego ruchu zmusić, co jest istotą „wojen rdzeniowych”.
Jednym z podstawowych sposobów na wygranie jest podmiana komendy wrogiego programu instrukcją DAT. W miejscu, gdzie do tej pory znajdowała się inna wykonywalna komenda, program nasz umieszcza komendę nie- wykonywalną. Jeżeli manewr taki się powiedzie, przeciwnik zamiast poprawnej ze swego punktu widzenia instrukcji, znajdzie komendę DAT. Próba jej wykonania kończy się zaś jego śmiercią. Prawda, że proste?
Znane są również i inne warianty ataku. Do najprostszych metod należy „strzelanie na ślepo” polegające na umieszczeniu komend DAT w jak największej liczbie komórek areny. Istnieje wówczas prawdopodobieństwo, iż wrogi program w trakcie przemieszczania się „nadepnie” na taką „zainfekowaną” komórkę, to zaś kończy się dla niego tragicznie.
Kolejnym wariantem jest ostrzeliwanie obszaru areny, na którym spodziewana jest obecność wroga. Sposób ten oparty jest na metodzie „scaningu” areny. Jakkolwiek uchwycenie przeciwnika zabiera przy tej technice trochę czasu, to po zlokalizowaniu go mikrosekundy jego życia są już policzone.
Ostatnią z prezentowanych tutaj metod jest atak oparty na dosyć perfidnym podstępie. Polega on na takiej zamianie kolejności wypełniania instrukcji programu wroga, aby w pewnym momencie zaczął on wykonywać ciąg komend naszego programu. W ten sposób część nieprzyjacielskiego wirusa może w czasie przeznaczonym dla niego zacząć działać na naszą korzyść.
Do podstawowych technik obronnych należy ucieczka (z życia wzięte). Sposób ten polega na ciągłej zmianie komórek, w których przechowywane są instrukcje naszego programu. Znacznie utrudnia to przeciwnikowi możliwość zlokalizowania go, a tym samym zwiększa szanse naszego „wojownika” na przeżycie.
Inną metodą obrony jest podział programu, choć lepsze byłoby tutaj użycie słowa „rozmnożenie”. Technika ta jest bardzo skuteczna, gdyż jedna z podstawowych reguł „wojen rdzeniowych” mówi, iż program przegrywa walkę wówczas, gdy wszystkie jego procesy zostaną zniszczone. Program, który podzielił się na kilka identycznych lecz niezależnie działających od siebie części (służy do tego komenda SPL) jest, zgodnie z cytowaną zasadą, trudniejszy do zlikwidowania, ponieważ przeciwnik musi się uporać nie z jednym, ale z kilkoma rywalami. Poza tym, odporność na ciosy podzielonego „wojownika” wzrasta proporcjonalnie do ilości wykonanych kopii. Trzeba tu jeszcze wspomnieć, że technika ta ma jedną istotną wadę (nie ma róży bez kolców). Wraz ze wzrostem ilości programów-kopii, niestety, maleje ich prędkość, przez co cały program może stać się wolniejszy od swego niepodzielnego rywala.
Przebieg walki programów widoczny jest na ekranie. Gracze mają bardzo szerokie możliwości kreowania warunków, w jakich ma się rozgrywać potyczka. Można określić odległość pomiędzy „wojownikami” w momencie startu, prędkość wykonywania instrukcji, rozmiary samej areny oraz wiele innych parametrów. Bardzo interesującą, a zarazem pożyteczną funkcją jest opcja podglądu zmagających się na ekranie programów. W trakcie tego procesu można korygować zawarte w nich komendy, jednocześnie cały czas kontrolując, jaki przyniesie to skutek w funkcjonowaniu programu. Jest to szczególnie pożyteczne dla początkujących użytkowników, którzy często są jeszcze niepewni wyników swoich posunięć.
Cordat Core Wars przeznaczony jest na komputery IMB PC. Opracowany został w bardzo miłym dla oka systemie okienek. Praca z programem nie jest przez to męcząca. Dodatkowo przewidziano możliwość podłączenia myszki. Dla tych natomiast, którzy niezbyt dobrze orientują się jeszcze w systemie obsługi okienek, wprowadzono możliwość korzystania z czytelnych ikon.
Główną różnica pomiędzy „wojnami rdzeniowymi”, a typowymi grami polega na tym, iż Core Wars zmuszają do wysiłku przede wszystkim głowę, a nie nadgarstki. Sama zabawa bardziej przypomina tutaj pracę trenera szkolącego swojego zawodnika, który w momencie finałowej rozgrywki może tylko mocno ściskać kciuki za podopiecznego. Pisząc programy „wojowników” należy również pamiętać, iż naszym przeciwnikiem zawsze będzie umysł i wyobraźnia drugiego człowieka. Dlatego też lepiej przygotować się na najgorsze. Ludzie być może działają wolniej niż komputer, jednak pod względem inteligencji i sprytu nadal przewyższają go o kilka klas.
PS. Dystrybutorem programu Cordat Core Wars jest:
P.I.W. „CORDAT-KRAKÓW” Sp. z o.o.
ul. Wadowicka 3
30-415 Kraków
Piotr Orcholski
Artykuł z pisma: Świat Gier Komputerowych nr 9-10, 9-10/1993