Prototypenbau mit Excel

28.04.2013
Bei der Entwicklung eigener Gesellschaftsspiele kommt man nur selten am Medium Spielkarte vorbei. Geht es schließlich an den Bau eines nutzbaren Prototypen, kann man gerade bei komplexen Karten mit vielen unterschiedlichen Informationen mit dem richtigen Hilfsmittel etliches automatisieren. Ich selbst nutze dazu mit Microsoft Excel eine schnöde Tabellenkalkulation.


Aufbau des Kartenlayouts
Schon beim anfänglichen Layout bietet sich die Verwendung einer Tabellenkalkulation an: Durch die strikte Aufteilung in Zeilen und Spalten liegt bereits ein Grundraster vor, das man problemlos den eigenen Bedürfnissen anpassen kann.

Um gängige Kartenformate ungefähr nachzuahmen, habe ich mit folgenden Formatierungen gute Erfahrungen gemacht:

  • Zeilenhöhe 12 Punkt / Spaltenbreite 1,57 Punkt (Minimum in älteren Versionen)
  • Karte Größe B5,8 x H8cm: 13 x 20 Zellen, 9 pro Seite (Hochformat)
  • Karte Größe B4 x H6,7cm: 10 x 15 Zellen, 16 pro Seite (Hochformat)
Zudem empfehle ich insbesondere bei beidseitig bedruckten Karten, die äußersten Zellen als Beschnittrand dunkelgrau/schwarz zu färben. Auch wenn man die Seiteeinrichtung so vorgenommen hat, dass der Druck horizontal und vertikal zentriert wird, ergeben sich immer noch Verschiebungen von einigen Milimetern.

Die eigentliche Aufteilung der Kartendaten ist dann mit verbundenen Zellen schnell erstellt - wobei man sich natürlich im vornherein darüber im Klaren sein sollte, welche diese sein sollten. Im Idealfall liegen gerade bei komplexen Karten die einzelnen Werte sogar in einem eigenen Tabellenblatt vor.


Kartendaten ausfüllen mit der INDIREKT-Formel
Der Vorteil einer solchen Datentabelle zeigt sich beim Einsetzen der individuellen Werte in das fertige Layout. In Microsoft Excel kann man durch die Formel INDIREKT errechnet werden, aus welcher genauen Zelle der Datentabelle ein Wert übernommen werden soll.
Achtung: Wie auch bei absoluten Bezügen wird das Ergebnis einer INDIREKT-Berechnung nicht angepasst, wenn man in der Struktur der Datentabelle zu einem späteren Zeitpunkt Änderungen vornimmt.

Analog zu einem absoluten Bezug kann man den genauen Verweis bestehend aus Tabellenblatt, Zeile und Spalte vom Programm berechnen lassen. Den Namen des Blatts sollte bekannt sein; ebenso die Spalte, in der sich der für die eigentliche Kartenzelle relevante Wert befindet.
Bleibt die Frage, wie man die genaue Zeilennummer ermittelt.


Berechnung der laufenden Kartenzahl
Da bekannt ist, wie viele Zeilen eine Karte hoch ist, lässt sich über die AUFRUNDEN-Formel ermitteln, in der wievielten Reihe sich eine Karte befindet. Dies multipliziert man mit der Anzahl der Karten pro Zeile:

=AUFRUNDEN(ZEILE()/[Kartenhöhe];0)*[Karten pro Zeile]

Da zudem mehrere Karten nebeneinander in einer Reihe stehen sollten, um das Blatt richtig auszunutzen, ermittelt man analog mit der ABRUNDEN-Formel, um die wievielte Karte einer Zeile es sich handelt. ABRUNDEN sorgt dafür, dass erst ab der zweiten Karte eine Anpassung erfolgt:

=ABRUNDEN(SPALTE()/[Kartenbreite];0)

Da wegen der Multiplikation mit Kartenanzahl pro Zeile der Bezug meist zu weit nach unten rutscht, muss dieser durch die Subtraktion der Differenz zwischen Karten pro Zeile und erster Datenzeile nach oben gerückt werden.


Die eigentlichen Formeln
Damit ergibt sich folgende Berechnung:

