Zum Inhalt springen

Core War

aus Wikipedia, der freien Enzyklopädie
Vorlage:Medienbox/Kopf {{#if:{{#invoke:Wikidata|getValue|P178||list=,
|parameter=link}}| {{#if:| {{#if:{{#invoke:Wikidata|getValue|P123||list=,
|parameter=link}}| {{#if:{{#invoke:Wikidata|getValue|P12969|D. G. Jones, A. K. Dewdney|list=,
|parameter=link}}| {{#if:{{#invoke:Wikidata|getValue|P86||list=,
|parameter=link}}| {{#if:{{#invoke:Wikidata|getValue|P577|1984|list=,
}}| {{#if:Vorlage:Str replace| {{#if:{{#ifeq:|ABFRAGE_WIKIDATA|{{#invoke:Wikidata|getValue|P408|ABFRAGE_WIKIDATA|list=, |parameter=link}}|}}| {{#if:{{#invoke:Wikidata|getValue|P136|Programmierspiel|list=, |parameter=link}}| {{#if:| {{#if:{{#invoke:Wikidata|getValue|P404|Einzelspieler|list=, |parameter=link}}| {{#if:Vorlage:Str replace| {{#if:| {{#if:| {{#if:| {{#if:| {{#if:Vorlage:Str replace| {{#if:{{#invoke:Wikidata|getValue|P407|Englisch|list=, |parameter=link}}| {{#if:{{#invoke:Wikidata|getValue|P348|}}| {{#if:| {{#if:{{#switch: {{#invoke:Wikidata|getValue|P908|}}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }}{{#switch: {{#invoke:Wikidata|getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }}| {{#if:{{#invoke:Wikidata|getValue|P908|qualifier=P7367|}}| {{#if:Lizenz
BSD-Lizenz, GPL v2|
Entwickler {{#invoke:Wikidata|getValue|P178 parameter=link}}}} }}
Autor }} }}
Publisher {{#invoke:Wikidata|getValue|P123 parameter=link}}}} }}
Leitende Entwickler {{#invoke:Wikidata|getValue|P12969|D. G. Jones, A. K. Dewdney|list=,
|parameter=link}}}} }}
Komponist {{#invoke:Wikidata|getValue|P86 parameter=link}}}} }}
Veröffentlichung {{#invoke:Wikidata|getValue|P577|1984|list=,
}}}} }}
Plattform Vorlage:Str replace}} }}
Spiel-Engine {{#ifeq:|ABFRAGE_WIKIDATA|{{#invoke:Wikidata|getValue|P408|ABFRAGE_WIKIDATA|list=, |parameter=link}}|}}}} }}
Genre {{#invoke:Wikidata|getValue|P136|Programmierspiel|list=, |parameter=link}}}} }}
Thematik }} }}
Spielmodus {{#invoke:Wikidata|getValue|P404|Einzelspieler|list=, |parameter=link}}}} }}
Steuerung Vorlage:Str replace}} }}
Gehäuse }} }}
Arcade-System }} }}
Monitor }} }}
Systemvor­aussetzungen }} }}
Medium Vorlage:Str replace}} }}
Sprache {{#invoke:Wikidata|getValue|P407|Englisch|list=, |parameter=link}}}} }}
Aktuelle Version {{#invoke:Wikidata|getValue|P348|}}}} }}
Kopierschutz }} }}
Altersfreigabe {{#if:{{#switch: {{#invoke:Wikidata|getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }}
style="text-align:center;" | USK [[Datei:USK{{#switch: {{#invoke:Wikidata|getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA x58px|class=noviewer|center|{{#switch: {{#switch: {{#invoke:Wikidata|getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA }} }} 18=USK ab 18 getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA }} }} freigegeben

}}]]

}}{{#if: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|2}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK2}}}|ABFRAGE_WIKIDATA||}} }} |[[Datei:USK{{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|2}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK2}}}|ABFRAGE_WIKIDATA||}} }} neu2.svg|x58px|class=noviewer|center|{{#switch: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|2}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK2}}}|ABFRAGE_WIKIDATA||}} }}

18=USK ab 18 getValue|P914 1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914 1|2}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK2}}}|ABFRAGE_WIKIDATA }} }} freigegeben

}}]]

}}{{#if: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|3}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK3}}}|ABFRAGE_WIKIDATA||}} }} |[[Datei:USK{{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|3}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK3}}}|ABFRAGE_WIKIDATA||}} }} neu2.svg|x58px|class=noviewer|center|{{#switch: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914||list=/}}|1|3}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK3}}}|ABFRAGE_WIKIDATA||}} }}

18=USK ab 18 getValue|P914 1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P914 1|3}}| }}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:{{{USK3}}}|ABFRAGE_WIKIDATA }} }} freigegeben

}}]]

}}

