1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
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>
|