MIN-Fakultät
Fachbereich Informatik
Szenenanalyse und Visualisierung (SAV)

Infoseite zu dem Bildverarbeitungspraktikum "Funktionale Programmierung" (Di 8-12) im SoSe 2011

Ablauf des Praktikums:

Ziel des Praktikums ist die Entwicklung verteilter Spiele mit mehreren Spielern. Zu diesem Zweck sollen das Universe und World Paket aus Racket verwendet werden. Zu Entwicklung dieser Spiele sollen mehrere Teilaspekte berücksichtigt werden, wie z.B.:

  • Repräsentation von Zuständen der Welt und des Universums
  • Definition der Kommunikation zwischen den Welten und dem Universum
  • Fähigkeiten der Spieler
  • Interaktion der Spieler untereinander
  • Grafische Modellierung der Spielumgebung

Bei der Wahl des Spieles ist die eigene Kreativität gefragt, sowohl Brett-, als auch Jump-and-Run oder Adventure-Spiele sind nach Rücksprache möglich. Es werden abwechselnd theoretische und praktische Blöcke angeboten, die es erlauben die theoretischen Grundlagen zu hören, um erfolgreich mit der Umsetzung dieser beginnen zu können. Die verwendete Programmiersprache ist Racket, die den komfortablen Editor DrRacket beinhaltet.

Wichtige Termine:

  • 13. April 2011
    Die Bildung der Teams sollte abgeschlossen sein.
  • 20. April 2011
    Die Teams sollten ihr zu verwirklichendes Thema gewählt, sowie die Aufgabenverteilung geklärt haben.
  • 27. April 2011
    Abgabe des Grobentwurfes und des Pflichtenhelftes. Darin sollten folgende Punkte enthalten sein:
    1. Das Team, also alle Mitglieder mit Namen und Matrikelnummern.
    2. Das Thema, bzw. das Spiel mit dem ihr Euch beschäftigen wollt.
    3. Der Leistungsumfang der Software, die Ihr entwickeln möchtet.
    4. Rahmenbedinungen, die erfüllt sein müssen, damit das Programm erfolgreich arbeiten kann.
  • 25. Mai 2011
    Abgabe des Feinentwurfes des Programms. Dieser sollte folgendes umfassen:
    • Die Schnittstellen,
    • die Paketstruktur und
    • die verschiedenen Module der Software.
  • 13. Juli 2011 (letze Sitzung)
    • Präsentation der Software auf dem vorläufigen Stand
  • bis spätestens 15. August 2011!!!
    Endgültiger Praktikumsabschluss
    • Fertige Software liegt vor
    • Abgabe der Entwickler- und Anwender-Handbücher

Materialien:

Subversion

Das Subversion Handout sowie die Präsentation des Termins am 27.4.2011 habe ich nun online gestellt:

Ausserdem gibt es unter Windows das gute Explorer PlugIn Tortoise SVN welches mit SVN verwaltete Verzeichnisse im Explorer hervorhebt und den Umgang erleichtert. Unter Mac OS X 10.6 funktioniert das Äquivalent SCPlugin leider nicht, statt dessen kann aber das im RZ installierte Xcode verwendete werden (Menüeintrag: SCM).

Racket

Ich habe die vorläfige Lösung für die Serialisierung von CLOS-Objekten in Listen und wieder zurück so erweitert, dass die beiden Funktionen object->list und list->object jetzt in Zusammenhang mit dem Schreiben in- und Lesen aus Dateien kombiniert. Die neue Quelldatei steht hier zum Herunterladen zur Verfügung. Ich hoffe, dass die Kommentare allgemein verständlich sind, neu im Gegensatz zur alten Version sind lediglich die Zeilen ab Nr. 52.

Hash-Table Update

Sollen Hash-Tables erstellt werden, die die Schlüssel nur mit equal? vergleichen, so geht das wie in folgendem Beispiel angegeben:

 
> (define h (make-hash-table 'equal))

> (define k (cons "x" "y"))

> (set! (hash-table-get h k) 1)

> (hash-table-get h s)
1

> (hash-table-get h (cons "x" "y"))
1

Hash-Tables zum Speichern von CLOS-Klasseninstanzen sind in swindle/misc bereits enthalten. Versucht bitte nicht die Standard-Hash-Tables aus racket/base zu benutzen. Diese können weder einfach eingebunden werden, noch funktionieren sie korrekt zusammen mit CLOS-Objekten. Anbei ein kleines Beispiel aus der Swindle-Doku:

 
> (define h (make-hash-table))

> (set! (hash-table-get h 'x) 1
        (hash-table-get h 'y) 2
        (hash-table-get h 'z) 3)

> (hash-table-get h 'foo)
    hash-table-get: no value found for key: foo

> (hash-table-get h 'x)
1
 
> (set-hash-table-get! h 'x 5)

> (hash-table-get h 'x)
5

Leonie hat eine schöne Dokumentation des Swindlw-Systems gefunden. Diese ist besonders interessant, zumal wir das CLOS-System aus dem Swindle-Paket benutzen! Die Dokumentation hier angesehen werden.

Leonie hat ein Beispiel einer 3D-Animation bereitgestellt, welches mittels des Universe-Pakets ein animiertes Drahtgittermodell anzeigt.

Ich habe eine vorläfige Lösung für die Serialisierung von CLOS-Objekten in Listen un wieder zurück erstellt. Eine Racket-Demo-Datei, die die beiden Funktionen object->list und list->object aufzeigt habe ich hier zum Herunterladen zur Verfügung gestellt. Ich hoffe, dass die Kommentare allgemein verständlich sind.

Das aktuelle Racket kann man unter http://racket-lang.org herunterladen. Es steht für nahezu jeden Betriebssystem bereit. Auf den Pool Rechnern ist z.Zt Racket 5.0.2 installiert.
Innerhalb der Racket-Umgebung sind für das Praktikum drei Pakete besonders interessant:

Eine gelungene Einführung in das gesamte 2htdp-Paket findet sich unter der Dokumentation des 2htdp-Teachpacks.

Literaturempfehlungen

  • Das E-Book How to design worlds einen Überblick in den Entwurf und die grafische Modellierung von Welten.
  • Das Buch "Making great games" von Michael Thornton Wyman gibt eine Einführung in das, was Spiele von guten Spielen unterscheidet. Es ist mehrfach in unserer Bibliothek vorhanden.

Netzwerk-TicTacToe

Eine Netzwerk-basierte Variante des bekannten TicTacToe-Spiels wurde in der ersten Woche vorgestellt. Die dazugehörigen Dateien können hier heruntergeladen werden: