Sonntag, 23. Juni 2013

...and a sketch


We have a plan...

Und schnell noch (wo doch der Montag naht) die Ergebnisse der DNCTS-Zentralratskomitteeplanungssitzung ins Blog kopiert:

Im Folgenden werden bei sämtlichen geschlechtsspezifischen Vokabeln die maskuline Form verwendet. Hier sei erwähnt, dass die Nichtnennung der femininen und geschlechtsneutralen Formen der Vokabeln eine Teilname von femininen Mitbürgerinnen unt geschlechtsneutralen Angehörigen nicht ausschließt. Vielmehr soll hierdurch die oben genannten Bevölkerungschichten zur Teilname motiviert werden.


  • Spielregeln
    • Allgemeine Anforderungen
      • 1 - n Spieler
      • Auf dem Spielfeld liegen mindestens so viele Knoten wie Spieler herum
      • Knoten können verschiedene Formen haben:
        • Punkte:: Knoten kann aufgenommen werden
        • Quadrat: Knoten kann nicht aufgenommen werden
      • Die Spieler können diese Knoten aufnehmen und diese mit sich herum tragen
      • Die Knoten sind mit 0 - m Knoten durch (verschieden) farbige Kanten verbunden
      • Ziel ist es die Knoten so zu verschieben, dass sich die Kanten nicht mehr schneiden. Dabei müssen folgende Bedingungen gelten:
        • Gleichfarbige Kanten dürfen sich nicht schneiden
        • Verschiedenfarbige Kanten dürfen sich schneiden
      • Falls Knoten nicht erreichbar sind:
        • Einzelne Knoten verschieben
        • Spielfeld verschieben
        • Graph neu generieren
      • Spielfeldgröße muss iterativ erprobt werden
    • Welche Pre-Conditions sind für ein Spiel erforderlich?
      • Jeder Spieler braucht eine Mindestgenauigkeit bei GPS
      • Jeder Spieler kann die Position der anderen Spieler sehen
    • Wann endet ein Spiel?
      • Wenn der Graph gelöst wurde
      • Wenn der letzte Spieler das Spiel verlässt
    • Wann wurde ein Spiel gewonnen/verloren?
      • Graph wurde gelöst = Spiel gewonnen
      • Spiel kann (erstmal) nicht verloren werden
    • Wurde ein Spiel gewonnen steigt der Schwierigkeitsgrad, ein neues Spiel kann zum späteren Zeitpunkt an diesem Schwierigkeitsgrad gestartet werden
  • Optik
    • Format: hochkant
    • Spiel
      • Doodle-Style
      • Spielfeld:
        • Hintergrund: kariertes Papier
        • Spieler:
          • fetter Kreis: lokaler Spieler
          • dünner Kreis: alle anderen Spieler
        • Knoten:
          • Punkte = beweglich
          • Quadrate = unbeweglich
        • Kanten:
          • normal: verschiedene Farben
          • colorblind: verschiedene Muster (z.B. gestrichelt/gepunktet)
  • Interfaces:
    • Hauptmenü
      • -> Spiel erstellen
      • -> Spiel beitreten
      • -> Listige Statistiken (lokal)
      • -> Optionen
    • Spiel erstellen
      • Spielnamen festlegen
      • Schwierigkeit auswählen
    • Lobby (Host)   // überflüssig
      • Spieler kicken
      • Spiel starten
      • Spiel abbrechen
      • Auswahl: Spieler/Observer
    • Lobby (Guest)
      • Spiel starten -> Spiel (für Observer deaktiviert)
      • leaven -> Hauptmenü
      • Auswahl: Spieler/Observer
    • Optionen
      • Spielernamen festlegen (listiger default-name)
      • colorblind mode
      • sounds (an/aus)
      • ninja mode (aus/aus)
      • freefall mode (aus/aus)
    • Spiel
      • zeigt:
        • Spieler
        • Knoten
        • Kanten
    • Spielmenü
      • (listet Spieler auf)
      • Spiel verlassen -> Hauptmenü
      • zurück zum Spiel -> Spiel
    • Listige Statistiken (lokal)
      • #bewegte Knoten
      • zurückgelegte Strecke
      • gespielte Spiele
      • gewonnene Spiele
      • zurück -> Hauptmenü
    • Listige Statistiken (Spiel)
      • zeigt Achivements
      • -> zur Lobby
  • Achivements
    • Forrest Gump (am weitesten gelaufen)
    • Relaxo (am wenigsten gelaufen)
    • Traveling Salesman (alle Knoten bewegt bei geringster Strecke)
    • Graphmatratze (am häufigsten Knoten aufgehoben)
    • Eiserne Jungfer (kein Knoten aufgehoben)
    • träger Träger (am seltensten Knoten aufgehoben)
    • Blitzmerker (erster, der berechnet hat, das das Spiel beendet ist)
    • ...more to come
  • Akustik
    • Sounds beim Knoten aufnehmen/ablegen
  • Level
    • steigender Schwierigkeitsgrad bei konstanter/wechselnder Spielerzahl
  • Evtl. Punkte
    • keine Punkte, dafür Statistiken und Achivements
  • Evtl. Observer (für Präsentation)
    • ja, siehe oben



  • Datenstrukturen definieren (Damit z.B. Graphgeneration parallel zum Gameplay implementiert werden kann)
    • Spiel
      • Schwierigkeitsgrad
      • Name
    • Spielfeld
      • top
      • left
      • bottom
      • right
    • Graph
      • Knoten
        • ID
        • aktuelle geo Position
        • Träger
        • tragbar
      • Kanten
        • Knoten A, Knoten B
        • Farbe
    • Spieler
      • Name
      • aktuelle geo Position
      • getragener Knoten
    • lokale Statistiken
      • Strecke
      • wie oft Knoten bewegt
      • wieviele unterschiedliche Knoten bewegt
  • Klassen:
    • Game
      • Filds
        • Graph
        • Player[]
        • PlayerStatistics localStats
    • GameLogic
      • Fields
        • Graph
        • Player //local
      • Methods
        • GameLogic(Player localPlayer)
        • void update(Game g)
        • Vertex[] getReachableVertices()
    • HostGameLogic (extends GameLogic)
      • extends update() with hosty stuff
    • Player   
      • Fields
        • String name
        • GeoLocation currentPosition, previousPosition
        • Vertex carriedVertex
        • boolean observer
    • Graph
      • Fields
        • Vertex[]
        • Edges[]
    • Vertex
      • Fields
        • int id
        • GeoLocation
        • boolean pickable, picked
    • Edge
      • Fields
        • Vertex a, b
        • Appearence -insert name here-
      • Enums
        • Appearence
          • toColor()
          • toPattern()
    • PlayerStatistics
      • Fields
        • GeoPosition[]
        • int numberOfVerticesPicked
        • int[] idsVerticesPicked
      • Methods
        • newPosition(GeoPosition)
        • newVertexPicked(int id)
        • getPath()
        • getOverallDistance()
        • getNumberOfVerticesPicked()
        • getNumberOfDifferentVerticesPicked()
    • Connection
      • Fields
        • String serverAdress
      • Methods
        • void postPosition(String player_id, GeoPosition geo_position)
        • ServerGameState getCurrentGameState(String lobby_id)
        • void postGameFinished(String lobby_id)
        • ServerGameStatistics getGameStatistics(String lobby_id)
        • void postPlayerStatistics(ServerPlayerStatistics player_statistics, String player_id)
        • ServerGame getGame(String lobby_id)
        • String postNewLobby(String name)
        • String postNewPlayer(String name)
        • void postJoinLobby(String lobby_id, String player_id)
        • String[] getAvailableLobbies(GeoPosition geoPosition)
        • ServerGame postNewGame(String lobby_id, Graph graph)
        • void postLeaveLobby(String lobby_id, String player_id)
    • ReceivedGame
      • Fields
        • GeoPositions playerPositions
        • Graph
    • GameStatistics




  • Gameplay:
    • genauer Ablauf von App starten bis Spiel spielen:
      • Hauptmenü
      • Server starten
      • Server anschließen
      • SinglePlayer
      • Lobby
      • Settings
        • colorblind mode
    • Wann können Spieler joinen?

    • Wann können sie leaven?
    • Was passiert, wenn die Verbindung abbricht?
        • Knoten wird gedropt
        • Spiel wird evtl. beendet
    • nicht Rundenbasiert



  • Aufgaben:
    • Graphics (Jan)
    • UI (?)
    • Graphgeneration (Simon)
    • Netzwerkkommunikation (Manuel)
    • Server (Lucas)
    • Gameplay (Florian & TOBIAS)
      • Architektur
      • Game, Player, Logic