V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden...

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

Transcript of V11 Auflösen der Formen und Abräumen der Reihen. Zwei neue Methoden...

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

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

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

Zwei neue Methoden___________________________________

class ultris

{

private:

void aufloesen();

void aufruecken();

};

12.11.2009 Claudia Langer

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

void ultris::aufloesen()

{

int z, s;

int zz, 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]++;

}}}}}

12.11.2009 Claudia Langer

aufloesen()___________________________________

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

void ultris::aufloesen(){int z, s;int zz, ss;...

12.11.2009 Claudia Langer

aufloesen() - 1___________________________________

Zähler der Zeilen und Spalten der aktuellen Form

Zähler der Zeilen ab der Position der aktuellen Form

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

void ultris::aufloesen()

{

int z, s;

int zz, 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]++;

}}}}}

12.11.2009 Claudia Langer

aufloesen()___________________________________

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

...

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;

...

12.11.2009 Claudia Langer

aufloesen() - 2___________________________________

aktuelle Form wird von oben nach unten und von linksnach rechts durchlaufen

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

...

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;

...

12.11.2009 Claudia Langer

aufloesen() – 2___________________________________

Die Form muss innerhalb des Spielfelds liegen

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

void ultris::aufloesen()

{

int z, s;

int zz, 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]++;

}}}}}

12.11.2009 Claudia Langer

aufloesen()___________________________________

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

...

if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10))

{

spielfeld[zz][ss] = 1;

fuellstand[zz]++;

}}}}}

12.11.2009 Claudia Langer

aufloesen() - 3___________________________________

Wenn im data-Array in der Zeile und Spalte der aktuellen Form Werte vorliegen…(und die Form innerhalb des Spielfeldes liegt)

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

...

if( aktuelle_form()->data[z][s] && (ss>=0) && (ss<10))

{

spielfeld[zz][ss] = 1;

fuellstand[zz]++;

}}}}}

12.11.2009 Claudia 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)

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

12.11.2009 Claudia 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--;

} …

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

12.11.2009 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

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

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.2009 Claudia Langer

aufruecken()___________________________________

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

12.11.2009 Claudia Langer

aufruecken() - 2___________________________________...for( z = 19, a = 0; z >= 0; )

{if( fuellstand[z] == 10)

{a++;punktestand += speed;speed += 5;...

Zeilen werden von unten nachoben durchlaufen

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

12.11.2009 Claudia 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)

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

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.2009 Claudia Langer

aufruecken()___________________________________

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

12.11.2009 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

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

12.11.2009 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];}

...

Die untere Zeile wird durch die obere ersetzt.

Zudem muss auch der Füllstandaktualisiert werden.(untere Zeile bekommt Wert der oberen)

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

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.2009 Claudia Langer

aufruecken()___________________________________

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

12.11.2009 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)

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

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.2009 Claudia Langer

aufruecken()___________________________________

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

12.11.2009 Claudia Langer

aufruecken() - 5___________________________________...if( fuellstand[z] == 10)

{...}else

z--;}...

Wenn die betrachtete Zeile nicht voll ist,gehen wir eine Zeile höher.

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

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.2009 Claudia Langer

aufruecken()___________________________________

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

12.11.2009 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ührunggespielt wird.

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

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.2009 Claudia Langer

Modifikation von onestep()___________________________________

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

12.11.2009 Claudia Langer

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

Fragen???

12.11.2009 Claudia Langer