1. Homepage
  2. Programming
  3. Programmieren - Abschlussaufgabe 1: Code Fight

Programmieren - Abschlussaufgabe 1: Code Fight

Engage in a Conversation
ProgrammierenCode FightJava

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

  • Beachten Sie, dass Ihre Abgaben sowohl in Bezug auf objektorientierte Modellierung als auch Funktionalität bewertet werden. Halten Sie die Hinweise zur Modellierung im ILIAS-Wiki ein. CourseNana.COM

  • Programmcode muss in englischer Sprache verfasst sein. CourseNana.COM

  • Kommentieren Sie Ihren Code angemessen: So viel wie nötig, so wenig wie möglich. CourseNana.COM

  • Die Kommentare sollen einheitlich in englischer oder deutscher Sprache verfasst werden. CourseNana.COM

  • Geben Sie im Javadoc-Autoren-Tag nur Ihr u-Kürzel an.
    Wählen Sie aussagekräftige Namen für alle Ihre Bezeichner. CourseNana.COM

    Checkstyle CourseNana.COM

    Das Online-Einreichungssystem überprüft Ihre Quelltexte während der Abgabe automatisiert auf die Einhaltung der Checkstyle-Regeln. Es gibt speziell markierte Regeln, bei denen das Online- Einreichungssystem die Abgabe mit null Punkten bewertet, da diese Regeln verpflichtend einzuhalten sind. Andere Regelverletzungen können zu Punktabzug führen. Sie können und sollten Ihre Quelltexte bereits während der Entwicklung auf die Regeleinhaltung überprüfen. Das Programmieren-Wiki im ILIAS beschreibt, wie Checkstyle verwendet werden kann. CourseNana.COM

    Abgabehinweise CourseNana.COM

    Die Abgabe im Online-Einreichungssystem wird am 28.02.2024, 12:00 Uhr, freigeschaltet. Achten Sie unbedingt darauf, Ihre Dateien im Einreichungssystem bei der richtigen Aufgabe vor Ablauf der Abgabefrist am 14.03.2024, 06:00 Uhr, hochzuladen. Beginnen Sie frühzeitig mit dem Einreichen, um Ihre Lösung dahingehend zu testen, und verwenden Sie das Forum, um eventuelle Unklarheiten zu klären. Falls Sie mit Git abgeben, muss immer auf den main-Branch gepusht werden. CourseNana.COM

    Geben Sie online Ihre *.java-Dateien zur Aufgabe A in Einzelarbeit mit der entsprechenden Ordnerstruktur im zugehörigen Verzeichnis ab. CourseNana.COM

    Wiederverwendung von Lösungen CourseNana.COM

    Falls Sie für die Bearbeitung der Abschlussaufgaben oder Übungsblätter Beispiellösungen aus diesem Semester wiederverwenden, müssen Sie in die entsprechenden Klassen "Programmieren-Team" ins Autor-Tag eintragen. Dies ist nötig, um die Checkstyle-Kriterien zu erfüllen. CourseNana.COM

    Prüfungsmodus in Artemis CourseNana.COM

    Wenn Sie mit einer Abschlussaufgabe fertig sind, können Sie diese frühzeitig abgeben. Dazu dient Schaltfläche „Vorzeitig abgeben“. Nach der frühzeitigen Abgabe einer Abschlussaufgabe können Sie keine Änderungen an Ihrer Abgabe mehr vornehmen. CourseNana.COM

Seite 3 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

Aufgabe A: Code Fight CourseNana.COM

In dieser Abschlussaufgabe sollen Sie Code Fight, ein rundenbasiertes Spiel für mindestens zwei KIs, entwickeln. Das Spiel ist inspiriert von dem Spieleklassiker Core War4. Zusammengefasst spielen zwei oder mehrere künstliche Intelligenzen (KIs) in einem gemeinsamen Speicher gegeneinander. Ziel der KIs ist es, die anderen KIs zum Absturz zu bringen. Dazu können die KIs den gemeinsamen Speicher lesen und schreiben. Die letzte KI, die noch läuft, gewinnt das Spiel. CourseNana.COM

A.1 Das Spiel im Detail CourseNana.COM

In diesem Abschnitt werden die Details des Spiels beschrieben. Das Spiel simuliert die Ausführung mehrerer Programme (KIs) in einem gemeinsamen Speicher. Jedes Programm besteht initial aus einer Folge von KI-Befehlen, die nacheinander ausgeführt werden. Ziel der KIs ist es, den Speicher so zu verändern, dass die anderen KIs nicht mehr ausgeführt werden können. Dazu kann eine KI einen speziellen KI-Befehl in den Speicher schreiben, der die Ausführung von KIs stoppt. Damit die KIs ein Verhalten haben, gibt es verschiedene KI-Befehle, die die KIs ausführen können. Diese können z.B. arithmetische Operationen oder bedingte Sprünge sein. Durch diese KI-Befehle wird somit das Verhalten der KIs bestimmt. CourseNana.COM

Das Spiel selbst startet mit dem Laden der KIs in den Speicher. Hierzu werden die definierten KI-Befehle in den gemeinsamen Speicher platziert. Anschließend wird nacheinander immer ein KI-Befehl einer KI ausgeführt. Sollte eine KI den speziellen KI-Befehl STOP ausführen, so wird die KI gestoppt und die Ausführung der KI wird nicht fortgesetzt. CourseNana.COM

A.2 Konzepte CourseNana.COM

In diesem Abschnitt werden die notwendigen Konzepte für das Spiel vorgestellt. CourseNana.COM

A.2.1 Speicher CourseNana.COM

Der Speicher ist das Spielfeld der KIs. Er besteht aus einer endlichen Anzahl an Speicherzellen. Wichtig ist hierbei, dass der Speicher zyklisch ist. Das bedeutet, dass die Speicherzelle nach der letzten Speicherzelle wieder die erste Speicherzelle ist. Die Spielzellen sind durchnummeriert, beginnend bei 0. Eine Speicherzelle enthält immer drei Einträge: CourseNana.COM

KI-Befehl: Der KI-Befehl, der in der Speicherzelle gespeichert ist. Eintrag A: Das erste Argument des KI-Befehls.
Eintrag B: Das zweite Argument des KI-Befehls. CourseNana.COM

Die KI-Befehle sind in A.2.3 erklärt. Die Argumente sind immer ganze Zahlen im Bereich von [𝐼𝑁𝑇_𝑀𝐼𝑁, 𝐼𝑁𝑇_𝑀𝐴𝑋]. Beim Ausführen von KI-Befehlen sind Überläufe oder Unterläufe explizit erlaubt und gewollt. Wird also beispielsweise der Wert 1 auf die größte darstellbare Zahl addiert, so ergibt sich das Ergebnis 𝐼𝑁𝑇_𝑀𝐼𝑁. CourseNana.COM

4 https://de.wikipedia.org/wiki/Core_War CourseNana.COM

Seite 4 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

A.2.2 KIs: Die Programme des Spiels CourseNana.COM

