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

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

Embed Size (px)

Citation preview

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