Progforum Contest 2013 - Teenage Mutant Ninja (?) Turtles
Willkommen, liebes Progforum, zu unserem alljaehrlichen Programmier-Contest !
Dieses Jahr haben wir (d.h. Jeez, DFYX und ich) uns etwas ganz Besonderes ausgedacht.
Um allen gerecht zu werden, haben wir uns ueberlegt, dieses Mal sowohl etwas Programmiertechnisches als auch etwas Kuenstlerisches zu machen.
Ziel ist es, einen Interpreter fuer unseren speziellen Turtle-Graphik-Dialekt zu schreiben und damit ein aesthetisch besonders ansprechendes Bild (inklusive des Turtle-Graphik-Codes) zu generieren.
Hierzu bieten sich L-Systeme an, muessen aber nicht verwendet werden.
Wie letzten Endes die Graphiken erzeugt werden, ist jedem selbst ueberlassen. Hauptsache ist, man kann sie am Ende hier im Forum praesentieren. Valide Moeglichkeiten sind so z.B.
- C++ Programm mit SDL / OpenGL
- Javascript und / oder HTML5
- Bashscript, das eine SVG-Datei erzeugt
- DCPU16 Assembler, welches eine Portable Pixmap Datei ausgibt
- ... was euch sonst noch einfaellt
Der Contest besteht aus drei abstimmbaren Teilen.
1. Der Sourcecode des Interpreters - wie elegant und womit setzt ihr den Turtle-Graphik-Interpreter um?
2. Die Aesthetik eueres eingesendeten Beispielbildes
3. Die Art und Weise, wie ihr zum Code eueres Beispielbildes gekommen seid.
Gewinner ist derjenige, der in der Summe aller drei Multiple-Choice-Umfragen die meissten Prozentpunkte erreicht.
Einsendeschluss ist voraussichtlich Sonntag, der 14. April. Anschliessend gibt es zwei Wochen Zeit für die Abstimmung.
Jeder Interpreter gilt als eigenstaendige Einsendung. Es steht allerdings jedem frei, mehrere Einsendungen zu machen oder mehrere Bilder zu seinem Interpreter abzugeben. Es zaehlt dann in allen Kategorien das jeweils beste Ergebnis.
Dieses Mal wird es sogar etwas zu gewinnen geben. Jeez, DFYX und ich haben ein paar Steam-Keys gesponsort (wenn ihr euch anschliessen wollt, weitere Keys sind gerne willkommen), aus denen die Gewinner waehlen koennen.
Der erste Platz darf sich 3 Keys aussuchen, der zweite Platz zwei Keys und der dritte Platz bekommt noch einen Key. Bisher haben wir folgende Keys im Angebot:
- Bastion
- Cargo! The Quest for Gravity
- Cave Story +
- 2x Crayon Physics Deluxe
- 2x Cogs
- Defcon
- 2x Dungeon Defenders + DLC
- Gemini Rue
- Gish
- Humble Bundle 3
- 2x Machinarium
- Multivinia
- NightSky
- Resonance
- 3x Superbrothers: Sword & Sorcery EP
- Swords and Soldiers HD
- The Binding of Isaac
- Titan Quest (German)
- Trine
- Warhammer 40,000: Dawn of War
Und damit ihr auch wisst, was euerer Interpreter mindestens koennen muss, hier alle notwendigen Befehle fuer die Turtle-Graphik:
Code:
2D Turtle-Grafik, optional auf 3D (oder mehr) erweiterbar
F : move forward $length units while drawing
X : move forward $length units without drawing
* : multiply length with $factor
/ : divide length by $factor
+ : turn left by $angle degrees
- : turn right by $angle degrees
> : multiply angle with $factor
< : divide angle by $factor
! : increase $factor by 1
? : decrease $factor by 1
[ : push all states to stack
] : pop all states from stack
0-7: line colour, Palette: black, red, green, yellow, blue, magenta, cyan, white
Es duerfen auch zusaetzliche Operationen verwendet werden.
(z.B. Laden von RGB-Farbpaletten, etc)
Startzustand:
$factor: 2
$length: 1
$angle: 90
Facing up at start
Und nun viel Spass mit unserem Contest.
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir unter Windows 7 (64 bit) läuft was, aber ich weiß nicht, ob das so richtig ist. Der Output sieht recht schräg aus.
Anhang 17184
Liste der Anhänge anzeigen (Anzahl: 1)
Ah, ok.
Ich hab mir auch mal dein Sourcecode angeschaut. Da existieren schon ein paar Parallelen. ^^
In den nächsten Tagen werde ich mal meinen Code hochladen. Ein paar Punkte gefallen mir da noch nicht so recht.
Aus irgendeinem Grund spielen die Farben auch nicht mehr so richtig mit. Ich muss hier auch grad so ein wenig auf Quellcodeverwaltung verzichten. Nun ich grad nicht mehr nachvollziehen, was welche Änderungen dies verursacht haben. :/
So sieht mein derzeitiger Stand aus:
Anhang 17186
Liste der Anhänge anzeigen (Anzahl: 1)
So, dann präsentiere ich mein Programm:
Anhang 17245
Es ist ein Editor, mit einer Demo-Funktion und SVG-Export geworden. Geschrieben mit Java 7.
Die Grafik auf der Oberfläche wird mittels JOGL erzeugt. Die JOGL-Binaries sind sehr groß, deswegen sind die jar-Dateien und recht groß.
Ich habe hierbei auf die Erweiterbarkeit und auf die Trennung von Model-View-Controller geachtet, was aber wohl an einigen Stellen mehr oder weniger gelungen ist.
Es ist also möglich, weitere Operationen hinzuzufügen. Jede Operation wurde in seiner eigenen Klasse implementiert. Es sind aber bis jetzt nur die Implementiert, die auch für den Contest vorgegeben sind.
Des weiteren gibt es eine zentrale Klasse, die alle relevanten Informationen besitzt und verwaltet.
Diese zentrale Klasse gibt den Renderern die benötigten Informationen und gibt denen bescheid, wann sie Rendern sollen.
Es ist also möglich unterschiedlichste Renderer zu implementieren. In meinem Programm habe ich zwei Entwickelt: Ein OpenGL-Renderer (GUI) und einen SVG-Renderer (SVG Export).
Außerdem können zusätzlich Listener registriert werden, die auf die Änderungen der Status-Werte reagieren. In meinem Fall sind es z.B. die Text-Ausgaben der Werte auf der GUI.
Statusänderungen, die zu einen Fehler führen, wie z.B. das Setzen eines Wertes auf 0, führen zu einer entsprechenden Exception, sodass der Entwickler jeweils auf die unterschiedlichen Exceptions reagieren kann.
Ebenfalls führt das poppen (yeah!) zu einer Exception, wenn der Stack leer ist.
Es gibt eine Demo-Klasse, die ein Fraktal erstellt. Das Fraktal wird über den Button "Demo ausführen" generiert.
Über die SVG-Export-Funktion wird das gezeichnete Bild in ein SVG-Bild gespeichert.
Das Fenster ist auf 800x600 eingestellt, aber es lässt sich beliebig skalieren.
So, viel spaß mit dem Editor. :)
Ich hoffe es läuft alles so weit. Mac OS X kann ich leider nicht testen, da ich kein OS X zur Hand habe.
Wäre schön, wenn noch jemand bescheid sagen könnte, ob es läuft, oder nicht.