Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,

Ähnliche Präsentationen


Präsentation zum Thema: "Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,"—  Präsentation transkript:

1 Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn, Medieninformatik

2 Ziel des Abschnitts V07: ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 2 Durch Angeben der Anzahl von Reihen festlegen, wie viele Steine schon im Spielfeld vorbelegt sind.

3 Anschließend Punktestand errechnen und Spiel anzeigen ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 3

4 ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 4 Sowie das Tastaturkürzel F1 für den Start eines neuen Spiels inizialisieren

5 Der Klasse Ultris neue Member hinzufügen, um statischen Elemente zu erfassen class ultris { private: int vorbelegung; // Anzahl der bei Spielbeginn vorzubelegenden Zeilen int vorschau; // Anzahl der Formen in der Vorschau int spielfeld[20][10];// Das Spielfeld, 20 Zeilen z à 10 Steinen s int fuellstand[20];// Der Fuellstand einer Reihe (= Anzahl Segmente in der Reihe) int punktestand; // Der aktuelle Punktestand void initialisieren(); void vorbelegen(); void display_spielfeld(); void display_punktestand(); public: int spiel_laeuft; // Indikator, dass das Spiel laeuft ultris() { srand( GetTickCount()); initialisieren(); vorbelegung = 0; vorschau = 1;} int get_vorbelegung() { return vorbelegung;} void set_vorbelegung( int v) {if( v 20) v = 20; vorbelegung = v;} int get_vorschau() { return vorschau;} void set_vorschau( int v) {if( v 5) v = 5; vorschau = v;} void start(); void display(); }; ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 5

6 void ultris::initialisieren() Ein leeres Spielfeld wird erzeugt, solange der Spieler keine eigene Auswahl trifft ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 6

7 void ultris::initialisieren() { int z, s; for( z = 0; z < 20; z++) { fuellstand[z] = 0; for( s = 0; s < 10; s++) spielfeld[z][s] = 0; } spiel_laeuft = 0; // muß noch gestartet werden punktestand = 0; } ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 7

8 void ultris::vorbelegen() { int z, s, i; for( i = 0; i < vorbelegung*5; i++) { z = 19-rand()%vorbelegung; s = rand()%10; if( !spielfeld[z][s]) { spielfeld[z][s] = 1; fuellstand[z]++; } punktestand = vorbelegung * 2500; } ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 8

9 void ultris::vorbelegen() Exkurs: Die Funkion rand() void ultris::vorbelegen() { int z, s, i; for( i = 0; i < vorbelegung*5; i++) { z = 19-rand()%vorbelegung; s = rand()%10; if( !spielfeld[z][s]) { spielfeld[z][s] = 1; fuellstand[z]++; } punktestand = vorbelegung * 2500; } ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 9 Mit der parameterlosen Funktion rand(), // für random die durch die stdio.h zur Verfügung gestellt wird, Erzeugt man Zufallszahlen Eine Zufallszahl zw. a und b (inlcl. A und b) erzeugt man mit: a+ (rand() %(b-a+1))

10 void ultris::vorbelegen() den Spielstand hochzählen void ultris::vorbelegen() { int z, s, i; for( i = 0; i < vorbelegung*5; i++) { z = 19-rand()%vorbelegung; s = rand()%10; if( !spielfeld[z][s]) { spielfeld[z][s] = 1; fuellstand[z]++; } punktestand = vorbelegung * 2500; } ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 10 Der Spielstand wird nur hochgezählt, wenn ein Feld mit einem Stein belegt ist. Sollte es durch die rand() zu einer Doppelbelegung kommen, beeinflußt das den Zähler des Standes nicht.

11 void ultris::start() { ultris_sounds.play( sound_start); initialisieren(); vorbelegen(); spiel_laeuft = 1; } ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 11 Sound wird gestartet Die bisher implementierten Vorgele- gungen werden durchgeführt

12 void ultris::display_spielfeld() { int z, s; for( z = 0; z < 20; z++) { for( s = 0; s < 10; s++) { if( spielfeld[z][s]) ultris_display.feldstein( z, s); } // das angelegte Array wird zeilenweise durchlaufen // und für jedes belegte Feld // wird an der Stelle ein Stein angezeigt ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 12

13 void ultris::display_punktestand() { int i, z, p; for( i = 5, p = punktestand; i >= 0; i--, p/= 10) { z = p % 10; ultris_display.ziffer( i, z); } // der Punktestand wird in einzelne Ziffern z zerlegt // und mit der Funktion ziffer aus der Klasse display // (ultris_display.ziffer, V02) ausgegeben. ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 13

14 void ultris::display () { ultris_display.hintergrund(); display_spielfeld(); ultris_display.abdeckung(); display_punktestand(); ultris_display.present(); } // die Methode wird erweitert ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 14

15 Akkzelerator für F1=Neues Spiel In der Demo.rc ID_ULTRIS_NEUESSPIEL existiert schon und bekommt den key / die Taste F1 zugewiesen Der Windowshandler in Demo.cpp wird um die Funktion mein_spiel.start() erweitert, ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 15

16 LRESULT CALLBACK ultris_windowhandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) […] case ID_ULTRIS_NEUESSPIEL: mein_spiel.start(); CheckMenuItem( ultris_menu, ID_ULTRIS_PAUSE, MF_UNCHECKED); PostMessage( ultris_window, WM_PAINT, 0, 0); break; schicken eine message an WM_PAINT und das Spielfeld wird neu gezeichnet: case WM_PAINT: mein_spiel.display(); break; ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 16

17 Ende Vielen Dank für Ihre Aufmerksamkeit ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 17


Herunterladen ppt "Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen Sibylle C. Schellhorn,"

Ähnliche Präsentationen


Google-Anzeigen