Die KIs sind die Programme, die im Speicher ausgeführt werden. Ein Programm ist im Spiel eine Folge von KI-Befehlen mit Argumenten. Ein Programm besteht hierbei aus mindestens einem KI- Befehl. Entscheidend für die Ausführung eines Programms ist die Speicherzelle, die das Programm als nächstes Ausführt. Im Normalfall ist dies die Speicherzelle direkt nach dem zuletzt ausgeführten KI-Befehl. Es gibt aber auch KI-Befehle, die die Ausführung an eine andere Speicherzelle springen lassen. CourseNana.COM

A.2.3 KI-Befehle CourseNana.COM

In der folgenden Tabelle A.1 werden die verschiedenen KI-Befehle der KIs kurz beschrieben. Außerdem enthält dieser Abschnitt noch eine detaillierte Beschreibung aller KI-Befehle. CourseNana.COM

A.2.3.1 KI-Befehl: STOP Für diesen KI-Befehl sind die Argumente irrelevant. Der KI-Befehl stoppt die Ausführung der KI und die KI hat nicht gewonnen. CourseNana.COM

A.2.3.2 KI-Befehl: MOV_R Der relative move KI-Befehl (MOV_R) kopiert den Inhalt der Speicherzelle Source in die Speicherzelle Target. Die Argumente Source und Target geben hierbei relativ zum aktuellen KI-Befehl die Speicherzellen an. Würde sich beispielsweise der aktuelle KI- Befehl in Speicherzelle 5 befinden, so würde der KI-Befehl MOV_R -3 1 den Inhalt der Speicherzelle 2 in die Speicherzelle 6 kopieren. Es würde also der als nächstes auszuführende KI-Befehl mitsamt Argumenten überschrieben werden. CourseNana.COM

A.2.3.3 KI-Befehl: MOV_I Der indirekte move KI-Befehl (MOV_I) kopiert wie schon der relative move KI-Befehl den Inhalt der Speicherzelle Source in die Speicherzelle Target. Im Unterschied zu dem relativen move KI-Befehl ist hier die Position der Speicherzelle Target nicht direkt relativ zum aktuellen KI-Befehl. Argument B gibt bei diesem KI-Befehl an, welche Speicherzelle für die Berechnung der Position von Target verwendet wird. Zur Berechnung der Position wird zunächst die Speicherzelle Intermidiate bestimmt. Diese ergibt sich, indem vom aktuellen KI-Befehl aus, so viele Speicherzellen weitergegangen wird, wie der Wert von Argument B angibt. In der Speicherzelle B wird dann nochmals der Wert von Argument B betrachtet und entsprechend viele Speicherzellen weitergegangen. CourseNana.COM

Das folgende Beispiel soll das Prinzip verdeutlichen. Der Pfeil in Speicherzelle 2 soll den aktuellen KI-Befehl darstellen. CourseNana.COM

 KI Programm CourseNana.COM

  1. 0  STOP13 CourseNana.COM

  2. 1  STOP78 CourseNana.COM

  3. 2  -> MOV_I 0 -2 CourseNana.COM

  4. 3  STOP 13 37 CourseNana.COM

Seite 5 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

Zunächst wird die Speicherzelle Source bestimmt. Diese ergibt sich, indem vom aktuellen KI-Befehl aus, so viele Speicherzellen weitergegangen wird, wie der Wert von Argument A angibt. In diesem Fall ist das die Speicherzelle 2, also die Speicherzelle des aktuellen KI-Befehls. Als Nächstes wird die Speicherzelle Intermidiate bestimmt. Diese ergibt sich, indem vom aktuellen KI-Befehl aus, so viele Speicherzellen weitergegangen wird, wie der Wert von Argument B angibt. In diesem Fall ist das die Speicherzelle 0. Um die Speicherzelle Target zu bestimmen, wird nun der Wert von Argument B in der Speicherzelle Intermidiate betrachtet. In diesem Fall ist dieser Wert 3. Somit ergibt sich die Speicherzelle Target zu Speicherzelle 3. Der Inhalt der Speicherzelle 2 wird nun in die Speicherzelle 3 kopiert. CourseNana.COM

A.2.3.4 KI-Befehl: ADD Der KI-Befehl ADD addiert die Werte von Argument A und Argument B und speichert das Ergebnis in Eintrag B. Der KI-Befehl kann somit genutzt werden, um einen einfachen Zähler zu implementieren. CourseNana.COM

A.2.3.5 KI-Befehl: ADD_R Der relative add KI-Befehl (ADD_R) ist ähnlich zum einfachen ADD-KI-Befehl. Nur addiert dieser KI-Befehl den Wert von Argument A mit dem Wert von Eintrag B der Speicherzelle Target und speichert das Ergebnis in Eintrag B der Speicherzelle Target. Die Position von Target ist relativ zum aktuellen KI-Befehl. CourseNana.COM

Das folgende Beispiel soll das Prinzip verdeutlichen. Der Pfeil in Speicherzelle 2 soll den aktuellen KI-Befehl darstellen. CourseNana.COM

 KI Programm CourseNana.COM

  1. 0  STOP 1 3 CourseNana.COM

  2. 1  STOP 7 8 CourseNana.COM

  3. 2  -> ADD_R 10 -2 CourseNana.COM

  4. 3  STOP 13 37 CourseNana.COM

Zunächst wird die Speicherzelle Target bestimmt. Diese ergibt sich, indem vom aktuellen KI-Befehl aus, so viele Speicherzellen weitergegangen wird, wie der Wert von Argument B angibt. In diesem Fall ist das die Speicherzelle 0. Der Wert von Eintrag B der Speicherzelle 0 ist 3. Zu diesem Wert wird nun der Wert von Argument A addiert. In diesem Fall ist das der Wert 10. Somit ergibt sich der neue Wert von Eintrag B der Speicherzelle 0 zu 13. CourseNana.COM

A.2.3.6 KI-Befehl: JMP Der KI-Befehl JMP springt zu der Speicherzelle, die durch den Wert von Argument A gegeben ist. Die Position ist relativ zum aktuellen KI-Befehl. Wichtig ist hierbei, dass der KI-Befehl den nächsten auszuführenden KI-Befehl definiert. CourseNana.COM

A.2.3.7 KI-Befehl: JMZ Der KI-Befehl JMZ springt zu der Speicherzelle, die durch den Wert von Argument A gegeben ist, wenn der Wert von Eintrag B der Speicherzelle CheckCell 0 ist. Die Speicherzelle CheckCell ist relativ zum aktuellen KI-Befehl. Wie schon beim KI-Befehl JMP ist hierbei wichtig, dass der KI-Befehl den nächsten auszuführenden KI-Befehl definiert. Sollte der Wert von Eintrag B der Speicherzelle CheckCell ungleich 0 sein, wird ganz normal der nächste KI-Befehl ausgeführt. CourseNana.COM

Seite 6 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

