tetris in c#

Status
Niet open voor verdere reacties.

svw2013

Nieuwe gebruiker
Lid geworden
4 mrt 2013
Berichten
3
hallo Iedereen,
ik ben mezelf c# aan het leren en heb mezelf aan het project Tetris gewaagd.
Dit doe ik met een 2D matrix voor het speelveld en 2D matrix voor de blokken.
De blokken worden dan in het matrix geplaatst van het speelveld en nu komt de besturing.
Ik kan ze links, rechts en naar beneden laten gaan ( met forloop die mijn speelveldarray vanachter naar voor doorloopt
als deze dan op een 1stoot verzet men deze van plek) Mijn probleem is dat hij niet wil stoppen en buiten de array gaat.
Heb al een aantal dingen probeert zoals een coordinaatX waar mijn blok wordt in te voeren mee te geven dat deze niet groter of kleiner mag zijn dan de maximumwaarde van de linker of rechter kant.
maar dan plaatst hij nullen waar het niet mag(vanwege de clearing) en vallen mijn blokken door...
weet iemand een andere manier om deze blokken te verplaatsen in zijn geheel?
Code:
public void BlokMove() // om mijn blokken naar beneden te plaatsen met timertick
    {
      for (kolom = 19; kolom >= 0; kolom--)
      {
        for (rij = 9; rij >= 0; rij--)
        {
          if (mSpeelveld.mBlokjesArray[kolom, rij] == 1 && mSpeelveld.mBlokjesArray[kolom, rij] != mSpeelveld.mBlokjesArray[maxY, rij])// als je in kolom of rij een 1 tegenkomt en kolom is verschillend van maxX
          {
            mSpeelveld.mBlokjesArray[kolom + 1, rij] = 1; // wordt rij eronder 1
            mSpeelveld.mBlokjesArray[kolom, rij] = 0;// waar 1 stond wordt 0
          }
        }
      }
    }

alvast bedankt :)
 
Kolommen zijn van boven naar beneden.
Rijen van links naar rechts.

Normaliter heb je meer rijen dan kolommen. Op die manier kunnen je speelbokken naar beneden vallen in plaats van van links naar rechts bijvoorbeeld.

Je hebt in de eerste for-loop staan dat je 19 kolommen hebt.
De manier waarop je de for-loop nu doorloopt, loopt hij 20 keer. Mocht jij maar 19 elementen in je array hebben, dan klopt het dat hij out of bounds gaat.
Dat kan je oplossen door de = eruit te halen. Zelfde voor de rij loop.
 
Ja, dat klopt... ik heb mijn Kolommen en rijen omgedraaid :) maar over heel het programma dus maakt het niet echt uit,
het probleem is dat ik niet echt weet hoe ik dit: Naamloos.png kan oplossen, hij valt goed tot dat hij (beneden)op de onderste lijn aankomt en ik weet mijn fout als er een 1 staat op de onderste rij gaat hij er een 0 tussenzetten van het clearen want als dat zo is gaat hij niet meer door die laatste iflus... mar als er voorbeeld een z blok staat langs de zijkant vallen die blokken door omwille van dat er nog niets staat op de onderste lijn...
is er een mogelijkheid dat je in u ene array waar je u blok in hebt getekend ook voor een appart stuk naar beneden kunt zetten ? dat de blok terug als blok aanzien wordt want momenteel worden alle 1nen appart omlaag gezet en gecleard...
 
Wat je kan doen is een zoekmatrix maken.
Je blok ziet er bijvoorbeeld zo uit:

X
XXX

Dan zet je een matrix over de onderste rij. De bovenste rand van de matrix komt over de onderste rij van het blok. Deze zal er dan zo uit komen te zien:

OOO
OOO

Wat je dan doet is kijken of het onderste vak van elke kolom leeg is. Zijn ze allemaal leeg, dan verplaats je het blok 1 rij naar beneden.

Voor een afwijkend blok kan je hetzelfde doen.
XX
..XX

Deze zou een matrix krijgen die er zo uitziet:

O
OOO
..OO

Ook hier weer kijken of de lokatie waar de onderste vakken op zitten leeg zijn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan