Dr. Matthias Grabert Abteilung Angewandte Informationsverarbeitung 18. Dezember 2002
Johannes Mayer Blatt 8


Uni Logo



Objektorientierte Softwareentwicklung mit C++ (WS 2002/2003)


Abgabetermin: 9. Januar 2003

1 Mini-Schach (10 Punkte)

Ein Schachbrett besteht aus $8 \times 8$ Feldern, deren Positionen durch eine Buchstaben-Zahlen-Kombination, wie z.B. a7, c8, e5, h4, etc., angegeben werden:

\includegraphics[width=8cm]{schachbrett}
Unser Mini-Schach bestehe aus lediglich drei Typen von Figuren - Türme, Läufer und Damen - und den beiden Figuren-Farben weiß und schwarz. Türme dürfen horizontal und vertikal beliebig weit ziehen. Bei Läufern gilt dasselbe, jedoch diagonal statt horizontal bzw. vertikal. Damen dürfen horizontal, vertikal und diagonal beliebig weit ziehen. Beim Ziehen mit einer bel. Figur darf natürlich keine andere Figur im Weg stehen. Außerdem darf auf dem Feld, auf das eine Figur zieht, nicht eine Figur mit derselben Farbe stehen. Eine Figur mit der anderen Farbe, die auf dem Zielfeld steht, wird aus dem Spiel ,,geworfen``.

  1. (2 Punkte)
    Modellieren sie Brett und Figuren unseres Mini-Schachs durch ein Klassendiagramm (mit Angabe von has-a- und is-a-Beziehungen). Ihre Modellierung soll das Hinzufügen weiterer Typen von Figuren problemlos ermöglichen.
  2. (6 Punkte)
    Entwickeln Sie - basierend auf Ihrem Design - ein aus mehreren Klassen bestehendes Programm, welches Mini-Schach insofern implementiert, dass im Programm (,,festverdrahtet``) Figuren auf das Brett gesetzt werden und in einer Schleife jeweils ein Zug eingegeben werden kann (z.B. von a3 nach c7), dieser - falls möglich - ausgeführt wird und das veränderte Brett (mit den Figuren) dargestellt wird (solange bis die Schleife abgebrochen wird). Verwenden sie hierbei auch virtuelle Methoden und Polymorphie. Schreiben Sie zur Ausgabe der Figuren eine einzige Methode und verwenden Sie dabei dynamische Casts zur Typprüfung. (Jede Figur könnte z.B. eine Methode besitzen, mit der man überprüfen kann, ob ein Zug auf ein gegebenes Feld möglich ist.)
  3. (2 Punkte)
    Wie könnte in diesem Zusammenhang Mehrfachvererbung sinnvoll eingesetzt werden? Geben Sie ein entsprechendes Klassendiagramm an. Erklären Sie Ihrem Tutor, ob virtuelle Basisklassen hier notwendig sind und was es mit diesen auf sich hat.



Johannes Mayer 2002-12-18