L-seed

aus dem Wiki des Entropia e.V., CCC Karlsruhe

Ein lustiges Pflanzenwachsprogrammiervisualisierungsspiel.

Aktuelles

L-seed während der GPN8
L-seed später während der GPN8
  • 10:38, 29. Jun. 2009 (CEST): Ein Gesamtergebnis und ein DB-Dump ist auf L-seed/GPN-Ergebnisse zu finden.
  • 21:30, 28. Jun. 2009 (CEST): Das wars, schön wars. Einen laufenden Server gibts nicht, aber der Code ist ja da – falls noch jemand damit spielen will.
  • 18:16, 27. Jun. 2009 (CEST): Neue Kosten-Funktion: Es ist teuer, Zweige weit weg von der Wurzel zu haben! Koeffizienten müssen noch optimiert werden.... Man kann jetzt auch DISTANCE in einer WHEN-Regel verwenden.
  • 16:11, 27. Jun. 2009 (CEST): Das Spiel läuft jetzt 40 Tage, 15s pro Tag.
  • 14:43, 27. Jun. 2009 (CEST): Man kann jetzt auf die Anzeige twittern: Einfach #GPN8 reinschreiben.
  • 13:32, 27. Jun. 2009 (CEST): Es windet! (Aber nur in der Anzeige, keine regeltechnische Auswirkung)
  • 11:58, 27. Jun. 2009 (CEST): Der Schattenwurf wurde weniger heftig gemacht (60% Lichtdurchlass statt 40%)
  • 10:59, 27. Jun. 2009 (CEST): Automatische Screenshots, für die, die nicht hier sind!
  • 01:08, 27. Jun. 2009 (CEST): Morgens und Abends ist das Licht jetzt sehr schwach
  • 00:40, 27. Jun. 2009 (CEST): Anfangswachstumsschub ist jetzt deaktiviert, wenn Blüten blühen.
  • 21:19, 26. Jun. 2009 (CEST): Server und Netzwerk laufen jetzt so langsam. Viel Apaß auf http://lseed.gpn.entropia.de/!
  • 23:31, 26. Jun. 2009 (CEST): Änderung: Pflanzen werden in zufälliger Reihenfolge angeordnet, der aktuelle Punktestand wird eingeblendet.

Idee

L-seed am 23.4.2009

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 https://github.com/nomeata/L-seed bezogen werden. Die 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 https://hackage.haskell.org/package/L-seed

Sollte der Git-Server nicht mehr erreichbar sein, gibt es hier einen Schnappschuss des Codes: Datei:L-seed-0.2.tar.gz. Releases werden auch auf Hackage veröffentlicht.

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

Code Aussehen
// This is the trivial plant, which just grows and grows

RULE "Very simple Rule"
GROW BY 1
L-seed-plant-trivial.png
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
L-seed-plant-fiveFingered.png
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
L-seed-plant-hopper.png
Rule "Some height is good"
WHEN length < 1
GROW TO 1

Rule "Be fertile"
WHEN length >= 1
BLOSSOM
L-seed-plant-grass.png
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
L-seed-plant-xmas.png


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
  • Web-Interface
  • Pflanzen eingeben, bearbeiten, als „aktiv“ markieren
  • Syntaxcheck
  • Pflanzen-Vorschau (renderAsPNG-Binary gibts schon)
  • Spielsteuerung (Rundendauer, Punkteverwaltung)
  • Spielstandsanzeige
  • Wind (nur Anzeige)
  • Nachrichten (aus Datei gelesen) scollend anzeigen
  • ggf. Rauszoomen

TODO (patches accepted!):

  • Schöne Graphik
  • Syntax dokumentieren
  • Verschieden starke Blüten
  • Nachricht laufend aus der Datenbank lesen (und ggf. scrollen)
  • Alte Spieler deaktivieren
  • Scrolling/Panning (implementiert, aber dann abgelehnt)

Videos