A.2.3.8 KI-Befehl: CMP Der KI-Befehl CMP vergleicht den Eintrag A der Speicherzelle First mit dem Eintrag B der Speicherzelle Second. Beide Speicherzellen sind relativ zum aktuellen KI-Befehl. Sollten die Werte ungleich sein, wird der nächste KI-Befehl übersprungen. Ansonsten hat der KI-Befehl keine Auswirkungen. CourseNana.COM

A.2.3.9 KI-Befehl: SWAP Der KI-Befehl SWAP vertauscht den Eintrag A von First mit dem Eintrag B von Second. Beide Speicherzellen sind relativ zum aktuellen KI-Befehl. CourseNana.COM

A.2.4 Ein einfaches Programm CourseNana.COM

In diesem Abschnitt wird ein einfaches Programm vorgestellt, welches die Funktionsweise einiger KI-Befehle verdeutlichen soll. CourseNana.COM

A.2.4.1 Hello World Das einfachste Programm ist das folgende:  KI Programm CourseNana.COM

0 MOV_R 0 1 CourseNana.COM

Dieses Programm besteht aus genau einem KI-Befehl. Der KI-Befehl ist ein MOV_R KI-Befehl. Dieser KI-Befehl kopiert den Inhalt der Speicherzelle 0 in die Speicherzelle 1. Die Speicherzellen sind hierbei relativ zum aktuellen KI-Befehl zu verstehen. Daher wird der Inhalt der aktuellen Speicherzelle (Speicherzelle 0) in die nächste Speicherzelle (Speicherzelle 1) kopiert. Somit enthält die Speicherzelle 1 nach der Ausführung des KI-Befehls denselben KI-Befehl mitsamt Argumenten wie die Speicherzelle 0. CourseNana.COM

A.2.4.2 Sleepy Das folgende Programm ist einem existierenden Programm5 von John Q. Smith nachempfunden und für diese Aufgabe adaptiert worden. CourseNana.COM

 KI Programm CourseNana.COM

  1. 0  ADD 10 -1 CourseNana.COM

  2. 1  MOV_I 2 -1 CourseNana.COM

  3. 2  JMP -2 0 CourseNana.COM

  4. 3  STOP 13 37 CourseNana.COM

Sleepy ist ein einfaches KI-Programm, welches in regelmäßigen Abständen Zellen mit STOP-KI- Befehlen befüllt und so versucht andere KIs zu stoppen. Das Programm besteht aus vier KI-Befehlen. Der erste KI-Befehl ist ein ADD-KI-Befehl. Dieser dient als Zähler, um sukzessive die Entfernung der Ziel-Speicherzelle zu erhöhen. Der zweite KI-Befehl dient dazu den STOP-KI-Befehl in die Ziel-Speicherzelle zu schreiben. Hierzu kopiert der KI-Befehl den Inhalt der Speicherzelle mit dem Inhalt STOP 13 37 (zwei Zellen weiter). Die Zielzelle wird hierbei indirekt durch den Wert von Argument B des Zählers bestimmt (Zelle vor dem aktuellen KI-Befehl). Nach dem Kopieren wird im nächsten Schritt der Sprung (JMP) ausgeführt. Dieser hat zur Folge, dass der erste KI-Befehl CourseNana.COM

5 http://www.koth.org/info/corewars_for_dummies/dummies.html CourseNana.COM

Seite 7 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

des Programms als nächstes ausgeführt wird. Dieser ist wiederum der ADD-KI-Befehl. Der vierte KI-Befehl ist der STOP-KI-Befehl. Dieser kann wegen dem JMP-KI-Befehl nicht erreicht werden und dient als Quelle für den MOV_I -KI-Befehl. CourseNana.COM

Nach drei ausgeführten KI-Befehlen sieht der Speicher wie folgt aus: CourseNana.COM

 KI Programm CourseNana.COM

  1. 0  ->ADD109 CourseNana.COM

  2. 1  MOV_I 2 -1 CourseNana.COM

  3. 2  JMP-20 CourseNana.COM

  4. 3  STOP 13 37 CourseNana.COM

4? CourseNana.COM

5?
6?
7?
8?
9 STOP 13 37 CourseNana.COM

Hierbei markiert das Fragezeichen (?) Zellen im Speicher, die vom Programm nicht gesetzt wor- den sind, also für die Betrachtung nicht relevant sind. Der Pfeil symbolisiert den als nächsten auszuführenden KI-Befehl. CourseNana.COM

Seite 8 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 CourseNana.COM

Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

KI-Befehl Arg A CourseNana.COM

STOP
MOV_R Source
R CourseNana.COM

MOV_I SourceR CourseNana.COM

ADD ValA ADD_R ValA CourseNana.COM

JMP TargetR JMZ TargetR CourseNana.COM

CMP FirstR CourseNana.COM

SWAP FirstR CourseNana.COM

Arg B CourseNana.COM

TargetR TargetI CourseNana.COM

ValB TargetR CourseNana.COM

CheckCellR CourseNana.COM

SecondR CourseNana.COM

SecondR CourseNana.COM

Beschreibung CourseNana.COM

Stoppt die KI. Die KI hat verloren.
Kopiert den Inhalt der Speicherzelle
Source in die Speicherzelle CourseNana.COM

Target. Die Positionen sind relativ zum aktuellen KI-Befehl Kopiert den Inhalt der Speicherzelle Source in die Speicherzelle Target. Die Position von Source ist relativ zum aktuellen KI- Befehl. Die Position von Target ist indirekt gegeben. D.h. es wird zunächst die Speicherzelle relativ zum aktuellen KI-Befehl (Intermidiate) bestimmt. Anschließend wird durch Eintrag B erneut relativ eine Speicherzelle bestimmt. Diese ist die CourseNana.COM

Speicherzelle Target.
Addiert die Werte von
ValA und ValB und speichert das Ergebnis in Eintrag B.
Addiert den Wert von
ValA mit dem Wert von Eintrag B der Speicherzelle Target und speichert das Ergebnis in Eintrag B CourseNana.COM

Target. Die Position von Target ist relativ.
Springt zu der Speicherzelle, die durch den Wert von
Target gegeben ist. Die Position ist relativ zum aktuellen KI-Befehl. Springt zu der Speicherzelle, die durch den Wert von Target gegeben ist, wenn der Wert von Eintrag B der Speicherzelle CourseNana.COM

CheckCell 0 ist. Die Position von Target und CheckCell ist relativ zum aktuellen KI-Befehl.
Vergleicht den Eintrag A der Speicherzelle
First mit dem Eintrag B der Speicherzelle Second. Wenn die Werte ungleich sind, wird der nächste KI-Befehl übersprungen. Die Positionen sind relativ zum aktuellen KI-Befehl. CourseNana.COM

Vertauscht den Eintrag A von First mit dem Eintrag B von Second. Die Positionen First und Second sind relativ zum aktuellen KI-Befehl. CourseNana.COM

Tabelle A.1: Beschreibung der KI-Befehle CourseNana.COM

Seite 9 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

A.3 Spielphasen CourseNana.COM

Das Spiel besteht aus mehreren Phasen. Diese werden im Folgenden erklärt. CourseNana.COM

A.3.1 Initialisierungsphase CourseNana.COM

In der Initialisierungsphase wird zuerst der Speicher initialisiert und anschließend die KIs in den Speicher geladen. Für die Initialisierung des Speichers gibt es zwei Möglichkeiten: CourseNana.COM

INIT_MODE_RANDOM: Der Speicher wird mit zufälligen Werten initialisiert. CourseNana.COM

INIT_MODE_STOP: Der Speicher enthält nur STOP-KI-Befehle. Alle Einträge sind 0. CourseNana.COM

KIs sind Programme, die im Speicher ausgeführt werden. Die KIs werden in den Speicher geladen, CourseNana.COM

indem die KI-Befehle mitsamt Argumenten der KIs in den Speicher kopiert werden. Die Position CourseNana.COM

der KIs im Speicher ist hierbei durch die Größe des Speichers und die Anzahl der KIs gegeben. CourseNana.COM

Die KIs werden gleichmäßig im Speicher verteilt. Es gilt also, dass der erste KI-Befehl der ersten CourseNana.COM

KI (KI 0) in der Speicherzelle 0 ist. Der erste KI-Befehl der zweiten KI (KI 1) ist in der Spei- CourseNana.COM

cherzelle 𝐴𝑛𝑧𝑎h𝑙 𝑆𝑝𝑒𝑖𝑐h𝑒𝑟𝑧𝑒𝑙𝑙𝑒𝑛. Der erste KI-Befehl der dritten KI (KI 2) ist in der Speicherzelle 𝐴𝑛𝑧𝑎h𝑙 𝐾𝐼𝑠 CourseNana.COM

2 𝐴𝑛𝑧𝑎h𝑙 𝑆𝑝𝑒𝑖𝑐h𝑒𝑟𝑧𝑒𝑙𝑙𝑒𝑛. Und so weiter. Wichtig ist, dass die KI-Befehle der KIs nicht überlappen. 𝐴𝑛𝑧𝑎h𝑙 𝐾𝐼𝑠 CourseNana.COM

Die Ausführung der KIs beginnt immer mit dem ersten KI-Befehl der KI, der nicht STOP ist. Jede KI muss mindestens einen KI-Befehl haben, der nicht STOP ist. CourseNana.COM

A.3.2 Spielphase CourseNana.COM

In der Spielphase werden die KIs ausgeführt. Hierbei wird pro Zug immer ein KI-Befehl einer KI ausgeführt. Eine Runde ist beendet, wenn alle KIs, die einen KI-Befehl ausführen können, einen KI-Befehl ausgeführt haben. Die Reihenfolge der KIs ist hierbei fest und durch die initiale Position der KIs im Speicher gegeben. Die Reihenfolge ist also KI 0, KI 1, KI 2, usw. Wichtig ist, dass die KIs nicht parallel ausgeführt werden. Sollte eine KI den KI-Befehl STOP ausführen, so wird die KI gestoppt und die Ausführung der KI wird nicht fortgesetzt. Die KI ist somit aus dem Spiel und wird in den folgenden Runden nicht mehr ausgeführt. Sollte nur noch eine KI übrig sein, so dominiert diese KI zu diesem Zeitpunkt das Spiel. Beachten Sie, dass die KI weiterhin KI-Befehle ausführen kann, auch wenn sie bereits gewonnen hat, da die KI dominiert. CourseNana.COM

A.4 Implementierung des Spiels CourseNana.COM

In diesem Abschnitt wird die Implementierung des Spiels beschrieben. Das Spiel soll mit einer textuellen Schnittstelle realisiert werden. CourseNana.COM

Seite 10 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

 Information CourseNana.COM

Hinweise zur Implementierung dieser Abschlussaufgabe CourseNana.COM

Beachten Sie bitte nochmals die Einschränkung der zu verwendenden Pakete am Beginn der Aufgabenstellung. Vermeiden Sie für diese Abschlussaufgabe insbesondere die Verwendung von Streams. CourseNana.COM

Da wir automatische Tests Ihrer interaktiven Benutzerschnittstelle durchführen, müssen die Aus- gaben exakt den Vorgaben entsprechen. Insbesondere sollen sowohl Klein- und Großbuchstaben als auch die Leerzeichen und Zeilenumbrüche genau übereinstimmen. Setzen Sie nur die in der Aufgabenstellung angegebenen Informationen um. Geben Sie auch keine zusätzlichen Informationen aus. Bei Fehlermeldungen dürfen Sie den englischsprachigen Text frei wählen, er sollte jedoch sinnvoll sein. Jede Fehlermeldung muss aber mit Error, beginnen und darf keine Sonderzeichen, wie beispielsweise Zeilenumbrüche oder Umlaute, enthalten. CourseNana.COM

Wenn nicht anders angegeben, ist für Eingabe immer die Standardeingabe System.in zu verwen- den. Wenn nicht anders angegeben, ist für Ausgaben immer die Standardausgabe System.out zu verwenden. Für Fehlermeldungen kann anstelle der Standardausgabe optional die Standardfehler- ausgabe System.err verwendet werden. Weisen Sie diese Standardeingabe und -ausgabe niemals neu zu. CourseNana.COM

A.4.1 Darstellung der Beispielinteraktionen CourseNana.COM

In Beispielinteraktionen stellt das Symbol %> (Prozent-Zeichen und Größer-Zeichen gefolgt von einem Leerzeichen) die Kommandozeile dar. Der Programmname ist frei gewählt und muss bei Ihnen nicht CodeFight lauten. Das Symbol > (Größer-Zeichen gefolgt von einem Leerzeichen) stellt eine Benutzereingabe dar und ist selbst nicht Teil der Eingabe. Sollte in einer Interaktion [...] geschrieben werden, so bedeutet dies, dass weitere Interaktionen ausgelassen worden sind, um auf eine spezielle Stelle der Interaktion einzugehen. [...] ist keine Ausgabe Ihres Spiels. Darstellungen in eckigen Klammern [], wie [KI Name] stellen ebenso Platzhalter dar. Hierbei wird innerhalb der Klammern eine kurze Erklärung zum Verständnis eingefügt. Beachten Sie, dass solche Platzhalter niemals Teil der Ausgabe Ihres Programms sind. Zuletzt gibt es noch den Platzhalter , welcher benutzt wird, um in ausgewählten Beispielinteraktionen ein Leerzeichen darzustellen. Dieses ist auch nie Teil der Ausgabe des Programms. Beachten Sie bitte, dass Sie die Interaktionen nicht aus diesem PDF kopieren sollten, da es beim Kopieren aus PDFs zu Veränderungen kommen kann. Verwenden Sie hierfür stattdessen die Textdateien im Ilias und fragen Sie bei Unklarheiten zum Format in den entsprechenden Foren nach. CourseNana.COM

A.4.2 Hinweis zum Begriff Befehl CourseNana.COM

Im folgenden Teil bezieht sich der Begriff Befehl auf unterschiedliche Aspekte des Programms. Unterscheiden Sie deshalb nochmals folgende Konzepte: CourseNana.COM

