Autor Thema: Covella - Fantasy-Kalender - DSL für beliebige Systeme von Zeitmessung  (Gelesen 14081 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Online 1of3

  • Richtiges Mädchen!
  • Titan
  • *********
  • Proactive Scavenger
  • Beiträge: 19.141
  • Username: 1of3
    • Sea Cucumbers and RPGs
Ich weiß jetzt nicht genau, inwieweit du vom Fach bist...

Ich benutze zum Entwickeln:
Java Development Kit
Scala
SBT - Scala Build Tool
Intellij Idea IDE mit Scala Plugin.

Offline TKarn

  • Experienced
  • ***
  • Beiträge: 230
  • Geschlecht: Männlich
  • Username: TKarn
Naja, so vom Fach bin nicht, aber auch nicht ganz unbedarft.  Bin Steuerungsprogrammierer.
Da wollen wir mal sehen, was passiert!

Online 1of3

  • Richtiges Mädchen!
  • Titan
  • *********
  • Proactive Scavenger
  • Beiträge: 19.141
  • Username: 1of3
    • Sea Cucumbers and RPGs
[1] Normaler heutiger benutzter Kalender
[2] Kalender, die verschiedene Zeitalter und darin unterschiedliche Zeitrechnungen berücksichtigen. z.B. im ersten Zeitalter 8-Tage Wochen, 50-70 Tage Monate), im zweiten Zeitalter 5-Tage Wochen etc.
[3]Lunare römische Kalender
[4]Maya-Kalender
[5]Weltenübergreifender Kalender (wie im oben geposteten Tool https://www.wizards.com/dnd/ec/index.htm) mit unterschiedlich schnell vergehender Zeit
[6]Nichtlinearer Zeitfluss Kalender (für Zeitreisenszenarios mit alternativen Realitäten)
[7]Nichtkonstanter Zeitfluss (Relativistischer Kalender für so etwas wie im Film "Interstellar")

1 Läuft, in diversen Geschmacksrichtungen
2 Läuft so lala. Bessere Implementation in Arbeit.
3 Solange du weißt, wie die aussehen, läuft.
4 Läuft
5 Wenn du mir ne Definition für den Eberron-Kalender lieferst, kein Problem.
6 Das ist wohl ein gänzlich anderer Anwendungsbereich.
7 Grundsätzlich kein Problem. Die Kalender in den Beispielen sind mehrheitlich mit einem Days-Objekt parameterisiert. Du musst nur verschieden lange Days übergeben und das funktioniert. Ggf. wäre noch eine Methode nützlich, die alle Zeiteinheiten in einem Kalender mit einem Präfix versieht, damit solche Kopien voneinander unterscheidbar bleiben.


Das man eine Übersicht des gebastelten Kalenders als JPG, BMP oder PNG exportieren kann um sie sich später auszudrucken, in Kampagnen-Handouts einzufügen oder in ein Wiki zu tun. So z.B.:

Das macht in allgemeiner Form ehrlich gesagt wenig Sinn. Eine zwei dimensionale Struktur ist für unseren Kalender praktisch, weil wir zwei unabhägnige Zyklen haben: Jahre und Wochen. Es kann aber sein, dass du nur einen Zyklus hast oder deutlich mehr. Siehe die Maya oben. Du kannst natürlich alle Daten von bis als Liste ausgeben.

Offline TKarn

  • Experienced
  • ***
  • Beiträge: 230
  • Geschlecht: Männlich
  • Username: TKarn
Hab mir das alles mal installiert, habe aber noch Probleme, den Kalender zum Laufen zu bekommen. Sind noch irgendwelche fehlenden Bibliotheken. Aber ich bin dran.
Da wollen wir mal sehen, was passiert!

Online 1of3

  • Richtiges Mädchen!
  • Titan
  • *********
  • Proactive Scavenger
  • Beiträge: 19.141
  • Username: 1of3
    • Sea Cucumbers and RPGs
Hmmmm. Womöglich musst du noch irgendwelche Dinge bei IntelliJ anmelden? Die IDE muss letztlich wissen, wo die anderen Sachen liegen. - Kannst du über das Menü ein neues "Scala-Projekt mit SBT" erzeugen?

Falls ja, läuft das? Also kannst du eine .scala-Datei erzeugen mit

object MyFirstProgram extends App {
println("Hello World")
}


Offline TKarn

  • Experienced
  • ***
  • Beiträge: 230
  • Geschlecht: Männlich
  • Username: TKarn
Danke für den Tipp. Ich hoffe, ich habe nächste Woche etwas Zeit, mich damit zu beschäftigen.
Da wollen wir mal sehen, was passiert!

Online 1of3

  • Richtiges Mädchen!
  • Titan
  • *********
  • Proactive Scavenger
  • Beiträge: 19.141
  • Username: 1of3
    • Sea Cucumbers and RPGs
So, da das ja nachgefragt wurde, habe ich mir die Daten für die Eberron-Ebenen aus dem Source Code für den Calculator bei Wizards gezogen. Die Monde sind da auch irgendwie kodiert, aber daraus bin ich nicht schlau geworden.

Ich präsentiere also den Eberron-Kalender mit Sonnenjahr und Ebenen.

case class EberronCalendar(days : TimeUnit = CommonDays.days){

  lazy val weeks = 'week of days withNames("Sul","Mol","Zol","Wir","Zor","Far","Sar")

  lazy val months = 'month of (weeks, 4)

  lazy val years = 'year of months withNames(
    "Zarantyr","Olarune","Therendor",
    "Eyre","Dravago","Nymm",
    "Lharvion","Barrakas","Rhaan",
    "Sypheros","Aryth","Vult"
  )


  lazy val solarCalendar = Calendar(years) setTimestampZero 998

  // Name, Orbit, RemainsNotable, StartingPosition

  private val planeData = Vector(
    ("Danvi",134400,33600,50400),
    ("Dolurrh",33600,336,8559),
    ("Fernia",1680,28,1344),
    ("Irian",1008,10,420),
    ("Lamannia",364,7,94),
    ("Mabar",1680,3,422),
    ("Risia",1680,28,505),
    ("Shavarath",12096,336,4032),
    ("Syrania",3360,1,841),
    ("Thelanis",75600,2352,20076),
    ("Xoriat",2352000,336,588168)
  )

  def planeNames = planeData.map(_._1)

  lazy val planesFactory = Satellites.withPhases(("Remote","Waxing"),("Coterminous","Waning"))

  /**
    * The planes orbiting the world of Eberron as a CalendarSystem.
    * Except for Dal Quor, which is always remote, and Kythri which is utterly random.
    */

  lazy val planes : Vector[Calendar] = planeData.map{
    case (name,orbit,remainsNotable,startingPosition) =>
      {
      val phase = if (startingPosition < orbit/2) 1 else 2
      val day = startingPosition % (orbit/2)

      planesFactory.make(name.toLowerCase,orbit,days,remainsNotable) setTimestampZero (0,phase,day)
      }
    }


  lazy val eberronCalendar : Calendar = planes.foldLeft (CalendarSystem(Vector(solarCalendar )))
    { case (sys: Calendar,simple: Calendar) => sys synchronise simple}

}

