(+kat) |
(Beispielpflanzen mit Code) |
||
Zeile 18: | Zeile 18: | ||
Die Haddock-Dokumentation ist auf http://entropia.de/~nomeata/L-seed-doc/ | Die Haddock-Dokumentation ist auf http://entropia.de/~nomeata/L-seed-doc/ | ||
== Beispiele == | |||
Hier ein paar Code-Beispiele, und wie sie nach jeweils der gleichen Zeit aussehen. Den Code für diese und weitere Pflanzen findet man auch unter http://git.nomeata.de/?p=L-seed.git;a=tree;f=examples | |||
{| class="wikitable" border="1" | |||
|- | |||
! Code | |||
! Aussehen | |||
|- | |||
| <pre>// This is the trivial plant, which just grows and grows | |||
RULE "Very simple Rule" | |||
GROW BY 1 | |||
</pre> | |||
| [[Datei:L-seed-plant-trivial.png]] | |||
|- | |||
| <pre>RULE "Large enough" | |||
WHEN length < 2 | |||
GROW TO 2 | |||
RULE Forking | |||
WHEN length >= 2 | |||
BRANCH AT 100% ANGLE = -60°, LENGTH = 1 | |||
ANGLE = -30°, LENGTH = 1 | |||
ANGLE = 0°, LENGTH = 1 | |||
ANGLE = 30°, LENGTH = 1 | |||
ANGLE = 60°, LENGTH = 1 | |||
</pre> | |||
| [[Datei:L-seed-plant-fiveFingered.png]] | |||
|- | |||
| <pre>Rule "Start" | |||
WHEN Length <= 0 | |||
BRANCH AT 100% ANGLE = 30°, LENGTH = 0.5 | |||
ANGLE = -30°, LENGTH = 0.5 | |||
RULE "Links" | |||
WHEN Direction > 0 AND Direction < 140° | |||
BRANCH AT 100% ANGLE = 30°, LENGTH = 0.5 | |||
RULE "Zurück" | |||
WHEN Direction >= 140° | |||
BRANCH AT 100% ANGLE = -120°, LENGTH = 0.5 | |||
RULE "Rechts" | |||
WHEN Direction < 0 AND Direction > -140° | |||
BRANCH AT 100% ANGLE = -30°, LENGTH = 0.5 | |||
RULE "Zurück" | |||
WHEN Direction <= -140° | |||
BRANCH AT 100% ANGLE = 120°, LENGTH = 0.5 | |||
</pre> | |||
| [[Datei:L-seed-plant-hopper.png]] | |||
|- | |||
| <pre>Rule "Some height is good" | |||
WHEN length < 1 | |||
GROW TO 1 | |||
Rule "Be fertile" | |||
WHEN length >= 1 | |||
BLOSSOM | |||
</pre> | |||
| [[Datei:L-seed-plant-grass.png]] | |||
|- | |||
| <pre>RULE "Start" | |||
WHEN Length <= 0 | |||
GROW BY 1 | |||
SET TAG = "Root1" | |||
RULE "Story 1" | |||
WHEN TAG = "Root1" | |||
// No Percentage means 100% | |||
BRANCH ANGLE = 70°, LENGTH = 2, Tag = "" | |||
ANGLE = -70°, LENGTH = 2, Tag = "" | |||
ANGLE = 0°, LENGTH = 1, TAG = "Root2" | |||
SET TAG = "" | |||
RULE "Story 2" | |||
WHEN TAG = "Root2" | |||
BRANCH AT 100% ANGLE = 70°, LENGTH = 1.5, Tag = "" | |||
ANGLE = -70°, LENGTH = 1.5, Tag = "" | |||
ANGLE = 0°, LENGTH = 1, TAG = "Root3" | |||
SET TAG = "" | |||
RULE "Story 3" | |||
WHEN TAG = "Root3" | |||
BRANCH AT 100% ANGLE = 70°, LENGTH = 1, Tag = "" | |||
ANGLE = -70°, LENGTH = 1, Tag = "" | |||
ANGLE = 0°, LENGTH = 1, TAG = "Root4" | |||
SET TAG = "" | |||
RULE "Story 4" | |||
WHEN TAG = "Root4" | |||
BRANCH AT 100% ANGLE = 70°, LENGTH = 0.5, Tag = "" | |||
ANGLE = -70°, LENGTH = 0.5, Tag = "" | |||
ANGLE = 0°, LENGTH = 0.5, Tag = "Tip" | |||
SET TAG = "" | |||
RULE "Star" | |||
WHEN TAG = "Tip" | |||
Blossom | |||
</pre> | |||
| [[Datei:L-seed-plant-xmas.png]] | |||
|} | |||
== Status == | == Status == |
Version vom 25. Juni 2009, 22:57 Uhr
Ein lustiges Pflanzenwachsprogrammiervisualisierungsspiel.
Idee
Der Spieler erstellt eine Pflanzenwachstumsbeschreibung in einer für L-seed entworfenen kleinen, regelbasierten Sprache, und läd sie, etwa über ein Web-Interface, auf den Server hoch. Dieser lässt dann die Pflanzen der Spieler in einem gemeinsamen Beet wachsen und um Licht konkurrieren. Die Pflanzen, die am effektivsten wachsen, können sich auch schneller vermehren und das Beet überwuchern. Das ganze soll natürlich per Beamer schön visualisiert werden.
Der Spieler kann auf das Pflanzenwachstum keinen Einfluss mehr nehmen, die Pflanze arbeitet ihren Code, also ihr Genom, stur ab. Allerdings kann für die nächste Generation, wenn die erste Pflanzen Samen hat wachsen lassen, der Code verbessert werden.
Insgesamt soll das Spiel einen chilligen Touch erhalten und auch schön zuzuschauen sein, wenn man nicht am Code feilt.
Eine ausführlichere Einführung ist auf Joachims Blog zu lesen.
Code
Der aktuellen Haskell-Code kann unter http://git.nomeata.de/?p=L-seed.git;a=summary bezogen werden. Die einzigen Abhängigkeiten sind parsec und gtk2hs. Unter Debian/Ubuntu sind das die Pakete libghc6-cairo-dev, libghc6-gtk-dev und libghc6-parsec-dev.
Die Haddock-Dokumentation ist auf http://entropia.de/~nomeata/L-seed-doc/
Beispiele
Hier ein paar Code-Beispiele, und wie sie nach jeweils der gleichen Zeit aussehen. Den Code für diese und weitere Pflanzen findet man auch unter http://git.nomeata.de/?p=L-seed.git;a=tree;f=examples
Status
Implementiert:
- Testprogram mit simpler Graphik, siehe oben.
- Regelanwendung fürs Wachstum
- Schattenberechnung
- Wachstumsgeschwindigkeit abhängig von eingefangener Lichtmenge und Pflanzengröße
- Pflanzenwachstumssprache definieren und einen Parser schreiben
- Fortpflanzung
TODO:
- Web-Interface
- Spielsteuerung (Rundendauer, Punkteverwaltung)
- Schöne Graphik
- Syntax dokumentieren