diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog2/Prakt5/Aufg2 | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Bachelor/Prog2/Prakt5/Aufg2')
| -rw-r--r-- | Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm b/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm new file mode 100644 index 0000000..691d811 --- /dev/null +++ b/Bachelor/Prog2/Prakt5/Aufg2/uebklaus.htm @@ -0,0 +1,209 @@ +<!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en"> +<html><head> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> + <meta name="Author" content="Hans-Peter Weber"> + <meta name="GENERATOR" content="Microsoft FrontPage 4.0"><title>Praktikum 5.2</title><!-- saved from url=(0079)http://www.fbi.fh-darmstadt.de/~erbs/Lehrveranstaltungen/Pg2KoSI/Pr6/index.html --></head> + +<body> + +<table border="1" width="100%"> +<tbody><tr> +<td bgcolor="#efefde" width="25%">FH Darmstadt +<br>FB Informatik +<p>Prof.Dr.H.P.Weber</p></td> + +<td> +<center><font size="+3">Programmieren II</font> +<br><font size="+3">Übungsklausur</font></center> +</td> + +<td bgcolor="#efefde" width="25%"> +<center> +<p><font size="6"> </font><font size="5">Juni 2005</font></p> +</center> +</td> +</tr> +</tbody></table> + +<table border="1" cols="3" height="60" width="100%"> +<tbody><tr> +<td width="50%">Name:</td> + +<td width="30%">MatNr.:</td> + +<td width="20%">USER:</td> +</tr> +</tbody></table> + +<table> +<tbody><tr valign="top"> +<td>Wesentliches Element vieler rundenbasierter Strategiespiele ist das Konzept der 'Stadt' +(Town): Vom +Spieler angelegte Objekte vom Typ Town sind für die Produktion sowohl von +Einheiten (wird hier nicht weiter betrachtet) als auch von Ressourcen wie Geld, Forschung, Luxusgüter +(darum soll es im folgenden gehen) zuständig. <br> + </td> +</tr> +</tbody></table> + +<table bgcolor="#efefde" width="100%"> +<tbody><tr> +<td>Anforderungen für die Noten ausreichend und befriedigend:</td> +</tr> +</tbody></table> + +<p>Realisieren Sie die Klasse <tt><b>Town</b></tt> zusammen mit einem Anwendungsprogramm zum +Testen. Hierbei soll folgendes gelten:</p> +<ul> +<li> +Attribute von <tt><b>Town</b></tt>-Objekten sind <tt><b>name</b></tt> (Name der Stadt), <tt><b>size</b></tt> (Größe der Stadt), +<tt><b>money</b></tt> (Geldmenge, die jede Runde produziert wird), <tt><b>research</b></tt> +(Forschungsergebnisse, die jede Runde produziert werden), <tt><b>luxuryGoods</b></tt> +(Luxusgüter, die jede Runde produziert werden). <tt><b>name</b></tt> ist vom Typ <tt><b>string</b></tt> und wird +vom Konstruktor aus dem Anwendungsprogramm übernommen, alle anderen Attribute +sind vom Typ <tt><b>int</b></tt> und werden bei der Erzeugung einer Stadt mit dem Wert 1 +initialisiert.</li> +<li> +Die Methode <tt><b>grow</b></tt> erhöht alle Attribute eines <tt><b>Town</b></tt>-Objektes (außer <tt><b>name</b></tt>) um den +Wert 1.</li> +<li> +Der überladene <tt><b>operator<<</b></tt> gibt als erstes den Namen der Stadt und dann die aktuellen +Werte aller anderen Attribute in einer geeigneten Formatierung aus.</li> +<li> +Das Anwendungsprogramm soll dem Benutzer ein Menü mit den vier Alternativen</li> +<ul> +<li> +Neue Stadt +</li> +<li> +Nächste Runde +</li> +<li> +Alle Städte anzeigen +</li> +<li> +Spiel beenden</li> +</ul> +anbieten. <br> +<ul> +<li> +Wenn der Benutzer 'Neue Stadt' auswählt, soll er nach einem Namen gefragt werden +und, nachdem dieser eingelesen wurde, ein <tt><b>Town-Objekt</b></tt> mit diesem Namen erzeugt werden. Dieses Objekt soll in eine +verkettete Liste <tt><b>allTowns</b></tt> eingefügt werden. +</li> +<li> +Wenn der Benutzer 'Nächste Runde' auswählt, soll ein Rundenzähler inkrementiert +werden. Alle drei Runden wird die <tt><b>grow</b></tt>-Methode für alle Städte in der Liste +aufgerufen. +</li> +<li> +Wenn der Benutzer 'Alle Städte anzeigen' auswählt, sollen alle +Städte in der Liste <b>in alphabetischer Reihenfolge</b> (Sortierung nach +ASCII-Code reicht aus) der Namen der Städte ausgegeben werden.</li> +</ul> + +<li>Hinweis: Es ist erlaubt und sinnvoll, für die verkettete Liste <tt><b>std::list</b></tt> aus +der STL zu benutzen.</li> +</ul> + +<table bgcolor="#efefde" width="100%"> +<tbody><tr> +<td>Anforderungen für die Note gut:</td> +</tr> +</tbody></table> + +<p>Die Leistungsfähigkeit eines <tt><b>Town</b></tt>-Objektes wird neben seiner Größe vor allem +von den in der Stadt vorhandenen Gebäuden unterschiedlicher Art bestimmt. +Realisieren Sie eine einfache Vererbungshierarchie für die Gebäude, die eine +Stadt haben kann. Hierbei gilt folgendes:</p> + +<ul> +<li> +Basisklasse ist die abstrakte Klasse <tt><b>Building</b></tt>. Sie enthält die rein virtuelle +Methode <tt><b>improveTown</b></tt>, über die die Ressourcenproduktion der Stadt +durch Gebäude verbessert werden kann. Außerdem enthält sie als Attribut eine +Referenz auf <tt><b>Town</b></tt>, die vom Konstruktor auf diejenige Stadt gesetzt wird, zu der +das jeweilige Gebäude gehört.</li> +<li> +Von <tt><b>Building</b></tt> abgeleitet sind die Klassen <tt><b>MoneyBuilding</b></tt> (mit dem <tt><b>int</b></tt>-Attribut +<tt><b>moneyAdder</b></tt>) und <tt><b>ResearchBuilding</b></tt> (mit dem <b> <tt> +double</tt></b>-Attribut <tt><b>researchFactor</b></tt>).</li> +<li> +Von <tt><b>MoneyBuilding</b></tt> abgeleitet sind die Klassen <tt><b>Marketplace</b></tt> und <tt><b>Bank</b></tt>. Bei der +Erzeugung eines <tt><b>Marketplace</b></tt>-Objekts wird sein <tt><b>moneyAdder</b></tt> +auf den Wert 5 +gesetzt, bei der Erzeugung eines <tt><b>Bank</b></tt>-Objekts wird sein <tt><b>moneyAdder</b></tt> auf den Wert +10 gesetzt.</li> +<li> +Von <tt><b>ResearchBuilding</b></tt> abgeleitet sind die Klassen <tt><b>Library</b></tt> und <tt><b>University</b></tt>. Bei der +Erzeugung eines <tt><b>Library</b></tt>-Objekts wird sein <tt><b>researchFactor</b></tt> auf den Wert +1.3 gesetzt, +bei der Erzeugung eines <tt><b>University</b></tt>-Objekts wird sein <tt><b>researchFactor</b></tt> auf den Wert +1.5 gesetzt.</li> +<li> +Die Methode <tt><b>improveTown</b></tt> soll für <tt><b>Marketplace</b></tt> und <tt><b>Bank</b></tt> die entsprechenden +<tt><b>moneyAdder</b></tt>-Werte zum Attribut <tt><b>money</b></tt> der Stadt addieren. Im Fall von <tt><b>Library</b></tt> und +<tt><b>University</b></tt> sollen die <tt><b>researchFactor</b></tt>-Werte mit dem Attribut <tt><b>research</b></tt> der Stadt +multipliziert werden.</li> +<li> +Ergänzen Sie in der <tt><b>Town</b></tt>-Klasse als Attribut eine verkettete Liste von <tt><b>Building*</b></tt>-Zeigern. </li> +<li> +Ergänzen Sie im Benutzer-Menü einen Punkt</li> +<ul> +<li> +Neues Gebäude für vorhandene Stadt</li> +</ul> +wo dem Benutzer eine Auflistung der möglichen Gebäude zur Auswahl angezeigt wird. +Nachdem ein Gebäude ausgewählt wurde, soll nach dem Namen der Stadt gefragt +werden, zu der das Gebäude hinzugefügt wird. Das Gebäude-Objekt wird dann +dynamisch erzeugt und in die <tt><b>Building*</b></tt>-Liste der betreffenden +Stadt eingefügt. Hierfür soll die <tt><b>Town</b></tt>-Klasse um eine Methode <tt><b>insertBuilding</b></tt> +ergänzt werden. +<li>Damit die vorhandenen Gebäude die Ressourcenerzeugung in einer Stadt +beeinflussen, wird die Methode <tt><b>grow</b></tt> ergänzt: Sie soll nach der +oben angesprochenen Inkrementierung der Attribute einer Stadt die <tt><b>Building*</b></tt>-Liste +der Stadt durchgehen und für jedes vorhandene Gebäude <b> <tt>improveTown</tt></b> aufrufen.</li> +</ul> + +<table bgcolor="#efefde" width="100%"> +<tbody><tr> +<td>Anforderungen für die Note sehr gut:</td> +</tr> +</tbody></table> + +<p>Der Benutzer soll die Möglichkeit haben, den Spielstand zu einem beliebigen +Zeitpunkt abzuspeichern und vorher gespeicherte Spielstände wieder zu laden. Dabei gilt folgendes:</p> + +<ul> +<li> +Ergänzen Sie im Benutzer-Menü die Punkte</li> +<ul> +<li> +Spiel speichern</li> +<li> +Spiel laden</li> +</ul> +Hierbei soll der Benutzer jeweils aufgefordert werden, den Namen der Datei +anzugeben, in die der Spielstand gespeichert bzw. aus der der Spielstand geladen +werden soll. +<li> +Beim Speichern eines Spiels sollen <b>alle</b> Informationen, die den aktuellen +Spielstand kennzeichnen, in einer Textdatei abgelegt werden. Dazu gehört auch, +dass in einer geeigneten Form für jede Stadt festgehalten wird, welche Gebäude +sie besitzt. Nutzen Sie hierzu die Möglichkeiten der Typinformationen zur +Laufzeit (RTTI), indem Sie z.B. <tt><b>typeid</b></tt> einsetzen.</li> +</ul> + +<table bgcolor="#efefde" width="100%"> +<tbody><tr> +<td>Note:</td> +</tr> +</tbody></table> + +<table border="1" height="50" width="100%"> +<tbody><tr valign="top"> +<td> </td> +</tr> +</tbody></table> + +</body></html>
\ No newline at end of file |