Zu dem Zweck habe ich gleich eine kleine Fabrik programmiert, die eben solche kreisenden Objekte macht.

Dazu gibts jetzt die Möglichkeit, einem Kalender berechnete Werte hinzuzufügen. Wenn man z.B. Kalenderwochen haben will, die Informationen aus zwei Zyklen brauchen (also Jahreszyklus und Wochenzyklus), oder sonstige Informationen einem Datum hinzufügen will.

Ansonsten diverse Korrekturen in den Beispielen, jetzt im Repository.

Offline Skeeve

  • Hero
  • *****
  • Beiträge: 1.632
  • Geschlecht: Männlich
  • Username: XoxFox
[So, betätige ich mich auch mal als Thread-Nekromant...]

Es hat etwas gedauert diesen Thread hier auf Tanelorn wieder zu finden, aber vor ein paar Tagen hatte ich sofort an diese Diskussion gedacht und mich gefragt ob irgendwer der damals hier Schreibenden zufällig hier (einfach mal draufklicken) involviert ist?
... oft genug sind die Spieler die größten Feinde der Charaktere, da helfen auch keine ausgeglichenen Gegner

Hoher gesellschaftlicher Rang ist etwas, wonach die am meisten streben, die ihn am wenigsten verdienen.
Umgekehrt wird dieser Rang denen aufgedrängt, die ihn nicht wollen, aber am meisten verdienen. [Babylon 5]

Online 1of3

  • Richtiges Mädchen!
  • Titan
  • *********
  • Proactive Scavenger
  • Beiträge: 19.141
  • Username: 1of3
    • Sea Cucumbers and RPGs
Also ich nicht.