Komplexe Dynamische Systeme - Computeruebungen II

Core war


Uebersicht


Core war

Core war ist ein Spiel (ueber die Wahl des Namens 'core war' laeszt sich streiten). Die Spieler schreiben kleine Computerprogramme in einer speziellen Sprache namens Redcode. Im einfachsten Fall treten 2 dieser Programme gegeneinander an. Da sie sich den Platz in einem virtuellen Speicher (namens MARS) teilen mueszen, besteht die Gefahr sich selbst mit Anweisungen zu ueberschreiben oder vom gegenerischen Programm ueberschrieben zu werden. Verloren hat das Programm, das als erstes einen Fehler produziert (also eine ungueltige Anweisung ausfuehren will).

Redcode

Redcode ist die Programmiersprache, in der die CoreWar-Programme geschrieben sind. Seit Dewdneys Artikel in Scientific American (1984) haben sich einige Varianten und Standards entwickelt. Redcode ist mitlerweiler eine ausgereifte und mit vielen Schmankerln versehene Assemblersprache. Der Einfachheit wegen stelle ich hier nur einen Ausschnitt dar, der sich im wesentlichen am ICWS-88-Standard orientiert.

Anweisungen (sog. Opcodes)

Operanden und Adressierung

A und B koennen Zahlenwerte oder Speicheradressen sein. Jenachdem ist diesen sog. Operanden ein anderes Symbol voranzustellen:

Ein Beispielprogramm

   ;redcode                     ; deklariert den ICWS-88-Standard
   ;name my_first_try           ; gibt den Namen des Programmes an
   ;author Andreas Schamanek    ; Author
   ;strategy spl                ; beschreibt die Strategie des Programmes
   ;assert 1

        jmp 2                   ; ueberspringt das folgende dat
        dat #0                  ; speichert an dieser Stelle die Zahl 0
        add #17, -1             ; addiert (die Zahl) 17 zu Adresse -1 (s.u.)
        spl @-2                 ; startet ein 2. Programm an der Stelle 17
        jmp -2                  ; springt 2 Anweisungen zurueck
        end                     ; markiert das Programmende

In der 2. Zeile wollen wir die Zahl 0 speichern. Deshalb musz das Programm mit jmp 2 beginnen, um die dat #0-Zeile zu ueberspringen. Nach den Regeln von Core War darf eine dat-Zeile nicht ausgefuehrt werden. jmp 2 bedeutet also, dasz die Ausfuehrung an der uebernaechsten Adresse fortgesetzt werden soll.
Die Anweisung add #17, -1 bedeutet, dasz der Wert 17 zu dem Wert an Adresse -1, d.h. 1 Stelle davor, addiert wird. An der Stelle davor ist anfaenglich der Wert 0 gespeichert. Dieser wird nach add #17, -1 auf 17 erhoeht.
Die Anweisung spl @-2 startet ein 2. Programm an der Stelle, die 2 Stellen davor angegeben ist. Das wiederum ist die eben erzeugte 17. D.h., es wird an der Stelle 17 ein 2. Programm gestartet. Hier bedeutet dies, dasz das 2. Programm nicht lange existiert, denn an Stelle 17 befindet sich nichts.
jmp -2 springt schlieszlich 2 Stellen zurueck - zur add-Anweisung, womit das Spiel von vorne beginnt.


Links (Uebersichten, FAQs, Tutorials und Programme)

 

Weiterfuehrende Literatur:

Urspruenge


Uebungsbeispiel:

Schreiben Sie ein Programm, das Redcode-Programme mittels Genetischen Algorithmen produziert (also durch Rekombination und Mutation). Verwenden Sie pMars fuer die Bewertung der Fitness und zur Selektion.
Wenn Ihr 'fittestes' Programm halbwegs brauchbar scheint, lassen Sie es am KotH-Server gegen die Weltmeister antreten.


[HOME] Back to main overview

Last modification: May 03, 1997
(as)