270 likes | 368 Vues
V11. Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden ___________________________________. class ultris { private: … void aufloesen () ; void aufruecken () ; … };. aufloesen () ___________________________________. void ultris :: aufloesen () { int z, s;
E N D
V11 Auflösen der Formen und Abräumen der Reihen
Zwei neue Methoden___________________________________ classultris { private: … voidaufloesen(); voidaufruecken(); … }; Claudia Langer
aufloesen()___________________________________ voidultris::aufloesen() { int z, s; intzz, ss; for( z = 0; z < aktuelle_form()->h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s < aktuelle_form()->b; s++) { ss = spalte + s; if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} Claudia Langer
aufloesen() - 1___________________________________ voidultris::aufloesen() { int z, s; intzz, ss; ... Zähler der Zeilen und Spalten der aktuellen Form Zähler der Zeilen ab der Position der aktuellen Form Claudia Langer
aufloesen()___________________________________ voidultris::aufloesen() { int z, s; intzz, ss; for( z = 0; z < aktuelle_form()->h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s < aktuelle_form()->b; s++) { ss = spalte + s; if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} Claudia Langer
aufloesen() - 2___________________________________ ... for( z = 0; z < aktuelle_form()->h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s < aktuelle_form()->b; s++) { ss = spalte + s; ... aktuelle Form wird von oben nach unten und von links nach rechts durchlaufen Claudia Langer
aufloesen() – 2___________________________________ ... for( z = 0; z < aktuelle_form()->h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s < aktuelle_form()->b; s++) { ss = spalte + s; ... Die Form muss innerhalb des Spielfelds liegen Claudia Langer
aufloesen()___________________________________ voidultris::aufloesen() { int z, s; intzz, ss; for( z = 0; z < aktuelle_form()->h; z++) { zz = zeile+z; if((zz >=0) && (zz<20)) { for( s = 0; s < aktuelle_form()->b; s++) { ss = spalte + s; if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} Claudia Langer
aufloesen() - 3___________________________________ ... if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} Wenn im data-Array in der Zeile und Spalte der aktuellen Form Werte vorliegen… (und die Form innerhalb des Spielfeldes liegt) Claudia Langer
aufloesen() – 3___________________________________ ... if( aktuelle_form()->data[z][s]&& (ss>=0) && (ss<10)) { spielfeld[zz][ss] = 1; fuellstand[zz]++; }}}}} …wird ein Feldstein an dieser Position im Spielfeld angelegt… Wenn im data-Array in der Zeile und Spalte der aktuellen Form Werte vorliegen… (und die Form innerhalb des Spielfeldes liegt) …und der Füllstand in dieser Zeile um 1 erhöht. Claudia Langer
aufruecken()___________________________________ voidultris::aufruecken() { intzz, 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--; } … Claudia 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 Claudia Langer
aufruecken()___________________________________ voidultris::aufruecken() { intzz, 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--; } … Claudia 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 Claudia Langer
aufruecken() - 2___________________________________ ... for( z = 19, a = 0; z >= 0; ) { if( fuellstand[z] == 10) { a++; punktestand += speed; speed+= 5; ... …wird die Zahl der abgeräumten Reihen, der Punktestand und die Geschwindigkeit erhöht. (Geschwindigkeit und Punktestand sind proportional) Wenn die Zeile voll ist… Claudia Langer
aufruecken()___________________________________ voidultris::aufruecken() { intzz, 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--; } … Claudia 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 Claudia 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]; } ... Zudem muss auch der Füllstand aktualisiert werden. (untere Zeile bekommt Wert der oberen) Die untere Zeile wird durch die obere ersetzt. Claudia Langer
aufruecken()___________________________________ voidultris::aufruecken() { intzz, 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--; } … Claudia 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) Claudia Langer
aufruecken()___________________________________ voidultris::aufruecken() { intzz, 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--; } … Claudia Langer
aufruecken() - 5___________________________________ ... if( fuellstand[z] == 10) {...} else z--; } ... Wenn die betrachtete Zeile nicht voll ist, gehen wir eine Zeile höher. Claudia Langer
aufruecken()___________________________________ voidultris::aufruecken() { intzz, 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); } Claudia 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. Claudia Langer
Modifikation von onestep()___________________________________ 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; } ... } } Claudia Langer
Fragen??? Claudia Langer