30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

10.3 Auszüge aus der Implementation 307<br />

1. make -f MemoryMakefile aufrufen (oder <strong>in</strong> ihrer eigenen Umgebung<br />

entsprechend das Programm compilieren).<br />

2. memory 6 6 oder ähnlich starten. Die Anzahl der Reihen und der Spalten<br />

kann jeweils zwischen 1–9 se<strong>in</strong>.<br />

3. Wenn das Feld mit den verdeckten Karten (dargestellt als .) ersche<strong>in</strong>t,<br />

s e<strong>in</strong>geben, gefolgt von Return. Dadurch werden alle Karten angezeigt.<br />

4. Nach dem E<strong>in</strong>prägen der Karten h e<strong>in</strong>geben, gefolgt von Return. Dadurch<br />

werden die Karten wieder umgedreht.<br />

5. Koord<strong>in</strong>atenpaare durch Leerzeichen bzw. Return getrennt e<strong>in</strong>tippen,<br />

die jeweils e<strong>in</strong>e Karte aufdecken sollen. Z.B. deckt die E<strong>in</strong>gabe von 2 3<br />

Return die Karte <strong>in</strong> Reihe 2 und Spalte 3 auf.<br />

6. Wenn man das Spiel gew<strong>in</strong>nt, so beendet es sich automatisch. Sollte<br />

man mitten unter dem Spiel die Lust verlieren, so hilft die E<strong>in</strong>gabe von<br />

q Return. Ganz ungeduldige Spieler können auch mittels Control-c dem<br />

Gemetzel e<strong>in</strong> Ende bereiten :-).<br />

Von der Logik her <strong>in</strong>teressant und deshalb e<strong>in</strong>en Blick wert ist auch die Implementation<br />

der Klasse MemoryGameboard: Wie bereits bei den Deklarationen<br />

besprochen wurde, werden alle darstellbaren Objekte <strong>in</strong> Vektoren gespeichert,<br />

damit sie im Destruktor auch sicher wieder freigegeben werden. Die Vektoren<br />

bekommen dazu den entsprechenden DisplayableDeletor spendiert. Wirft<br />

man jedoch e<strong>in</strong>en Blick auf den Konstruktor der Klasse, der <strong>in</strong> der Folge<br />

abgedruckt ist, so ist leicht zu erkennen, dass hierbei noch überhaupt ke<strong>in</strong>e<br />

Displayables angelegt werden:<br />

10 MemoryGameboard : : MemoryGameboard( u<strong>in</strong>t32 num rows ,<br />

11 u<strong>in</strong>t32 num cols ) :<br />

12 num rows ( num rows ) ,<br />

13 num cols ( num cols ) ,<br />

14 num cards front side up ( 0 ) ,<br />

15 row vector ( 0 ) ,<br />

16 r o w h e a d i n g d i s p l a y a b l e s ( 0 ) ,<br />

17 c o l h e a d i n g d i s p l a y a b l e s ( 0 ) ,<br />

18 e o l d i s p l a y a b l e s ( 0 ) ,<br />

19 conta<strong>in</strong>er output handl<strong>in</strong>g ( 0 ) ,<br />

20 c o n t a i n e r o u t p u t c o n t e x t (0)<br />

21 {<br />

22 i f ( ( num rows ∗ num cols ) % 2) // not an even number<br />

23 num rows ++;<br />

24<br />

25 row vector = new Vector ( num rows ,<br />

26 VectorDeletor : : getInstance ( ) ) ;<br />

27 for ( u<strong>in</strong>t32 current row = 0 ; current row < num rows ;<br />

28 current row ++)<br />

29 row vector −>setElementAt (<br />

30 current row ,new Vector ( num cols ,<br />

31 DisplayableDeletor : : getInstance ( ) ) ) ;<br />

32 }<br />

Des Rätsels Lösung, wann die darstellbaren Objekte erzeugt werden, ergibt<br />

sich aus e<strong>in</strong>em Blick auf die Methode displayableRegistered:

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!