=AUFRUNDEN(ZEILE()/[Kartenhöhe];0)*[Karten pro Zeile]
+ABRUNDEN(SPALTE()/[Kartenbreite];0)
-[Anzahl Karten pro Zeile - # der ersten Datenzeile]

Detaillierte Berechnung der Bezugszeile bei Datenblatt mit 1 Titelzeile

Mit den Werten der von mir eingangs dargelegten Kartengrößen (und 1 Titelzeile im Datenblatt) lautet die finale Formel damit:

=AUFRUNDEN(ZEILE()/20;0)*3+ABRUNDEN(SPALTE()/13;0)-1
bzw.
=AUFRUNDEN(ZEILE()/15;0)*4+ABRUNDEN(SPALTE()/10;0)-2


Finaler INDIREKT-Bezug
Dies kann man nun in die letztendliche INDIREKT-Formel einsetzen. So fügt man beispielsweise den passenden Kartentitel aus Spalte A in der Tabelle "Kartendaten" mit einer Titelzeile ein:

=INDIREKT("'Kartendaten'!A"&AUFRUNDEN(ZEILE()/20;0)*3
+ABRUNDEN(SPALTE()/13;0)-1)
bzw.
=INDIREKT("'Kartendaten'!A"&AUFRUNDEN(ZEILE()/15;0)*4
+ABRUNDEN(SPALTE()/10;0)-2)

Um diese umständliche Berechnung nicht in jeder einzelnen Kartenzelle wiederholen zu müssen, bietet sich an, die Formel für die fortlaufende Kartennummer in einer ungenutzten Zelle zu verstecken. Dazu bietet sich etwa der oben empfohlene Beschnittrand an, in dem man dann durch eine Schriftfarbe gleich dem Hintergrund das Rechenergebnis versteckt. Innerhalb der Karte selbst kann die INDIREKT-Formel nun per relativem Bezug (der somit beim Kopieren auf alle anderen Karten angepasst wird) auf diese zugreifen.


Dingbats
Diverse Fonts bestehen nicht aus Buchstaben und Zahlen, sondern aus Ornamenten und Symbolen. Microsoft selbst liefert selbst die Dingbats Webdings und Wingdings 1 bis 3, unzählige weitere sind im Internet zu finden.

Neben der naheliegenden einprägsamen Verwendung solcher Symbole für etwa Kartentypen, Kosten oder Ressourcen haben sie vor allem den Vorteil, dass auch hier diverse Formeln das Layout automatisieren können: So kann man über verschachtelte WENN-Bedingungen einfach das gewünschte Zeichen darstellen oder mit der WIEDERHOLEN-Formel ein Symbol - etwa bei Ressourcen - in der gewünschten Menge darstellen. Auch hier käme wieder die INDIREKT-Formel zum Einsatz, um die in einem zentralen Datenblatt hinterlegten Werte abzufragen.


Ein Beispiel: TriCard
So habe ich unter anderem auch bei meinem - in letzter Zeit etwas vernachlässigten - Kartenrollenspiel TriCard die Ikonen aus dem Font Webdings herausgesucht und per Formelsprache dargestellt. Für jeden der drei Kartentypen sind mit zunehmender Stufe zwei verschiedene Ikonen zu sehen, deren Anzahl - in der Summe maximal 4 - auch hier natürlich auf einem Datenblatt hinterlegt ist.

Die umständliche Berechnung zur Findung der richtigen Datenspalte möchte dem Leser ersparen; interessanter ist vielmehr die Formel zur Unterscheidung, welche der beiden Ikonen dargestellt werden soll.


Für Feld 1 ist dies noch einfach: Ist die Anzahl für eine der beiden Ikonen mindestens 1, so wird sie dargestellt, dabei hat Ikon 1 stets den Vorzug.

=WENN(#Ikone1>=1;Ikone1;WENN(#Ikone2>1;Ikone2;""))

Ab Feld 2 allerdings muss zunächst geprüft werden, ob dort überhaupt Ikone 1 dargestellt werden soll, und ob darin bereits/noch Ikone 2 auftauchen soll:

=WENN(#Ikone1>=2;Ikone1;WENN(#Ikone1+#Ikone2>=2;Ikone2;""))


Bedingte Formatierung
Noch spezifischer lässt sich das Layout über bedingte Formatierungen gestalten. Neben der Zuweisung einer bestimmten Hintergrundfarbe abhängig vom Kartentyp kann man diverse Symbole auch nach Bedarf ausblenden. Hierzu zwei konkrete Beispiele aus meinen eigenen Prototypen:


Ein Beispiel: Die Heinzelmännchen von Köln
In diesem Stichspiel basierend auf dem bekannten Gedicht sind auf der Rückseite auf Erbsen ausrutschende Heinzelmännchen abgebildet. Die Zahl darunter gibt an, bei welcher Zahl Erbsen im Spiel diese Karte vom Stapel entfernt wird. Um die Optik etwas zu verschönern, sollen auch entsprechende viele Erbsen - sprich: grüne Punkte - zu sehen sein.

Die bedingte Formatierung entscheidet hier über die Darstellung der 5. Erbse

Die Mindestzahl an Erbsen ist dabei permanent grün gefärbt. Die restlichen Punkte sind weiss und ermitteln über eine bedingte Formatierung, ob umgefärbt werden muss.


Ein Beispiel: Arsenale
In einer ersten - und letztlich nicht funktionierenden - Fassung eines Mehrheitenspiels zur venezianischen Werft Arsenale bildeten einzelne Auftragskarten ab, welche Handwerker jeweils zur Erfüllung dieser Aufgabe nötig waren.

Die bedingte Formatierung entscheidet hier über die Darstellung eines Handwerkers

Hier waren schlicht alle Spalten mit dem entsprechenden Symbol (dessen Font ich inzwischen nicht mehr installiert habe) gefüllt und über bedingte Formatierung je nach Bedarf laut Datenblatt die überflüssigen Zeichen mit weisser Schriftfarbe ausgeblendet.
Tatsächlich war dieser Prototyp sogar der erste, in dem ich das gesamte Layout automatisiert habe.


Ein Fazit

Rückblickend habe ich bei meinem Prototypenbau an etlichen Formeln - einige komplexer als die oben aufgeführten - doch arg knabbern müssen, und so konnten mitunter mehrere Tage verstreichen, bis sämtliche Automatisierungen wie gewünscht funktioniert haben. Ist aber diese Vorarbeit erledigt, ist es eine wahre Wonne, wie durch simples Kopieren über hundert Karten mit ihren individuellen Daten befüllt werden. Ganz zu schweigen davon, dass spätere Änderungen während der Testphase durch einen einfachen Eintrag im Datenblatt durchgeführt werden können.

Kommentare:

Gerrit Reininghaus hat gesagt…

Ich bin ja selber Excel-Prototypen Bauer - sowohl beruflich als auch rollenspieltechnisch. Daher habe ich mich über so eine praktische Anleitung für die Allgemeinheit gefreut.

INDIREKT würde ich übrigens nur in ganz, ganz speziellen Fällen nehmen. Das Problem ist der feste Bezug auf einen String, der sogar Sprachversions-Inkompatibilitäten verursachen kann. Auch die Bezüge zur fixen SPALTE können schnell zum Haare raufen werden, wenn man das Format doch mal ändert.

Genauso, aber flexibler kann man OFFSET (wie auch immer das auf Deutsch heißt) oder - wenn möglich - besser noch nur mit SVERWEIS arbeiten. Ich habe auf meinem Blog auch ein paar Prototypen verlinkt.

Aber was man am Ende an Flexibilität braucht und was welchen Aufwand lohnt, das ist natürlich immer eine Frage des Projekts und hier scheint ja alles super geklappt zu haben. Freut mich jedenfalls einen "Mitstreiter" entdeckt zu haben.

Klaus hat gesagt…

INDIREKT ist auf jeden Fall nur mit Vorsicht geniessen, darauf hatte ich in meinem Text auch hingewiesen. Ob ich OFFSET (deutsch BEREICH.VERSCHIEBEN) nutzen würde bezweifle ich, da ich ja nur den Bezug auf genau eine Zelle benötige und nicht auf einen Bereich.

Ich denke aber, dass in dieser vorangeschrittenen Phase des Spieldesigns der Fokus vor allem auf handhabbarem Spielmaterial liegt - sollten sich dann noch schwerwiegende Fehler in der Konzeption finden, muss man oft eh ganz von vorne beginnen.

Kommentar veröffentlichen