Date post: | 05-Apr-2015 |
Category: |
Documents |
Upload: | morency-heitmeyer |
View: | 110 times |
Download: | 0 times |
V11 Auflösen der Formen und Abräumen der Reihen
Zwei neue Methoden___________________________________
class ultris
{
private:
…
void aufloesen();
void aufruecken();
…
};
12.11.2009 Claudia Langer
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()___________________________________
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
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()___________________________________
...
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
...
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
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()___________________________________
...
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)
...
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)
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--;
} …
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
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()___________________________________
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
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)
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()___________________________________
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
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)
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()___________________________________
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)
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()___________________________________
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.
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()___________________________________
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.
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()___________________________________
12.11.2009 Claudia Langer
Fragen???
12.11.2009 Claudia Langer