MIN-Faculty
Department of Informatics
Scene analysis and visualization (SAV)

Infoseite zu dem Bildverarbeitungspraktikum "Funktionale Programmierung" (Mi 8-12 / 12-16 Uhr) im SoSe 2012

Achtung: Neue VigRacket-Installation auf den iMacs erforderlich

Da auf den iMacs im Poolraum ein Software-Update vorgenommen worden ist, funktioniert die alte Version der Bildverarbeitungsbibliothek leider nicht mehr. Bitte ladet euch die neueste Version der VigRacket-Bibliothek herunter und ersetzt die vorherige Installation unter HOME/Library/Racket/5.2.1/collects/vigracket durch die im Paket enthaltene Version:

  1. Entfernen des Ordners "HOME/Library/Racket"
  2. Kopieren des "vigracket-RZ-iMacs-1.8.0-64bit.zip"-Archivs nach HOME/Libary
  3. Entpacken des Archivs in diesem Ordner durch Doppelklick. Es sollte eine neue Verzeichnisstruktur "HOME/Library/Racket/5.2.1/collects/vigracket" geben, in der nun die aktuelle Version vorhanden ist!
  4. Zum Testen kann die Datei "examples.rkt" geöffnet werden, diese befindet sich im VigRacket-Verzeichnis
  5. Ist die Installation erfolgreich, kann das Archiv vigracket-RZ-iMacs-1.8.0-64bit.zip" gelöscht werden.

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. Außerdem soll der aktuelle Spielstand aus einem Bild der Spielszene erfasst werden können. 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
  • Bildverarbeitungsmethoden zur Erfassung des Spielstandes
  • Kennenlernen von Racket-Erweiterungen am Beispiel der VIGRACKET

Bei der Wahl des Spieles ist die eigene Kreativität gefragt, sowohl Brett-, als auch Karten- oder auch andere 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:

  • 11. April 2012
    Die Bildung der Teams sollte abgeschlossen sein.
  • 18. April 2012
    Die Teams sollten ihr zu verwirklichendes Thema gewählt, sowie die Aufgabenverteilung geklärt haben.
  • 25. April 2012
    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.
  • 6. Juni23. Mai 2012
    Abgabe des Feinentwurfes des Programms. Dieser sollte folgendes umfassen:
    • Die Schnittstellen,
    • die Paketstruktur und
    • die verschiedenen Module der Software.
  • 11. Juli 2012 (letze Sitzung)
    • Präsentation der Software auf dem vorläufigen Stand
  • bis spätestens 15. August 2012!
    Endgültiger Praktikumsabschluss
    • Fertige Software liegt vor
    • Abgabe der Entwickler- und Anwender-Handbücher

Materialien:

Racket

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.2.1 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.

Bildverarbeitung mit Racket: VigRacket

die Bildverarbeitungsanbindung, mit der wir die Aufgaben der Bildverarbeitung innerhalb des Praktikums lösen werden, kann hier für die iMacs im Pool heruntergeladen werden. Die Installation besteht im Entpacken des Verzeichnisses in den Order "~/Library", so dass eine Verzeichnisstruktur "~/Library/Racket/5.2.1/collects/vigracket/" entsteht. Nach der Installation kann man durch Aufruf der enthaltenen Beispiele (Doppelklick auf "examples.rkt") die Funktionalität testen.

VigRacket unter Windows benutzen

Befolgt man folgende Schritte, so lässt sie die VigRacket-Erweiterung auch unter Windows benutzen:

  1. Herunterladen der aktuellen 32bit Version von DrRacket unter http://racket-lang.org.
  2. Installieren der Version in einem Verzeichnis (z.B. C:\Programme (x86)\Racket)
  3. Herunterladen der VigRacket Erweiterung für Windows 32bit.
  4. Enpacken und kopieren des vigracket-Ordners in cas collects-Verzeichnis (z.B. C:\Programme (x86)\Racket\collects)
  5. Hinzufügen des VigRacket-Ordners (z.B. C:\Programme (x86)\Racket\collects\vigracket) zu PATH-Umgebungsvariable:
    1. Rechtsklick auf Arbeitsplatz/Computer, Anklicken von "Einstellungen"
    2. Anklicken von "Erweiterte Systemeinstellungen"
    3. Anklicken von "Umgebungsvariablen..."
    4. Bei Systemvariablen die Variable "Path" bearbeiten.
    5. Ans Ende das Verzeichnis anfügen (z.B. ...;C:\Programme (x86)\Racket\collects\vigracket)

Bildverarbeitungsübungen

Die praktischen Übungseinheiten zur Bildverarbeitung mit Racket der ersten Termine können hier heruntergeladen werden. Diese geben nur eine Anregung, was mit der Bildverarbeitungsbibliotheck VigRacket möglich ist, weitere Beispiele finden sich im Handbuch der VigRacket. Dieses ist im Installationsverzeichnis im Unterordner "doc" zu finden.

Animationen

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

Netzwerk-TicTacToe

Ich habe eine Netzwerk-basierte Variante des bekannten TicTacToe-Spiels programmiert. Die dazugehörigen Dateien können hier heruntergeladen werden:

Fehlerhandling in Racket

Manche Funktionen der VigRacket-Bibliothek werfen Fehler, die nicht fein differenziert werden, und die die Auswertung stoppen. Dies lässt sich zum Beispiel für die load-image Funktion durch die Installation eines anderen Event-Handlers beheben:

(define (safe-load-image file)
        (if (file-exists? file)
            (with-handlers ((exn:fail? (lambda (e) #f)))
              (load-image file))
            "not existent"))

Somit wird der Fehler zu einem FALSE, außer die Datei existiert nicht, was zu einem Ergebnistyp String führt.

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.