Version 1.72 (2002-08-31)
Das Auswerteprogramm KAPDIP dient zur Auswertung von beliebigen Börsenpartien.
Entworfen wurde das Programm zur Auswertung für Kapitalisten-Diplomacy; die variabel gehaltenen Möglichkeiten zur Spezifikation erlauben jedoch auch andere Partien als "Objekt" der Börse.
Für jede Partie ist eine Datei anzulegen, die sämtliche Partiedaten enthält. Diese Datei muß den Namen <name>.DAT haben. Mit dem Programm werden mehrere Beispiel-Partiedateien mitgeliefert. Der Teil <name> ist nach dem Aufruf von KAP_DIP.TOS (ATARI ST) bzw. KAP_DIP.EXE (PC) im Programm-Dialog anzugeben.
Die jeweilige Auswertung wird in die Datei <name>.AUS geschrieben.
Mit einer Frage, die mit dem Text ('j'/'n') endet, wird der Benutzer aufgefordert, eine der Tasten 'j', 'J', 'n' oder 'N' zu drücken. Jede andere Art der Eingabe wird ignoriert.
Alle Währungsbeträge werden mit dieser Funktion vom Bildschirm eingegeben.
Sie erhält bei ihrem Aufruf als Parameter ein Intervall, innerhalb dessen sie eine Eingabe als gültig akzeptiert. Zahlenwerte außerhalb dieses Intervalls können nicht eingegeben werden - ein entsprechender Tastendruck bleibt ohne Wirkung.
Eine Zahleneingabe kann mit einem Vorzeichen '+' oder '-' beginnen und besteht ansonsten aus den Ziffern '0' bis '9'. Beendet wird die Eingabe mit der Taste RETURN bzw. ENTER. Eingabefehler können durch die Verwendung der Taste BACKSPACE ziffernweise korrigiert werden; mit der Taste ESCAPE kann eine eingegebene Zahl komplett gelöscht werden.
Außerdem gibt es für die in Kapitalisten-Diplomacy häufig auftretende Option "maximaler Verkauf" (-500 Währungeinheiten) eine schnelle Sondereingabeform: Die Taste '*' hat die gewünschte Bedeutung. Falls der Spieler weniger als 500 Währungseinheiten der vorliegenden Währung besitzt, wird die Höhe des Verkaufs implizit (ohne zusätzliche Meldung) angepaßt. Die Taste '/' erzeugt die Eingabe '-499' (die jedoch nicht automatisch reduziert wird).
Wurde ein Zeichen akzeptiert, dann wird es auf dem Bildschirm angezeigt. Achtung: Ungültige Tasten werden ohne Meldung zurückgewiesen! Nach jedem Zeichen wird geprüft, ob ein Wert innerhalb des gültigen Intervalls entstehen kann.
Beispiel:
Bei einem Börsenzug kann die Eingabe '-51' ein gültiger Wert sein - jede weitere Taste jedoch (außer BACKSPACE bzw. ESCAPE) wird zurückgewiesen.
Der Benutzer sollte also aufpassen, daß er bei der Eingabe ungültiger Werte auf den Fehlererkennungsmechanismus richtig reagiert. (Im Zweifelsfalle möglichst oft die Taste '*' verwenden - das geht sowieso schneller.)
KAPDIP besitzt keine Setup-Komponente, mit der der Benutzer ein Szenario im Dialog aufbauen kann. Stattdessen ist die Partiedatei eine normale, mit jedem ASCII-Editor zu verarbeitende Textdatei.
Mit dem Programm KAPDIP werden mehrere Beispielsdateien mitgeliefert, die als Ausgangspunkt für ein Partieszenario verwendet werden können. Ein manueller Eingriff in eine solche Datei (per Editor) ist jedoch unerläßlich, um die Spieler mit ihren Startwerten einzutragen.
Die Partiedatei ist in mehrere Abschnitte eingeteilt, die jeweils durch eine Zeile mit einer trennenden Linie gekennzeichnet sind. Diese Zeilenstruktur darf auf keinen Fall verändert werden, da das Programm exakt diese Struktur erwartet und andernfalls abstürzt.
Eine komplette Syntaxanalyse der Partiedatei vorzunehmen halte ich für kaum realisierbaren Luxus; wer trotz der ausgiebigen Dokumentation etwas falsch gemacht hat, wird den Fehler hoffentlich schnell finden und beseitigen können.
Innerhalb der Partiedatei können drei verschiedene Typen von Zeilen auftreten, die unterschiedliche Funktionen besitzen:
1. Abschnitt:
- 1. Zeile: Name der Partie (String).
Wird in die Kopfzeile der Auswertung eingefügt.- 2. Zeile: Name des Spiels (String).
Wird in die Kopfzeile der Auswertung eingefügt. (neu seit Version 1.71!)- 3. Zeile: Name des Spielleiters (String).
Wird in die Kopfzeile der Auswertung eingefügt. Diese Kopfzeile enthält zudem noch Spieljahr und Jahreszeit, außerdem noch die Angabe des nächsten Zugabgabetermins; die genannten Strings sollten also nicht zu lang werden.- 4. Zeile: Separator.
2. Abschnitt:
- 1. Zeile: aktuelle Jahreszeit (Integer, 1 bis 5).
- 2. Zeile: maximale Jahreszeit (Integer, 1 bis 5).
Normalerweise werden für Diplomacy-artige Börsen nur 2 oder ggf. 3 Jahreszeiten benötigt, aber etwas mehr kann auch nicht schaden. Auch ein "Ein-Phasen-Spiel" (z. B. für United-Börse) ist mit diesem Mechanismus möglich.- 3. Zeile und weitere: Namen von Jahreszeiten.
Hier folgen mehrere Strings; jeder String enthält den Namen einer Jahreszeit.
Die Anzahl dieser Zeilen muß unbedingt gleich dem Wert der 2. Zeile sein!- letzte Zeile: Separator.
3. Abschnitt:
- 1. Zeile: Aktuelles Spieljahr (Integer).
- 2. Zeile: Letztes Spieljahr (Integer).
Üblicherweise werden hier Werte wie z. B. 1900 und 1910 anzugeben sein, aber auch beliebige andere Werte sind erlaubt.- 3. Zeile: Separator.
4. Abschnitt:
- 1. Zeile: Jahreszeit mit SC-Wechsel (Integer, 1 bis 5).
Einmal innerhalb eines jeden Spieljahres kann der Spielleiter die geänderten Werte für Versorgungszentren eines jeden Landes (oder deren Äquivalente) eingeben.
Am Ende dieser Jahreszeit überprüft das Programm auch, ob das letzte Spieljahr erreicht wurde und die Partie durch Ablauf der Spielzeit zu beenden ist.- 2. Zeile: Anzahl aller Versorgungszentren auf dem Brett (Integer).
Falls der Wert 0 angegeben wurde, hat diese Zeile keine Bedeutung für das Programm (z. B. für Szenarien mit variabler Anzahl von "Versorgungszentren" wie Gilgamesch, Titan usw.).
Wurde ein anderer Wert angegeben, dann wird bei der Eingabe der neuen Stände an Versorgungszentren überprüft, ob zu viele Versorgungszentren zugeordnet wurden.- 3. Zeile: SC-Siegbedingung (Integer).
Erreicht oder überschreitet ein Land die hier angegebene Anzahl an Versorgungszentren (dies wird überprüft, wenn neue SC-Stände eingegeben werden), dann wird die Partie in diesem Zug beendet.
Wird hier ein negativer Wert <-n> angegeben, dann wird dies als "n - Spieljahr" interpretiert. Dies ermöglicht eine variable Spielendebedingung, die pro Jahr um 1 SC sinkt.- 4. Zeile: Separator.
5. Abschnitt:
- 1. Zeile: Anzahl der WE pro Kursbewegung (Integer).
Wird diese Anzahl an WE in einer Währung mehr ge- als verkauft (bzw. umgekehrt), dann steigt (bzw. fällt) der Kurs dieser Währung um 0.01 Kj.
Normalerweise wird hier der Wert 100 verwendet werden, in Varianten bzw. bei besonders vielen oder wenigen Mitspielern ist ggf. ein anderer Wert sinnvoll.- 2. Zeile: Separator.
1. Abschnitt:
- 1. Zeile: Anzahl der Länder (Integer, 1 bis 20).
- 2. Zeile: Separator.
Nun müssen genau so viele Abschnitte folgen, wie im 1. Abschnitt durch den entsprechenden Wert verlangt werden.
Weitere Abschnitte:
Jeder folgende Abschnitt hat folgendes Aussehen:
- 1. Zeile: Name des Landes (String).
Wird nur zum Programmdialog verwendet, die Länge ist also ziemlich egal.- 2. Zeile: Name der Währung dieses Landes (String).
Dieser Wert wird im Tabellen-Layout verwendet und sollte daher nicht länger als 8 Zeichen sein. Ich habe mich nach langem Überlegen gegen das gewaltsame Abschneiden dieser Strings entschieden; sollte jemand also zu lange Währungsnamen angeben, dann sehen die Tabellen etwas schief aus. Daran kann man die Ursache allerdings sofort erkennen.- 3. Zeile: Aktueller Kurs (Integer, positiv).
Dieser Kurs wird ganzzahlig als Vielfaches von 0.01 Kujambeln gemessen, um Rundungsfehler aller Art grundsätzlich zu vermeiden. Der Wert 0 wird intern als Zeichen dafür verwendet, daß ein Land aus dem Spiel ausgeschieden ist - also Vorsicht!- 4. Zeile: Anzahl der Versorgungszentren (Integer, positiv).
Auch hier zeigt 0 an, daß das Land 'ex' ist. Diese Doppelt-Haltung von Informationen ist notwendig, damit im Moment des Ausscheidens eines Landes in der Auswertung noch ein Teil der Börsenaktionen angezeigt werden kann (der Kurs wird erst am Ende der gesamten Auswertung auf 0 gesetzt, die SC-Zahl sofort nach der Eingabe des entsprechenden Wertes).- 5. Zeile: Separator.
1. Abschnitt:
- 1. Zeile: Anzahl der Spieler (Integer, 1 bis 20).
- 2. Zeile: Separator.
Nun müssen genau so viele Abschnitte folgen, wie im 1. Abschnitt durch den entsprechenden Wert verlangt werden.
Weitere Abschnitte:
Jeder folgende Abschnitt hat folgendes Aussehen:
- 1. Zeile: Pseudonym (String).
Dieser Wert wird im Tabellen-Layout verwendet; sollten mehr als 20 Zeichen verwendet werden, sieht das Ergebnis schrecklich aus.- 2. Zeile: Bargeld (Integer).
Dies ist der Kujambel-Betrag des Spielers; wie schon bei den Währungskursen wird auch hier ein ganzzahliges Vielfaches von 0.01 Kj. verwendet.- 3.-n. Zeile: Anzahl der Währungseinheiten (Integer).
Jeweils in den betreffenden Landeswährungen (diese werden dem Teil 2 dieser Datei entnommen und als Kommentar hinter den Werten angefügt). Die Anzahl dieser Zeilen muß jeweils mit der Anzahl der definierten Länder übereinstimmen (unabhängig davon, welche Länder bereits ex sind - in diesem Fall wird der Kontostand von 0 Währungseinheiten vermerkt).- letzte Zeile: Separator.
Unbedingt erforderlich ist die Eintragung der Spielerdaten. Am einfachsten ist es, den mitgelieferten Spieler "Pseudonym" an die Startbedingungen des Szenarios anzupassen, ihn anschließend per Editor als Block zu markieren (das sollte jeder Editor können) und ihn hinreichend oft zu kopieren. Anschließend können die einzelnen Pseudonyme eingetragen werden. Außerdem muß unbedingt die Anzahl der Spieler angepaßt werden; sollte dieser Wert zu klein sein, dann werden nachfolgende Spielerdaten nicht gelesen - und auch nicht wieder mit abgespeichert!
Falls kein Standard-Szenario gespielt werden soll, sind ggf. auch die Länderdaten anzupassen. Hier gilt dasselbe wie bei den Spielern: Am besten ein "Muster"-Land erzeugen und hinreichend oft kopieren. Nicht vergessen, die Anzahl anzupassen - und die Anzahl der Länder steckt auch im Spielerformat mit drin ...
Die Basisdaten schließlich sind am einfachsten anzupassen: Hier müssen lediglich Werte ausgetauscht werden. Es sei denn, es soll eine neue Struktur der Jahreszeiten konstruiert werden; das Verfahren gleicht den bereits beschriebenen.
Noch einmal zur Warnung: Das Programm interpretiert die Dateistruktur in genau der beschriebenen Weise! Stimmt etwas nicht, dann versucht das Programm dennoch, Daten zu lesen. Bei Strings wird dann Unfug gelesen (das macht noch nichts) - bei Integer-Leseversuchen an einer Stelle, an der keine Zahl steht, stürzt das Programm jedoch ab.
Eine unerläßliche Sicherheitsmaßnahme ist auf jeden Fall die Anfertigung einer Kopie der Partiedatei, bevor man darin herumfummelt: Der Vergleich einer korrekten mit einer defekten Datei ist per Editor oft einfacher als die explizite Suche nach der fehlerhaften Stelle.
Während der Partie sind Eingriffe in die Partiedatei nicht erforderlich; der GM kann aber durchaus ein Land, das 'ex'-gegangen ist, aus der Partiedatei entfernen (wenn er alle anderen Werte dann entsprechend anpaßt), um die zugehörige Währungsspalte aus der Auswertungstabelle zu entfernen.
Die Anzahl der Währungseinheiten pro Spieler und Währung ist auf ca. 2 Milliarden, die Geldmenge pro Spieler auf ca. 200 Millionen Kujambel begrenzt. (Diese Beträge sollten normalerweise nicht erreicht werden.)
Der Basisname der Partiedatei kann aus höchstens 8 Zeichen bestehen (Einschränkung des Betriebssystems TOS bzw. DOS).
Man kann einen längeren Partienamen verwenden; das Programm verwendet dann die ersten 8 Zeichen des Partienamens zur Bildung des Dateinamens.