LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[CZĘŚĆ 1] STM32Butterfly2: Tetris na STM32 – wprowadzenie do mechanizmu gry

Kompletna funkcja będzie zatem wyglądała tak:

void Redukcja(void)
{
  unsigned char x,y,k,yy;

  for(y=0;y<20;y++) //pętla oblicza kolejne linie planszy
  {
    k=1;
    for(x=0;x<10;x++) if(plansza[x][y] == 0) k=0; 	//pętla sprawdza każdy punkt danej linii
    							//jeżeli brakuje któregoś klocka to k=0;
    if(k == 1)			//jeżeli bieżąca linia jest kompletna
    {
      linie++;			//zwiększ punkty
      punkty+=10;
      for(yy=y;yy>0;yy--)  	//pętla odlicza kolejne linie od bieżącej w górę
      {
        for(x=0;x<10;x++) 		 	//pętla kopiuje linię yy-1 do linii yy
          plansza[x][yy]=plansza[x][yy-1];	//spowoduje to skasowanie pełnej linii 
//i przesunięcie wszystkich linii ponad w dół
      }
    }
  }
}

Kolejna nowa zmienna linie zlicza ilość ułożonych przez gracza linii poziomych, należy ją zadeklarować tak samo jak zmienną punkty.
Napisaliśmy wszystkie funkcje potrzebne podczas opuszczania klocka, więc czas na samą funcję KlocekDol:

void KlocekDol(void)
{
  if(Kolizja(klocekx,kloceky+1,klocekr) == 0)	//sprawdzenie czy przesunięty klocek 
nie wywoła kolizji
  {							//jeżeli nie to:
    kloceky++;						//zwiększ zmienną y położenia klocka
  }else
  {							//jeżeli wykryto kolizję:
    KlocekWklej();					//skopiuj segmenty klocja na planszę
    Redukcja();					//sprawdź czy nie ma pełnych linii
    KlocekNowy();					//załaduj nowy klocek
  }
}

Dzięki temu, że rozbiliśmy poszczególne czynności na odrębne kawałki kodu, cały program staje się bardzo czytelny i łatwo nam będzie w przyszłości dokonywać w nim zmian. Zapewne każdy z czytelników będzie chciał zmodyfikować grę po swojemu, dlatego starałem się pisać ją jak najprzejrzyściej, a zarazem „rozwojowo”.
Mamy więc komplet funkcji odpowiedzialnych za mechanikę gry, natomiast brakuje istotnego elementu jakim jest interfejs użytkownika - jak go przygotować pokażemy w kolejnym artykule.
Rafał Kędzierski