Lehr- und Forschungseinheit für Theoretische Informatik,
Institut für Informatik
der Ludwig-Maximilians-Universität München
Programmierpraktikum im Wintersemester 2004/05 (Grundstudium)
- Es gibt nun endlich alle Partien, die für den Wettbewerb der automatischen Spieler
gespielt wurden. Dabei werden auch noch die anderen
Preisträger öffentlich gelobt. Und die Sourcen von Epsilon
sind freigelegt (liegen neben dem Lob). Übrigens habe ich noch
die Codefreigabe von 7 Gruppen (Wurscht, Gerch, Team2000, 20,
OlympicCodes, Dell4never und Tetasenopecho). Wäre natürlich gut, wenn
diese Repositories so aufgeräumt wären, daß Dritte sich an der
Sache erfreuen können. Eine Mail, daß dies der Fall ist, wäre
mir lieb. Gruppe 23 hatte eine
Codefreigabe erteilt, die ich aber übersehen hatte. Daher ist
auch
deren Code verfügbar.
- Die Scheine und Urkunden (für die Gruppen 23, dell4never, epsilon, und Sosuwayi) können ab Montag, den 28.2.05,
im Sekretariat der LFE Theoretische Informatik bei Frau Roden, Zimmer Z1.05 in der Oettingenstr. 67, abgeholt werden. Das
Sekretariat ist montags bis donnerstags jeweils zwischen 9:00 Uhr und 14:00 Uhr besetzt.
- Noch zwei Hinweise zum automatischen Spieler: Dieser soll sich automatisch beim Server mit dem
jeweiligen Gruppennamen als Spielernamen anmelden. Ausserdem soll er auf keinen Fall Eingaben
irgendeiner Form, insbesondere grafischer, verlangen.
- Ein typischer Aufruf des Wettbewerbclients wäre java
GameClient --wettbewerb localhost:1099, d.h. Host und
Port in diesem Format müssen richtig verstanden werden.
- Der Testserver befindet sich in dem Verzeichnis, in dem alle
Testspiele liegen, Unterverzeichnis DER_Server
- Die Liste mit den Terminen für die Endabnahme liegt vor.
- mögliche Kompatibilitätsprobleme:
- Wiedergabe von Spielverläufen, die vom fremden Server
geliefert werden (klappt es mit den eingelochten
Würmern?)
- Würmer der Länge 0 in Varianten werden von manchen Gruppen nicht
erlaubt, aber bei anderen systematisch erzeugt. War das nötig?
- Im Plenum diskutiert: Verschiedene Spiegelungen und Drehungen des
Spielbretts, die ausdrücklich erlaubt waren, führen zu
häßlicher Darstellung. Noch schlimmer: Wenn ein Brett
nicht in einem Rechteck liegt, werden die überstehenden
Dreiecke abgeschnitten. (Es war nur gewünscht worden, daß der
Editor vorzugsweise Rechtecke produzieren kann, indem
passender Rand vorgeschlagen wird, der dann nicht zur
Anzeige kommt.)
In diesem Fall bitte auch mit
Varianten der "Abschneider" arbeiten. Unsere
Wettbewerbsbretter werden quadratisch sein (und übrigens
eher ausgetüftelt als groß) und so optisch
niemanden benachteiligen. Die "Abschneider" sollten
zumindest ihren Code überprüfen, ob er wirklich nicht rasch
modifiziert werden könnte.
- Hier etwas, was nicht zum Praktikum gehört, aber doch
Praktikumsteilnehmer angehen könnte:
Klausur "Informatik I".
Studierende im Studiengang Informatik (Diplom),
die nicht zu den Übungen zu "Informatik I" angemeldet sind,
aber an der Klausur im WS 2004/05 teilnehmen wollen,
müssen sich bis spätestens 30. Januar 2005
für die Klausur anmelden. Anmeldeformular in der
WWW-Seite "Informatik I"
- Leider sind hier noch ein paar Hinweise in letzter Minute, um die
Kompatibilität der Implementierungen zu steigern (14.1., dies
gibt es auch als eigene Datei):
- In der Klasse Spiel gibt es einen Array von Spielernamen. Es
ist sicher am sinnvollsten, seine Länge genau auf die für
diese Spielvariante festgelegte Spielerzahl zu
setzen. Noch nicht zugeordnete Spielernamen werden am
besten durch null repräsentiert. Bei Abmeldungen werden die
Indizes der anderen Spieler sonst geändert.
- Es hat im Informatikerforum eine Diskussion gegeben, wie schon
eingelochte Würmer behandelt werden sollen. Dazu gäbe es
eine Reihe von sinnvollen Lösungen. Nicht sinnvoll wäre
es, einen Wurm aus dem Array zu löschen, da sich dann die
Indizes der anderen Würmer ändern. Viele sinnvolle
Lösungen wurden diskutiert. Eine davon ist, negative
Koordinaten zu vergeben (das "Wurmparadies"). Drei unserer
Gruppenbetreuer haben sich hier in der Diskussion
engagiert und mit unserem Wissen diese Lösung als
Vorzugslösung deklariert. Daher wären wir besonders froh,
wenn Sie diese Lösung auch umsetzen würden. Und zugunsten
der Kompatibilität raten wir Ihnen an, hier möglichst
tolerant zu sein. Sind Wurmkoordinaten außerhalb des
Spielfelds, handelt es sich wohl um einen Wurm im
Paradies/zuhause.
- Die Methode updateSpiel in ClientKommunikator wird auch verwendet, um
mitzuteilen, daß ein Spieler zu einem der Spiele
hinzugekommen ist, über das nicht bloß die Mitspieler zu
wissen brauchen (also entweder noch nicht voll gewesen
oder beobachtbar).
- In der Spezifikation Version 1.1 stand:
Beginn
------
Hat sich die geforderte Anzahl von Spielern angemeldet, so
erhält jeder Spieler eine Nachricht darüber, dass die Partie
in $n$ Sekunden startet, wobei $n$ gleich dem Zeitlimit pro Zug
für diese Partie ist. Nach $n$ Sekunden ist Spieler Nr. 0 an
der Reihe.
Dies ist problematisch, wenn n sehr groß ist (z.B. sinnvoll bei einem sehr
raffinierten aber kleinen Spielbrett). Wir bitten Sie nun, anstatt n
Konstanten zu verwenden, die 10 Sekunden Wartezeit für das
interaktive Spiel und eine halbe Sekunde im
Wettbewerbsmodus vorschreiben.
- Das Ergebnis der Auslosung ("Welche Gruppe testet welche Gruppe?") findet sich hier.
- 10.1.05: Der Termin für die Verfügbarkeit einer testbaren Version wurde vom
12.1. auf Montag, 17.1. 12:00 Uhr verlegt, damit alle Gruppen
noch ihren Betreuer treffen können und dann eventuell noch das
Wochenende zu Reparaturen zur Verfügung haben. Zu dieser Zeit
muß der Gruppenbetreuer eine Email erhalten haben mit
Versionsnummer (im SVN-Repository) der zu testenden
Implementierung und einer Anleitung (entweder bloßer Text oder
HTML) zum Erzeugen von JARs für Bytecode von Client und Server
aus der aus dem SVN exportierten Version, die der Betreuer mit
einem Aufwand von wenigen Minuten im CIP-Pool der Informatik
befolgen kann (also eine klare Beschreibung, was kompiliert werden
muß oder auch passende, hinreichend verständlich abgefaßte
Skripten).
Weiterhin muß es eine Anleitung (purer Text oder HTML) für
die Benutzer geben, also für die prüfende Gruppe.
Die Prüfer erhalten dann baldmöglichst Zugriff auf die
Information und müssen bis Montag, 24.1. 12:00 Uhr einen
brauchbaren Prüfbericht abgeben.
- Das Interface ClientSpielEinleitungsKommunikator hat eine weitere Methode
zum Abbruch eines Spiels während der Einleitungsphase bekommen.
- Aufgrund einer Luftbuchung durch die Hörsaalvergabe der LMU steht uns
der Hörsaal E04 in der Schellingstr. für den Rest des Semesters leider
nicht mehr zur Verfügung. Generell findet das Plenum des Programmierpraktikums
daher ab sofort im Raum 209 (kleine Aula) im Hauptgebäude, 14 Uhr c.t.
statt. An zwei Terminen ist jedoch auch dieser Hörsaal belegt, weswegen das
Plenum diese Woche und einmal im Januar in folgende Hörsäle ausweicht:
15.12.04 E52, Theresienstr. 39, 14 Uhr c.t. und
19.01.05 Raum 355, Hauptgebäude, 16 Uhr c.t..
- 8.12.04: Von 20:45 Uhr bis 21:45 Uhr war eine fehlerhafte Version von
spiel.SpielVariante.java im Netz. Die jetzige Version ist wieder
verwendbar. Allerdings werden bei der Erzeugung einer SpielVariante aus einem
SpielVarianten-Objekt, die zugrundeliegenden Arrays nicht kopiert.
Ein Client, der das SpielVarianten-Objekt nochmals verwenden möchte, muss
dies evtl. selbst kopieren.
- 8.12.04: Die Spezifikation ist nochmals überarbeitet worden und
ausführlich erläutert, siehe unten.
- 30.11.04: Die Version 1.3 der Spezifikation
klärt die Frage nach der zufälligen Erzeugung von Spielbrettern.
- 24.11.04: Die neue Aufgabenstellung ist: Implementieren des Spiels gemäß
Spezifikation unter Verwendung ausschließlich der vorgegebenen
Klassen und Interfaces zur Kommunikation zwischen Server und
Client.
Hinweise zur Verbesserung der Vorgaben werden weiterhin gerne und
dankend entgegengenommen.
Vorerst geben wir Ihnen keine Einzelschritte zur Bewältigung der
Aufgabe vor. Das Plenum und die Gruppentermine werden Ihnen
hier aber weitere Hilfestellungen geben. Bis Weihnachten haben
Sie noch gut 4 Wochen, in denen Sie die Aufgabe schaffen
sollen. Zur Not können Sie in den Weihnachtsferien noch
kleinere Probleme beheben. Sie dürfen auch gerne Ihre
Implementierung weiter optimieren. Die Weihnachtsferien sollen
aber im Regelfall zu Ihrer freien Verfügung bleiben. Sofort
danach werden die wechselweisen Tests und die Implementierung
automatischer Spieler zu machen sein.
Alle Praktikumsplätze sind bereits belegt. Eine Anmeldung ist daher leider nicht mehr möglich.
Die Teilnehmerzahl ist beschränkt. Daher ist eine Voranmeldung über
diese Vorlesungshomepage zwingend erforderlich bis zum
15. September 2004. Gehen mehr Anmeldungen ein als Plätze
vorhanden sind, so wird nach Semesterzahl und Vorkenntnissen
entschieden. Details und ein Anmeldeformular finden Sie oben.
Allgemeines wöchentliches Treffen: Mittwoch 14-18, Schellingstraße 3,
Hörsaal E04. Dazu wöchentliche einstündige Besprechung mit dem Gruppenleiter.
zurück zum
Inhaltsverzeichnis dieser Seite
In kleinen Gruppen wird eine umfangreichere Programmieraufgabe
in der Programmiersprache Java (Version 1.5) realisiert.
Behandelter Stoff:
- Programmieren mit Threads
- Programmieren mit dem Java-API
- Einfache Grafik-Programmierung
- Objektorientierter Entwurf
- Einführung in die Client-Server-Programmierung
- Implementieren von eigenen einfachen Protokollen
- Einführung in RMI
- Verwendung von Software-Management-Tools (z. B. CVS)
Hörerkreis: Studenten im Grundstudium der Informatik im 3. Semester
Benötigte Vorkenntnisse: Informatik I+II, entsprechende Java-Kenntnisse
- 20.10.04: Organisatorisches, SVN, Java 1.5
- 27.10.04: RMI (Bemerkung:
die Klasse Teilnehmer wurde nun doch nicht
vorgegeben, da sie keinen Einfluß auf die Kommunikation hat);
GUI (aus Info II)
- 3.11.04: keine Folien. Die neue Aufgabe (sollte bis zum Buß- und
Bettag - dem 17.11. - fertig sein) wurde ausführlich
beschrieben. Stichwort Model-View-Trennung. Die Klassen aus
dem package spiel sollen verwendet werden, um in einem
package util einen Spielbrett-Editor zu schreiben,
der Objekte der Klasse Spielvarianten erzeugt und im Filesystem
abspeichern kann. Das Spielbrett muß wabenförmige Felder
haben, die gemäß der Richtungsbeschreibungen angeordnet
sind. Durch Anklicken werden Loch, Hindernisse, Rand und
Würmer festgelegt (für 1 bis 5 Spieler jeweils eine
Würmeraufstellung). Bezüglich Komfort haben Sie freie Hand,
es muß aber eine sinnvoll zu bedienende grafische
Oberfläche geben, die eine Anschauung vom späteren Spielbrett gewährt.
- 17.11.04: Spezifikation I
- 24.11.04: Threads
- 15.12.04: Spiele
- 22.12.04: Graphalgorithmen, Heuristiken
- 12.01.05: Test
- 19.01.05: keine Folien, aber Hinweise zum Testen
- 26.01.05: Endabnahme und Wettbewerb
- Die Ausführungen vom
20.10. zu Java 1.5 als JAR (ca. 50kB)
- Material zur GUI_Programmierung: labyrinth.jar
(Achtung: Dateien werden bei Extraktion nicht in ein
Unterverzeichnis gesteckt, wegen Umlauten evtl. javac
-encoding ISO-8859-1 benutzen.)
- Die Interfaces Server.java und
Client.java für die Hausaufgabe
am 27.10.04.
- Das Beispiel für RMI zur Pi-Berechnung: Compute.jar
(enthält auch eine Datei README.txt)
- Eine Gesamtübersicht über
das Spiel (Stand 2.11.)
- das Verzeichnis mit den Vorgaben im package
spiel (abgelöst von den Vorgaben am 24.11.), Beispiele zur Verwendung
von enum und der neuen for-Schleife
(Nachtrag vom 8.11.04),
Beispiel zur
Abspeicherung von Objekten
- die neue Implementierung von
ComputeEngine mit Beschreibung
- Die Vorgaben für das interaktive Spiel
(24.11.). vorgaben.jar in
diesem Verzeichnis enthält exakt dieselben Daten und entpackt
in drei Unterverzeichnisse spiel, server und
client. Bitten benutzen Sie diese Unterverzeichnisse
nicht für andere dauerhafte Zwecke und ändern Sie deren Inhalt nur für
Testzwecke. Gute Namen für Ihre eigenen Implementierungspakete
wären clientimp und serverimp. Beachten Sie,
daß Sie später testen müssen, ob ihr Client mit einem Server
einer anderen Gruppe arbeiten kann. Dabei darf kein Code
ausgetauscht werden, der nicht von uns vorgegeben ist.
- Die Spezifikation (zuletzt geändert am
30.11)
- Zur Illustration der gedachten Abläufe einige
Sequenz-Diagramme. Achtung: Sie repräsentieren nicht
ganz die Fassung der Interfaces vom 24.11.!!
- Die Testklasse AbspeichernDemo,
die belegt, daß nun die XMLisierung von Objekten der Klasse
SpielVarianten ohne weiteres Zutun funktioniert.
- Die Demonstration (1.12.) von java.awt.Robot: RobotTest.java
(mit dem Umschalten auf eine andere Konsole unter Linux) und
RobotTest2.java mit einstellbar vielen Sternen auf dem Bildschirm. Empfehlung: Verwenden Sie programmgesteuerte Tests für Ihr Projekt (z.B. auch Simulatoren für massiven Chat oder Andrang bei der Anmeldung)
- eine Übersicht über das gesamte
Praktikum mit Zeitplan (1.12.)
-
Code-Bruchstück, das in die
main-Methode des Chat-Servers eingebracht werden
kann, um alle TCP/IP-Vorgänge in eine Log-Datei zu schreiben
(geschrieben wird hier in die Datei
chatLog.xml). Eine typische entstehende Logdatei und
Wege, solche Dateien unabhängig von Java zu verarbeiten (auch
die abgespeicherten Objekte der Klasse
SpielVarianten) befinden sich hier (2.12.) Ein Tipp:
XML-Dateien lassen sich recht gut strukturiert unter Linux mit dem
kxmleditor betrachten.
- ausführliche Erläuterung zu den Interfaces
in Bezug auf die Spezifikation (8.12.)
- Vorgaben für das interaktive Spiel (inkl. Javadoc)
(8.12.). vorgaben.jar in
diesem Verzeichnis enthält bis auf die Javadoc-Dateien
(erzeugbar mittels
javadoc -d javadoc -encoding ISO8859-1 -version */*.java) exakt
dieselben Daten und entpackt
in drei Unterverzeichnisse spiel, server und
client.
- eine aktuelle Übersicht über das gesamte
Praktikum mit Zeitplan (10.1.)
- Zu den Tests (Username:
progprakt); Zuweisung der
Testgruppen. Wenn Sie eine andere Gruppe als die Ihnen
zugewiesene Gruppe aus Interesse zusätzlich testen, dann geben
Sie bitte ein Feedback an die Mailingliste dieser Gruppe! Bitte
beginnen Sie mit den Tests so schnell wie möglich, damit
eventuelle massive Probleme noch geklärt werden können,
z.B. auch im Plenum; zur Erinnerung :19.01.05 Raum 355, Hauptgebäude, 16 Uhr c.t.
- Die Gruppenauslosung für
die Vorrunde.
- der Wettbewerb und die Preisträger nebst Source-Code
- Sun's RMI pages,
http://java.sun.com/j2se/1.5.0/docs/guide/rmi/
- Java 1.5 API,
http://java.sun.com/j2se/1.5.0/docs/api/
- Sun's RMI tutorial,
http://java.sun.com/docs/books/tutorial/rmi/
- T. H. Cormen, C. E. Leiserson, R. L. Rivest, Introduction to Algorithms, MIT Press, McGraw-Hill, ISBN 0-262-03141-8
- Z. Michalewicz, D. B. Fogel, How to Solve It: Modern Heuristics, 3. Auflage, Springer-Verlag, ISBN 3-540-66061-5
zurück zum
Inhaltsverzeichnis dieser Seite
zurück zum
Inhaltsverzeichnis dieser Seite
Martin
Lange, Ralph Matthes
Last modified: Tue Apr 12 18:54:45 CEST 2005