Seite 11 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

  • Speicherzelle: (auch: Befehl im Speicher) ist ein Abschnitt im Speicher des Spiels mit Index. CourseNana.COM

  • KI-Befehl: beschreibt im Allgemeinen den ausführbaren Inhalt einer Speicherzelle im Spiel. Wird zusätzlich noch auf die Einträge des KI-Befehls explizit eingegangen, so ist damit lediglich der Typ des KI-Befehls gemeint. CourseNana.COM

  • (KI-)Befehl der KI: wird hauptsächlich im Kontext der Darstellung des Speichers verwendet, um durch die Zugehörigkeit zu vermitteln, von welcher KI ein KI-Befehl zuletzt bearbeitet wurde, oder als nächstes ausgeführt wird. CourseNana.COM

  • Interaktionsbefehl: ist ein, in den folgenden Abschnitten beschriebener, Befehl, der vom menschlichen Benutzer Ihres Programms, zur Steuerung dessen, eingegeben wird. CourseNana.COM

    A.4.3 Quit-Befehl CourseNana.COM

    Generell muss Ihr Programm jederzeit mit der Eingabe des Befehls quit beendet werden können. Beachten Sie, dass für das Testen Ihrer Abgabe dieser Befehl essenziell ist, da viele der Tests quit am Ende einer Testsequenz verwenden, um Ihr Programm zu beenden. Stellen Sie daher sicher, dass der Befehl in jeder Situation funktioniert. Beachten Sie bitte nochmals, dass Sie hierfür nicht CourseNana.COM

    System.exit() oder andere ausgeschlossene Funktionen verwenden dürfen. A.4.4 Programmstart CourseNana.COM

    Ihr Programm wird mit mehreren Argumenten gestartet. Sollte die Anzahl der Argumente oder das Argument selbst nicht korrekt sein, so soll eine Fehlermeldung ausgegeben werden und das Programm beendet werden. Das erste Argument gibt die Größe des Speichers an. Dieser liegt im Bereich von [7, 1337]. CourseNana.COM

    Die weiteren Argumente definieren Symbole, die in der Darstellung des Speichers verwendet werden. Die Symbole können jeweils aus mehreren Zeichen bestehen. Einzige Einschränkung ist hierbei, dass die Symbole keine Leerzeichen enthalten, oder mehrfach auftreten dürfen. Es werden zunächst 4 KI-unabhängige Symbole und anschließend 2 Symbole je KI definiert. Die Anzahl der KIs, die in der Simulation maximal gegeneinander antreten können, wird durch die Anzahl der Argumente bestimmt. Gleichzeitig müssen Symbole für mindestens 2 KIs definiert werden. Die vier KI-unabhängigen Symbole sind, in der Reihenfolge, in der sie definiert werden, die Symbole für: CourseNana.COM

    [1] Einen seit Start unbearbeiteten KI-Befehl [2] Die Bereichsgrenzen der Bereichsanzeige [3] Den nächsten KI-Befehl der nächsten KI [4] Die nächsten KI-Befehle aller anderen KIs CourseNana.COM

    Die zwei Symbole je KI sind, in der Reihenfolge, in der sie definiert werden, die Symbole für: a) Standard-Symbol der KI-Befehle der KI
    b) KI-Bomben (spezielle KI-Befehle; siehe unten)
    CourseNana.COM

Seite 12 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

Die Symbole werden im entsprechenden Befehl A.4.7.2 verwendet. CourseNana.COM

Sollte der Programmstart erfolgreich sein, bestätigt dies eine Begrüßung, wie sie in der folgenden Beispielinteraktion beschrieben ist. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  %> java CodeFight 1337 # ? _ ^ G g B b CourseNana.COM

  2. 2  Welcome to CodeFight 2024. Enter 'help' for more details. CourseNana.COM

  3. 3  [...] CourseNana.COM

A.4.5 Befehl: help CourseNana.COM

Der Befehl help gibt zeilenweise eine kurze Beschreibung der Befehle aus, die in der aktuellen Phase des Spiels verfügbar sind. Die Beschreibung der Befehle ist von Ihnen zu wählen, sollte aber, wie alle Ausgaben des Programms, auf Englisch sein. Die Beschreibung soll ausreichend sein, um die Befehle zu verstehen. Sie darf keine Zeilenumbrüche enthalten. Die Reihenfolge der Befehle ist hierbei aufsteigend (lexikografisch nach Name des Befehls). Das Format ist immer [Name des Befehls]: [Beschreibung]. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  >help CourseNana.COM

  3. 3  [...] CourseNana.COM

  4. 4  add-ai: Add some valuable description here. CourseNana.COM

  5. 5  help: Add some valuable description here. CourseNana.COM

  6. 6  [...] CourseNana.COM

A.4.6 Initialisierungsphase CourseNana.COM

In der Initialisierungsphase können verschiedene Befehle ausgeführt werden. Diese dienen dazu, die KIs zu laden und den Speicher zu initialisieren. Die für diese Phase relevanten Befehle werden im Folgenden beschrieben. CourseNana.COM

A.4.6.1 Befehl: add-ai Der Befehl add-ai registriert eine KI mit dem angegebenen Namen und den angegebenen KI-Befehlen. Registrierte KIs können anschließend gegeneinander spielen. Die KI-Befehle und auch die Argumente sind durch Kommata getrennt. Generell ist die Syntax des Befehls wie folgt: add-ai [Name der KI] [Liste der KI-Befehle]. Es ist nicht erlaubt, eine bestehende KI (definiert durch den Namen) zu überschreiben. Bei der Namenswahl der KI ist zu beachten, dass diese im Namen keine Leerzeichen enthalten darf. Das erfolgreiche Registrieren einer KI wird durch die Ausgabe des Namens der KI bestätigt. CourseNana.COM

Seite 13 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  > add-ai Sleepy ADD,10,-1,MOV_I,2,-1,JMP,-2,0,STOP,13,37 CourseNana.COM

  3. 3  Sleepy CourseNana.COM

  4. 4  [...] CourseNana.COM

A.4.6.2 Befehl: remove-ai Der Befehl remove-ai entfernt eine KI mit dem angegebenen Namen. Es ist nicht erlaubt, eine nicht existierende KI zu entfernen. Die Syntax des Befehls ist wie folgt: remove-ai [Name der KI]. Das erfolgreiche Entfernen einer KI wird durch die Ausgabe des Namens der KI bestätigt. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  > remove-ai Sleepy CourseNana.COM

  3. 3  Sleepy CourseNana.COM

  4. 4  [...] CourseNana.COM

Der Befehl set-init-mode setzt den Modus, mit dem der Speicher initialisiert wird. Wie oben beschrieben, gibt es zwei Modi: INIT_MODE_RANDOM und INIT_MODE_STOP. CourseNana.COM

Die Syntax des Befehls ist wie folgt: set-init-mode [Modus] [Optionale Parameter]. Falls der Befehl nicht benutzt worden ist, soll der Modus INIT_MODE_STOP sein. Für diesen Modus sind keine Parameter notwendig. Für den Modus INIT_MODE_RANDOM ist ein Parameter nötig. Dieser ist eine Granzzahl zwischen [−1337, 1337] und beschreibt den Seed, der für die Initialisierung des Speichers verwendet wird. Die Beschreibung, wie genau der Speicher in diesem Fall initialisiert wird, finden Sie in A.4.6.3. Die Ausgabe des Befehls enthält die Änderung des Modus, sofern der Modus (oder dessen Parameter) sich geändert haben. Das Format der Ausgabe ist hierbei: Changed init mode from [Alter Modus] to [Neuer Modus]. Sollte sich der Modus nicht geändert haben, so wird nichts ausgegeben. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  > set-init-mode INIT_MODE_RANDOM 0 CourseNana.COM

  3. 3  Changed init mode from INIT_MODE_STOP to INIT_MODE_RANDOM 0 CourseNana.COM

  4. 4  > set-init-mode INIT_MODE_STOP CourseNana.COM

  5. 5  Changed init mode from INIT_MODE_RANDOM 0 to INIT_MODE_STOP CourseNana.COM

  6. 6  [...] CourseNana.COM

INIT_MODE_RANDOM mit Seed Für die Initialisierung des Speichers mit dem Modus INIT_MODE_RANDOM ist der Parameter Seed notwendig. Dieser wird zur Erzeugung eines Zufallszah- lengenerators verwendet. CourseNana.COM

Gehen Sie bei der Initialisierung des Speichers wie folgt vor: CourseNana.COM

A.4.6.3 Befehl: set-init-mode CourseNana.COM

Seite 14 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

1. Verwenden Sie den Konstruktor Random(long seed)6, um einen neuen Zufallszahlenge- nerator mithilfe des Seeds zu instanziieren. CourseNana.COM

2. Für jede Speicherzelle beginnend bei der Speicherzelle 0 gehen Sie nun wie folgt vor: CourseNana.COM

  1. Verwenden Sie die Funktion Random::nextInt(int bound) um eine Zufallszahl im Bereich von [0, 𝐴𝑛𝑧𝑎h𝑙 𝑑𝑒𝑟 𝐾𝐼 𝐵𝑒 𝑓 𝑒h𝑙𝑒) zu erzeugen. Und setzen Sie den KI-Befehl der Speicherzelle auf den KI-Befehl, der an der Stelle der Zufallszahl in der Liste der KI-Befehle (A.1) steht. CourseNana.COM

  2. Verwenden Sie die Funktion Random :: nextInt () um eine Zufallszahl für Eintrag A zu erzeugen und setzen Sie den Eintrag A der Speicherzelle auf diese Zufallszahl. CourseNana.COM

  3. Verwenden Sie die Funktion Random :: nextInt () um eine Zufallszahl für Eintrag B zu erzeugen und setzen Sie den Eintrag B der Speicherzelle auf diese Zufallszahl. CourseNana.COM

A.4.6.4 Befehl: start-game Der Befehl start-game startet das Spiel. Hierbei ist das Format des Befehls wie folgt: start-game [Liste der KIs]. Die Liste der KIs ist eine durch Leerzeichen getrennte Liste von KI-Namen. Das Spiel kann nur dann gestartet werden, wenn mindestens zwei KIs gewählt sind. Es ist erlaubt mehrfach die gleiche KI zu wählen. Falls eine KI mehrfach instanziiert wird, so wird der Name der jeweiligen KI als [Name der KI]#[Nummer der KI beginnend bei 0] gesetzt. Die Reihenfolge der KIs ergibt sich aus der Reihenfolge der KIs in der übergebenen Liste. Beachten Sie, dass die Anzahl der KIs, die maximal gegeneinander antreten können, durch die Anzahl der Argumente beim Programmstart bestimmt wird. Sollte das Spiel gestartet werden und damit die Initialisierungsphase verlassen werden, so quittiert das Programm den Befehl mit der Ausgabe Game started. Damit beginnt die Spielphase. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  > start-game Sleepy HelloWorld CourseNana.COM

  3. 3  Game started. CourseNana.COM

  4. 4  [...] CourseNana.COM

A.4.7 Spielphase CourseNana.COM

In der Spielphase können verschiedene Befehle ausgeführt werden. Diese dienen dazu die KIs auszuführen und den aktuellen Zustand des Spiels anzuzeigen. Die für diese Phase relevanten Befehle werden im Folgenden beschrieben. CourseNana.COM

A.4.7.1 Befehl: next Der Befehl next führt die nächsten KI-Befehle der KIs aus. Hierbei ist das Format des Befehls wie folgt: next [Anzahl der KI-Befehle]. Die Anzahl der KI-Befehle ist optional und standardmäßig 1. Die Anzahl gibt hierbei an, wie viele KI-Befehle insgesamt ausgeführt werden sollen. Zu Beginn eines Spiels mit zwei KIs würde der Befehl next 2 also zwei KI-Befehle ausführen: Einen KI-Befehl der ersten KI und einen KI-Befehl der zweiten KI. KIs, die CourseNana.COM

6 https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Random.html CourseNana.COM

Seite 15 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

durch das Ausführen des KI-Befehls STOP gestoppt wurden, werden nicht mehr ausgeführt. Sollte also im Beispiel der zwei KIs eine KI durch den ersten KI-Befehl gestoppt werden, so würde bei der Ausführung des Befehls next 2 als nächstes die verbleibende KI zwei KI-Befehle ausführen. Sollten alle KIs gestoppt sein, so kann weiterhin der Befehl next ausgeführt werden. In diesem Fall werden dann keine KI-Befehle tatsächlich mehr ausgeführt. CourseNana.COM

Sollte einer der KI-Befehle, der durch den next-Befehl ausgeführt wird, ein STOP-KI-Befehl sein, so wird die KI gestoppt und die Ausführung der KI wird (wie schon oben beschrieben) nicht fortgesetzt. Ein solches Ereignis wird durch die Ausgabe [Name der KI] executed [Zähler] steps until stopping. quittiert. Der Zähler gibt an, wie viele KI-Befehle die KI seit Spielbeginn ausführen konnte, bis sie gestoppt wurde. Der STOP-Befehl zählt hierbei nicht mit. Alle anderen ausgeführten KI-Befehle erzeugen keine Ausgabe. Nach dem Quittieren des KI-Befehls, läuft die Ausführung des next-Befehls normal weiter. D.h., die (potentiell) verbleibenden Schritte werden durch die verbleibenden KIs ausgeführt. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  >next2 CourseNana.COM

  3. 3  > next 2000 CourseNana.COM

  4. 4  SleepyII executed 32 steps until stopping. CourseNana.COM

  5. 5  MainAI executed 42 steps until stopping. CourseNana.COM

  6. 6  [...] CourseNana.COM

A.4.7.2 Befehl: show-memory Der Befehl show-memory zeigt den aktuellen Zustand des Spei- chers an. Es wird zwischen der Speicheranzeige und der Bereichsanzeige unterschieden. CourseNana.COM