{{#if:{{#switch: {{#invoke:Wikidata|getValue|P908|}}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }}

style="text-align:center;" | PEGI [[Datei:PEGI {{#switch: {{#switch: {{#invoke:Wikidata|getValue|P908|}}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA }} }} 3 = 3 7 = 7 12 = 12 16 = 16 18 = 18

}}.svg|x58px|class=noviewer|center|{{#switch: {{#switch: {{#invoke:Wikidata|getValue|P908|}}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }}

18=PEGI ab 18 getValue|P908|}}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA }} }} Jahren empfohlen

}}]]

}}{{#if:{{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|2}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI2}}}|ABFRAGE_WIKIDATA||}} }} |[[Datei:PEGI {{#switch: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|2}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI2}}}|ABFRAGE_WIKIDATA||}} }}

3 = 3 7 = 7 12 = 12 16 = 16 18 = 18

}}.svg|x58px|class=noviewer|center|{{#switch: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|2}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI2}}}|ABFRAGE_WIKIDATA||}} }}

18=PEGI ab 18 getValue|P908 1|2}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908 1|2}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI2}}}|ABFRAGE_WIKIDATA }} }} Jahren empfohlen

}}]]

}}{{#if:{{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|3}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI3}}}|ABFRAGE_WIKIDATA||}} }} |[[Datei:PEGI {{#switch: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|3}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI3}}}|ABFRAGE_WIKIDATA||}} }}

3 = 3 7 = 7 12 = 12 16 = 16 18 = 18

}}.svg|x58px|class=noviewer|center|{{#switch: {{#switch: {{#if: {{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908||list=/}}|1|3}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI3}}}|ABFRAGE_WIKIDATA||}} }}

18=PEGI ab 18 getValue|P908 1|3}}|{{#titleparts:{{#invoke:Wikidata|getValue|P908 1|3}}| }}|PEGI 3=3|PEGI 7=7|PEGI 12=12|PEGI 16=16|PEGI 18=18|#default ={{#ifeq:{{{PEGI3}}}|ABFRAGE_WIKIDATA }} }} Jahren empfohlen

}}]]

}}
}}
PEGI-Inhalts­bewertung getValue|P908|qualifier=P7367|}}|{{#switch: {{#invoke:Wikidata|getValue|P908|qualifier=P7367|}} Violence = Gewalt Sex = Sex Nudity = Nacktheit Drugs = Drogen Fear | Horror = Angst/Horror Bad Language = Schimpfwörter Discrimination = Diskriminierung Gambling = Glücksspiel Online = Online In-Game-Käufe | In-Game Purchases = In-Game-Käufe

}}


}}{{#if:|, {{#switch:

Violence = Gewalt Sex = Sex Nudity = Nacktheit Drugs = Drogen Fear | Horror = Angst/Horror Bad Language = Schimpfwörter Discrimination = Diskriminierung Gambling = Glücksspiel Online = Online In-Game-Käufe | In-Game Purchases = In-Game-Käufe

}}


}}{{#if:|, {{#switch:

Violence = Gewalt Sex = Sex Nudity = Nacktheit Drugs = Drogen Fear | Horror = Angst/Horror Bad Language = Schimpfwörter Discrimination = Diskriminierung Gambling = Glücksspiel Online = Online In-Game-Käufe | In-Game Purchases = In-Game-Käufe

}}


}}{{#if:|, {{#switch:

Violence = Gewalt Sex = Sex Nudity = Nacktheit Drugs = Drogen Fear | Horror = Angst/Horror Bad Language = Schimpfwörter Discrimination = Diskriminierung Gambling = Glücksspiel Online = Online In-Game-Käufe | In-Game Purchases = In-Game-Käufe

}}

}} }}

