Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void.

Ähnliche Präsentationen


Präsentation zum Thema: "V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void."—  Präsentation transkript:

1 V11 Auflösen der Formen und Abräumen der Reihen

2 Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void aufruecken(); … }; 12.11.2009Claudia Langer

3 void ultris::aufloesen() { int z, s; int zz, ss; for( z = 0; z h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s b; s++) { ss = spalte + s; if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} 12.11.2009Claudia Langer aufloesen() ___________________________________

4 void ultris::aufloesen() { int z, s; int zz, ss;... 12.11.2009Claudia Langer aufloesen() - 1 ___________________________________ Zähler der Zeilen und Spalten der aktuellen Form Zähler der Zeilen ab der Position der aktuellen Form

5 void ultris::aufloesen() { int z, s; int zz, ss; for( z = 0; z h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s b; s++) { ss = spalte + s; if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} 12.11.2009Claudia Langer aufloesen() ___________________________________

6 ... for( z = 0; z h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s b; s++) { ss = spalte + s;... 12.11.2009Claudia Langer aufloesen() - 2 ___________________________________ aktuelle Form wird von oben nach unten und von links nach rechts durchlaufen

7 ... for( z = 0; z h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s b; s++) { ss = spalte + s;... 12.11.2009Claudia Langer aufloesen() – 2 ___________________________________ Die Form muss innerhalb des Spielfelds liegen

8 void ultris::aufloesen() { int z, s; int zz, ss; for( z = 0; z h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s b; s++) { ss = spalte + s; if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} 12.11.2009Claudia Langer aufloesen() ___________________________________

9 ... if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} 12.11.2009Claudia Langer aufloesen() - 3 ___________________________________ Wenn im data-Array in der Zeile und Spalte der aktuellen Form Werte vorliegen… (und die Form innerhalb des Spielfeldes liegt)

10 ... if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} 12.11.2009Claudia Langer aufloesen() – 3 ___________________________________ …wird ein Feldstein an dieser Position im Spielfeld angelegt… …und der Füllstand in dieser Zeile um 1 erhöht. Wenn im data-Array in der Zeile und Spalte der aktuellen Form Werte vorliegen… (und die Form innerhalb des Spielfeldes liegt)

11 12.11.2009Claudia Langer aufruecken() ___________________________________ void ultris::aufruecken() { int zz, z, s; int a; for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5; for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; } for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; } else z--; } …

12 12.11.2009Claudia Langer aufruecken() - 1 ___________________________________ void ultris::aufruecken() { int zz, z, s; int a;... Zeilen und Spalten des Spielfeldes Zeilen unterhalb der Zeile der aktuellen Form Zähler der abgeräumten Reihen

13 void ultris::aufruecken() { int zz, z, s; int a; for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5; for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; } for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; } else z--; } … 12.11.2009Claudia Langer aufruecken() ___________________________________

14 12.11.2009Claudia Langer aufruecken() - 2 ___________________________________... for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5;... Zeilen werden von unten nach oben durchlaufen

15 12.11.2009Claudia Langer aufruecken() - 2 ___________________________________... for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5;... Wenn die Zeile voll ist… …wird die Zahl der abgeräumten Reihen, der Punktestand und die Geschwindigkeit erhöht. (Geschwindigkeit und Punktestand sind proportional)

16 void ultris::aufruecken() { int zz, z, s; int a; for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5; for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; } for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; } else z--; } … 12.11.2009Claudia Langer aufruecken() ___________________________________

17 12.11.2009Claudia Langer aufruecken() - 3 ___________________________________... for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; }... Alle Zeilen oberhalb der aktuellen Zeile werden durchlaufen

18 12.11.2009Claudia Langer aufruecken() - 3 ___________________________________... for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; }... Die untere Zeile wird durch die obere ersetzt. Zudem muss auch der Füllstand aktualisiert werden. (untere Zeile bekommt Wert der oberen)

19 void ultris::aufruecken() { int zz, z, s; int a; for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5; for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; } for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; } else z--; } … 12.11.2009Claudia Langer aufruecken() ___________________________________

20 12.11.2009Claudia Langer aufruecken() - 4 ___________________________________... for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; }... Außerdem muss noch die oberste Zeile frei gemacht werden. (alle Spalten werden bei Zeile 0 durchlaufen, der Füllstand wird auf 0 gesetzt)

21 void ultris::aufruecken() { int zz, z, s; int a; for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5; for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; } for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; } else z--; } … 12.11.2009Claudia Langer aufruecken() ___________________________________

22 12.11.2009Claudia Langer aufruecken() - 5 ___________________________________... if( fuellstand[z] == 10) {...} else z--; }... Wenn die betrachtete Zeile nicht voll ist, gehen wir eine Zeile höher.

23 void ultris::aufruecken() { int zz, z, s; int a; for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed += 5; for( zz = z-1; zz >= 0; zz--) { for( s = 0; s < 10; s++) spielfeld[zz+1][s] = spielfeld[zz][s]; fuellstand[zz+1] = fuellstand[zz]; } for( s = 0; s < 10; s++) spielfeld[0][s] = 0; fuellstand[0] = 0; } else z--; } if( a == 0) ultris_sounds.play( sound_down); else if( a == 1) ultris_sounds.play( sound_row1); else ultris_sounds.play( sound_row2); } 12.11.2009Claudia Langer aufruecken() ___________________________________

24 12.11.2009Claudia Langer aufruecken() – 6 ___________________________________... if( a == 0) ultris_sounds.play( sound_down); else if( a == 1) ultris_sounds.play( sound_row1); else ultris_sounds.play( sound_row2); }... Die Anzahl der abgeräumten Reihen, bestimmt den Sound, der bei Ausführung gespielt wird.

25 int ultris::onestep() { if( offset) {...} else { if( blockiert()) { aufloesen(); aufruecken(); spiel_laeuft = (zeile >= 0); if( spiel_laeuft) neue_form(); else { zeige_dyn = 0; display(); ultris_sounds.play( sound_ende); } return 0; }... } 12.11.2009Claudia Langer Modifikation von onestep() ___________________________________

26 12.11.2009Claudia Langer

27 Fragen??? 12.11.2009Claudia Langer


Herunterladen ppt "V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________ class ultris { private: … void aufloesen(); void."

Ähnliche Präsentationen


Google-Anzeigen