In der Darstellung des Speichers werden die Symbole verwendet, die Sie zum Programmstart als Kommandozeilenargumente übergeben bekommen haben. CourseNana.COM

Um eine Speicherzelle zu repräsentieren, wird das Symbol mit der höchsten Priorität (weiter oben in der folgenden Liste) gewählt, das für den KI-Befehl dieser Zelle zutreffend ist. Die Prioritäten sind hierbei wie folgt: CourseNana.COM

1. Ist nächster KI-Befehl der nächsten KI 2. Ist nächster KI-Befehl aller anderen KIs 3. Ist eine KI-Bombe
4. Ist ein KI-Befehl einer KI
CourseNana.COM

5. Ist seit Start unbearbeitet CourseNana.COM

Befehle einer KI sind alle KI-Befehle, die von dieser KI beim Initialisieren in den Speicher übernom- men wurden (unabhängig davon, was, vor der Initialisierung der KI, in der Speicherzelle stand). Im weiteren Verlauf des Spiels ändert sich die Zugehörigkeit von KI-Befehlen zu der KI, die diesen KI-Befehl zuletzt in irgendeiner Form bearbeitete. Die Einordnung als KI-Bombe, oder nicht, wird hierbei gegebenenfalls ebenso aktualisiert. Für eine Bearbeitung müssen die Einträge des KI-Befehls nicht verändert worden sein. Es reicht, dass eine KI die Zelle verändern/beschreiben wollte. CourseNana.COM

Seite 16 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

Eine KI-Bombe ist ein gewöhnlicher KI-Befehl einer KI, der eine der folgenden Bedingungen erfüllt: CourseNana.COM

a) Der KI-Befehl ist ein STOP-KI-Befehl.
b) Der KI-Befehl ist ein
JMP-KI-Befehl, mit Eintrag A = 0. CourseNana.COM

c) Der KI-Befehl ist ein JMZ-KI-Befehl, mit Eintrag A = 0 und Eintrag B = 0. CourseNana.COM

Das Format des Befehls für die Speicheranzeige ist wie folgt: show-memory. Diese zeigt einen Überblick des gesamten Speichers an. Beginnend mit der ersten Speicherzelle, gefolgt von der Nächsten, usw., werden die repräsentierenden Symbole direkt konkateniert und als eine Zeile ausgegeben. CourseNana.COM

Im folgenden Ausschnitt ist somit zu erkennen, dass der 3. KI-Befehl im Speicher, der ist, der als nächstes ausgeführt werden wird. Danach muss der KI-Befehl an der 19. Stelle im Speicher folgen (nur eindeutig ersichtlich, da durch gegebene Kommandozeilenargumente bekannt ist, dass nicht mehr als zwei KIs gleichzeitig verwendet werden können). Die KI-Befehle an Position 1, 2, 4 und 8 im Speicher, wurden zuletzt von der ersten KI bearbeitet (oder initialisiert), wobei es sich lediglich an Position 8 um eine Bombe handelt. Gleiches gilt an den Positionen 17, 18, 20 und 27 für die zweite KI, mit KI-Befehl 27 als Bombe. Alle anderen KI-Befehle des Speichers wurden seit Spielbeginn von keiner KI bearbeitet. CourseNana.COM

Hinweis: Durch die Formulierung wird ersichtlich, dass mit diesem Befehl allein keine Annahmen über die KIs direkt getroffen werden können. Es werden lediglich die Befehle im Speicher selbst betrachtet. Deren Informationen über Bearbeitung und geplanter Ausführung geben dennoch einen guten Überblick über das Verhalten der KIs. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  %>javaCodeFight32#?_^GgBb CourseNana.COM

  2. 2  [...] CourseNana.COM

  3. 3  > show-memory CourseNana.COM

  4. 4  GG_G###g########BB^B######b##### CourseNana.COM

  5. 5  [...] CourseNana.COM

Das Format des Befehls für die Bereichsanzeige ist wie folgt: show-memory [Speicherzelle]. Die Bereichsanzeige zeigt für einen Bereich von 10 Speicherzellen, beginnend bei der, durch die Nummer, angegebenen Speicherzelle, den Zustand an. Dazu wird zunächst die Speicheranzeige ausgegeben, mit der Änderung, dass das Symbol der Bereichsgrenzen so, je zwischen zwei Befehlssymbolen, eingefügt wird, so dass ein Bereich aus Befehlssymbolen zwischen diesen Grenzen entsteht, der genau dem Speicherbereich entspricht, der angezeigt werden soll. Die geänderte Darstellung der Speicheranzeige ist somit um 2 * (Länge des Bereichsgrenzensymbols) länger, als sie es normalerweise wäre. Darauf folgen, zeilenweise, die einzelnen Speicherzellen des anzuzeigenden Bereichs. Jede Darstellung einer Speicherzelle entspricht dem Format [Symbol] [Index]: [KI-Befehl] | [Eintrag A] | [Eintrag B]. Alle Angaben der einzelnen Platzhalter sollen rechtsbündig, entsprechend ihrer Spalte, ausgegeben werden. Beachten Sie auch die Sonderzeichen (inklusive Leerzeichen), Platzhalter ausgenommen, im Format. CourseNana.COM

Seite 17 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 CourseNana.COM

Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  %>javaCodeFight32#?_^GgBb CourseNana.COM

  2. 2  [...] CourseNana.COM

  3. 3  > show-memory 17 CourseNana.COM

  4. 4  GG_G###g########B?B^B######b?##### CourseNana.COM

  1. 5  B 17: CourseNana.COM

  2. 6  ^ 18: CourseNana.COM

  3. 7  B 19: CourseNana.COM

  4. 8  #20: CourseNana.COM

  5. 9  #21: CourseNana.COM

  6. 10  #22: CourseNana.COM

  7. 11  #23: CourseNana.COM

  8. 12  #24: CourseNana.COM

  9. 13  #25: CourseNana.COM

  10. 14  b 26: CourseNana.COM

  11. 15  [...] CourseNana.COM

MOV_I | JMP | STOP | STOP| STOP| STOP| STOP| STOP| STOP| STOP | CourseNana.COM

2| -1 -2| 0 13| 37 CourseNana.COM

0| 0 0| 0 0| 0 0| 0 0| 0 0| 0 CourseNana.COM

13| 37 CourseNana.COM

A.4.7.3 Befehl: show-ai Der Befehl show-ai zeigt den aktuellen Zustand einer KI an. Hierbei ist das Format des Befehls wie folgt: show-ai [Name der KI]. Die Ausgabe des Befehls besteht aus maximal zwei Zeilen: CourseNana.COM

    [Name der KI] [RUNNING|STOPPED]@[Zähler der KI]
    Next Command: [KI-Befehl, der als nächstes ausgeführt wird] @[Speicherzelle]

