Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen...

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

Transcript of Softwaretechnologie II WS 08/09 SpieleProgrammieren UlTris V07 Reihen vorbelegen, Spielfeld anzeigen...

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

Softwaretechnologie IIWS 08/09

SpieleProgrammieren UlTrisV07

Reihen vorbelegen, Spielfeld anzeigen und Punktestand ausrechnen

Sibylle C. Schellhorn, Medieninformatik

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

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.

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

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

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

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

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

Der Klasse Ultris neue Member hinzufügen, um statischen Elemente zu erfassen

class ultris{private:

int vorbelegung; // Anzahl der bei Spielbeginn vorzubelegenden Zeilenint vorschau; // Anzahl der Formen in der Vorschauint spielfeld[20][10]; // Das Spielfeld, 20 Zeilen z à 10 Steinen sint fuellstand[20]; // Der Fuellstand einer Reihe (= Anzahl Segmente in der Reihe)int punktestand; // Der aktuelle Punktestandvoid initialisieren();void vorbelegen();void display_spielfeld();void display_punktestand();

public:int spiel_laeuft; // Indikator, dass das Spiel laeuftultris() { srand( GetTickCount()); initialisieren(); vorbelegung = 0; vorschau = 1;}int get_vorbelegung() { return vorbelegung;}void set_vorbelegung( int v) {if( v < 0) v = 0; if( v > 20) v = 20; vorbelegung = v;}int get_vorschau() { return vorschau;}void set_vorschau( int v) {if( v < 0) v = 0; 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

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

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

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

void ultris::initialisieren()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 werdenpunktestand = 0;}

ST-II, WS 08/09: Ulrich Kaisers Tetris=UlTris, V07 - Sibylle C. Schellhorn Vorbelegen von Spielreihen, Anzeige des Feldes, des Punktestandes 7

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

void ultris::vorbelegen()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

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

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 Funktionrand() , // für randomdie 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))

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

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 belegtist. Sollte es durch die rand() zu einer„Doppelbelegung“ kommen, beeinflußt das den Zähler des Standesnicht.

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

void ultris::start()

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 gestartetDie bisher implementierten Vorgele-gungen werden durchgeführt

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

void ultris::display_spielfeld()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

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

void ultris::display_punktestand()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

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

void ultris::display ()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

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

Akkzelerator für F1=„Neues Spiel“

• In der Demo.rcID_ULTRIS_NEUESSPIELexistiert 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

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

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

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

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