Information Lizenz
BSD-Lizenz, GPL v2}} }}

{{#if:|

{{#if: | {{#if: | {{#if: | {{#if: | {{#if: | {{#if: | {{#if: | {{#if: | {{#if: | {{#if: |
Spiele
{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

{{#if:|
()

}} → ' }}

}}

Vorlage:Wikidata-Registrierung{{#if:||{{#switch:{{#invoke:Wikidata|claim|P31}}|Computerspiel|Computerspiel-Reboot|Computerspiel-Remaster|Computerspiel-Remake|Computerspiel-Erweiterung|freies Computerspiel|eSport-Disziplin={{#if:{{#switch: {{#invoke:Wikidata|getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }} |[[Kategorie:USK {{#switch: {{#invoke:Wikidata|getValue|P914|}}|USK 0=0|USK 6=6|USK 12=12|USK 16=16|USK 18=18|#default ={{#ifeq:|ABFRAGE_WIKIDATA||}} }}]]{{#if:{{#invoke:Wikidata|pageId}}|{{#if:{{#invoke:Wikidata|claim|P914}}||}}}}|}}

}} }} Core War (Krieg der Kerne) ist ein Programmierspiel, bei dem zwei oder mehr Programme, die in einer simplen, assemblerartigen Sprache namens Redcode geschrieben sind, im selben Speicherraum gegeneinander antreten. Gewinner ist das Programm, das alle anderen überlebt. Obwohl Core War für beliebige Arten des Spiels stehen kann, wird gemeinhin die Variante gemeint, die auf der Programmiersprache Redcode basiert und durch die Artikel von Alexander K. Dewdney im Scientific American bekannt wurde.

Core War entwickelt die Spielidee von Darwin aus dem Jahr 1961 weiter. Während bei Darwin die Programme direkt auf dem Computer ausgeführt wurden, kommt bei Core War der Memory Array Redcode Simulator (MARS), eine virtuelle Maschine, zur Anwendung.

Die International Core War Society (ICWS) hat 1984 und 1988 Revisionen von Redcode veröffentlicht, ein Update-Vorschlag von 1994 wurde nicht verabschiedet.

Kampfregeln

Redcode als Kampfsprache unterscheidet sich von anderen Assembler-Sprachen:

  • Es wird nur relative Adressierung verwendet.
  • Der Speicherraum (Core) ist ringförmig. Adressen sind daher als Moduli der Speichergröße zu interpretieren.
  • Jedes mögliche Argument eines Befehls ist auch ein gültiges Argument.
  • Daten werden als Argumente des Befehls DAT gespeichert.
  • Durch Ausführung von DAT als Befehl stirbt der Prozess.

Programme

Das einfachste Programm imp (im deutschen „Knirps“), bestehend aus einer Anweisung (mov $0, $1), kopiert seinen Inhalt ein Feld weiter, und geht dann auf dieses Feld.

Zwilling

Gemini (im deutschen „Zwilling“) macht von seinem Programm eine komplette Kopie, und springt dann in seine Kopie. <syntaxhighlight lang="text">

                jmp     3
dat1            dat     #0
dat2            dat     #99
start           mov     @dat1,   @dat2
                add     #1,      dat1
                add     #1,      dat2
                cmp     dat1,    dat3
                jmp     start
                mov     #99,     94
                jmp     94
dat3            dat     #10

</syntaxhighlight> Erst mit der Einführung des Befehls SPL (split, aufspalten) kam Dynamik in das Spiel. Das zeigte sich an zwei Programmen mit verschiedenen Strategien.

Mice und Catcan

Während das Programm Mice (von Chip Wendell) den Befehl SPL benutzt, um sich kontrolliert aufzusplitten, <syntaxhighlight lang="text">

ptr     dat     #0
org     mov     #12,     ptr    ; n = 12
loop    mov     @ptr,    <dest  ; *dest = *(ptr+(*ptr))
        djn     loop,    ptr    ; if(--ptr != 0)
                               ;     goto loop
        spl     @dest          ; split(*dest)
        add     #653,    dest   ; dest += 653
        jmz     org,     ptr    ; if(!ptr)
                               ;     goto org
dest    dat     #0,      #833
        end     org

</syntaxhighlight> benutzt das Programm Catcan die Anweisung als Split-Bombe, um den Gegner auszuschalten, um ihm zuletzt durch Auslöschung den Garaus zu machen:

Warrior: Cat Can Standard: CWS'88 Author: A. Kirchner Remixor: F. Uy <syntaxhighlight lang="text">

start     mov       trap2,   < bomb
          mov       trap1,   < bomb
          sub     # 6,         bomb
          jmn       start,     bomb ; trap loop
set       mov     # -12,       bomb
kill      mov       bomb,    @ bomb
          djn       kill,      bomb ; kill loop
reset     jmp       set,       0
          jmp       set,       0
          dat     # 0,       # 0    ; buffer
bomb      dat     # 0,       # -1024
trap1     spl       0,         2
trap2     jmp       -1,        1
          end       start
Your basic two sweep methodical bomber.
Fires SPL 0 and JMP −1 at every eight
addresses, then erases the core with
DAT bombs.

</syntaxhighlight>

Obwohl Mice gegen die meisten älteren Gegner (Gnome, Zwilling, .) überlegen war, war Catcan mit seiner Split-Bombe noch erfolgreicher.

Um die Konsequenz der SPL-Anweisung zu verstehen, muss man wissen, wie ein Duell in Core War aussieht. Der Ablauf sieht nämlich vor, dass erst das eine Programm eine Anweisung ausführt, und dann das andere Programm. Wenn nun ein Programm eine SPL-Anweisung ausführt, bewirkt das, dass der Ablauf eines Programms auf zwei verschiedene Teile aufgespaltet wird. Ohne Split ist der Ablauf bei zwei Programmen A und B: A B A B A B … . Wenn sich nun Programm B genau einmal in zwei Prozesse aufspaltet (was durchaus sinnvoll sein kann), ist der Ablauf A B1 A B2 A B1 A B2 A B1 A B2 … . Wenn ein Programm nun von einer SPL-Bombe getroffen wird oder in eine solche hineinspringt, dann muss das Programm einen exponentiell steigenden (bis zur Grenze von 64 möglichen Prozessen) Anteil seiner „Rechenzeit“ für die völlig unnützen Anweisungen aufwenden, wodurch seine sinnvollen Aktionen massiv verlangsamt werden.

Agony

Mit dem 94er-Standard entstanden zahlreiche Programme (die so genannten Scanner und Vampire), die dem Catcan weit überlegen sind, zum Beispiel das Programm Agony 2.1 von Stefan Strack: <syntaxhighlight lang="text">

strategy Small-interval CMP scanner that bombs with a SPL 0 carpet.
strategy 2.0
smaller
strategy 2.1
larger, but should tie less; changed scan constants
strategy Submitted
@date@
CDIST   EQU     23                 ; distance between addresses CoMPared
IVAL    EQU     994                ; scan increment (mod-2 pattern)
scan    ADD     incr,   comp                            ; CMP scan loop:
comp    CMP     0,      CDIST                           ;
        SLT     #incr-comp+CDIST+(bptr-comp)+1,comp     ; don't bomb self
        JMP     scan                                    ;
        MOV     #CDIST+(bptr-comp)+1,count    ; init bomb-loop w/ # of bombs
        MOV     comp,    bptr                 ; use "comp" as bomb-pointer
bptr    DAT     #0                            ; this will be "comp" when exec
split   MOV     bomb,   <bptr                 ; bomb away
count   DJN     split,  #0
        JMN     scan,   scan                  ; fall thru when self-obliterated
bomb    SPL     0                             ; and clear the core
        MOV     2,<-1
incr    DAT     #IVAL,  #IVAL

</syntaxhighlight>

Adaptierungen für die Evolutionsforschung

  • Tierra ist eine Adaptierung von Core War, die von Thomas S. Ray geschrieben wurde, einem frühen Mitglied der ICWS, und wird in der Modellierung lebender Systeme verwendet.
  • Avida ist ein weiterer Abkömmling von Core War. Es basiert auf Tierra und abstrahiert Evolutionsprozesse noch weiter. Es wurde von Christoph Adami, Charles Ofria und Titus Brown entwickelt und wird in der Evolutionsforschung verwendet.

Weblinks