Die erste Zeile gibt den Namen der KI an, gefolgt von dem Status der KI und dem Zähler der KI. Der Zähler der KI gibt an, wie viele KI-Befehle die KI seit Spielbeginn ausgeführt hat (ggf. inklusive STOP). Die zweite Zeile gibt den nächsten KI-Befehl, sowie die Nummer der Speicherzelle, in der sich der KI-Befehl befindet, an. Sollte die KI gestoppt sein, so wird die zweite Zeile nicht ausgegeben. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  > show-ai Sleepy CourseNana.COM

  3. 3  Sleepy (RUNNING@0) CourseNana.COM

  4. 4  Next Command: ADD_R|10|-2 @2 CourseNana.COM

  5. 5  [...] CourseNana.COM

  6. 6  > show-ai Sleepy CourseNana.COM

  7. 7  Sleepy (STOPPED@42) CourseNana.COM

  8. 8  [...] CourseNana.COM

A.4.7.4 Befehl: end-game Der Befehl end-game beendet das Spiel. Hierbei ist das Format des Befehls wie folgt: end-game. Am Ende des Spiels werden die Listen der laufenden und gestoppten KIs angezeigt. Hierbei werden nur Listen mit mindestens einer KI ausgegeben. Die Ausgabe ist wie folgt:Running AIs: [Namen laufender KIs durch Leerzeichen getrennt]undStopped AIs: [Namen gestoppter KIs durch Leerzeichen getrennt]. Die Listen sind hierbei aufsteigend CourseNana.COM

Seite 18 von 20 CourseNana.COM

Programmieren – Abschlussaufgabe 1 Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

nach der initialen Position der KIs im Speicher sortiert. Nach dem Ausführen des Befehls befindet sich das System wieder in der Initialisierungsphase. CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  [...] CourseNana.COM

  2. 2  > end-game CourseNana.COM

  3. 3  Running AIs: Sleepy#0, MagicAI CourseNana.COM

  4. 4  Stopped AIs: HelloWorld, Sleepy#1 CourseNana.COM

  5. 5  [...] CourseNana.COM

A.5 Beispielinteraktionen CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 1  %>javaCodeFight32#?_^GgBb CourseNana.COM

  2. 2  Welcome to CodeFight 2024. Enter 'help' for more details. CourseNana.COM

  3. 3  > add-ai Dwarf ADD_R,4,3,MOV_I,2,2,JMP,-2,0,STOP,0,0 CourseNana.COM

  4. 4  Dwarf CourseNana.COM

  5. 5  > add-ai Sleepy ADD,10,-1,MOV_I,2,-1,JMP,-2,0,STOP,13,37 CourseNana.COM

  6. 6  Sleepy CourseNana.COM

  7. 7  > start-game Dwarf Sleepy CourseNana.COM

  8. 8  Game started. CourseNana.COM

  9. 9  > show-memory CourseNana.COM

  10. 10  _GGG############^BBB############ CourseNana.COM

  11. 11  > next 50 CourseNana.COM

  12. 12  Sleepy executed 12 steps until stopping. CourseNana.COM

  13. 13  Dwarf executed 24 steps until stopping. CourseNana.COM

  14. 14  > show-memory 16 CourseNana.COM

  15. 15  gGGg###g###ggb##?gBBBg###gb?##gb## CourseNana.COM

  1. 16  g 16: CourseNana.COM

  2. 17  B 17: CourseNana.COM

  3. 18  B 18: CourseNana.COM

  4. 19  B 19: CourseNana.COM

  5. 20  g 20: CourseNana.COM

  6. 21  #21: CourseNana.COM

  7. 22  #22: CourseNana.COM

  8. 23  #23: CourseNana.COM

  9. 24  g 24: CourseNana.COM

  10. 25  b 25: CourseNana.COM

  11. 26  > end-game CourseNana.COM

  12. 27  Stopped AIs: Dwarf, Sleepy CourseNana.COM

  13. 28  > add-ai Caterpillar MOV_R,0,1 CourseNana.COM

  14. 29  Caterpillar CourseNana.COM

  15. 30  > add-ai Pogo JMP,0,0 CourseNana.COM

  16. 31  Pogo CourseNana.COM

  17. 32  > set-init-mode INIT_MODE_RANDOM 28 CourseNana.COM

  18. 33  Changed init mode from INIT_MODE_STOP to INIT_MODE_RANDOM 28 CourseNana.COM

STOP | MOV_I | JMP | STOP | STOP | STOP| STOP| STOP| STOP | STOP | CourseNana.COM

13| 45 2| -1 -2| 0 13| 37 13| 49 0| 0 0| 0 0| 0 13| 53 13| 37 CourseNana.COM

Seite 19 von 20 CourseNana.COM

CourseNana.COM

Programmieren – Abschlussaufgabe 1 CourseNana.COM

Abgabefrist: 14.03.2024, 06:00 Uhr CourseNana.COM

 Beispielinteraktion CourseNana.COM

  1. 34  > start-game Pogo Caterpillar CourseNana.COM

  2. 35  Game started. CourseNana.COM

  3. 36  > next 181 CourseNana.COM

  4. 37  > show-memory 9 CourseNana.COM

  5. 38  BBBBBBBBB?B_^BBBBBBB?BBBBBBBBBBBBB CourseNana.COM

  1. 39  B CourseNana.COM

  2. 40  _ CourseNana.COM

  3. 41  ^ CourseNana.COM

  4. 42  B CourseNana.COM

  5. 43  B CourseNana.COM

  6. 44  B CourseNana.COM

  7. 45  B CourseNana.COM

  8. 46  B CourseNana.COM

  9. 47  B CourseNana.COM

  10. 48  B CourseNana.COM

  11. 49  > CourseNana.COM

  12. 50  Caterpillar (RUNNING@90) CourseNana.COM

  13. 51  Next Command: MOV_R|0|1 @10 CourseNana.COM

  14. 52  > show-ai Pogo CourseNana.COM

9: MOV_R | 0 | 1 10:MOV_R|0|1 11:MOV_R|0|1 12:MOV_R|0|1 13:MOV_R|0|1 14:MOV_R|0|1 15:MOV_R|0|1 16:MOV_R|0|1 17:MOV_R|0|1 18:MOV_R|0|1 show-ai Caterpillar CourseNana.COM

  1. 53  Pogo (RUNNING@91) CourseNana.COM

  2. 54  Next Command: MOV_R|0|1 @11 CourseNana.COM

  3. 55  > end-game CourseNana.COM

  4. 56  Running AIs: Pogo, Caterpillar CourseNana.COM

  5. 57  > quit CourseNana.COM

Seite 20 von 20  CourseNana.COM

Get in Touch with Our Experts

WeChat WeChat
Whatsapp WhatsApp
Programmieren代写,Code Fight代写,Java代写,Programmieren代编,Code Fight代编,Java代编,Programmieren代考,Code Fight代考,Java代考,Programmierenhelp,Code Fighthelp,Javahelp,Programmieren作业代写,Code Fight作业代写,Java作业代写,Programmieren编程代写,Code Fight编程代写,Java编程代写,Programmierenprogramming help,Code Fightprogramming help,Javaprogramming help,Programmierenassignment help,Code Fightassignment help,Javaassignment help,Programmierensolution,Code Fightsolution,Javasolution,