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

W przypadku, kiedy równanie w warunku jest prawdziwe (wystąpiła kolizja) ustawiana jest zmienna kolizja zwracana później w wyniku działania funkcji.
W tej samej funkcji umieścimy także warunki sprawdzające czy klocek nie wystaje poza boczne ścianki planszy:

…i czy nie przeszedł poniżej jej „dna”:

Gotowa funkcja będzie wyglądała następująco:

Teraz wystarczy, że przed każdym kolejnym ruchem klocka będziemy sprawdzać czy nie wywoła od kolizji. Przykładowo przed opuszczeniem klocka w dół sprawdzimy następujący warunek:

Konstrukcja taka zwiększy zmienną kloceky o jeden, tylko w przypadku, kiedy funkcja sprawdzająca zwróci wartość 0. Podstawiając do funkcji współrzędna y klocka zwiększona o jeden sprawdzamy czy opuszczenie klocka spowoduje kolizję, zanim opuścimy klocek. Analogicznie będziemy sprawdzać wystąpienie kolizji podczas wykonywania klockiem ruchów na boki. Przygotujmy zatem komplet funkcji odpowiedzialnych za poszczególne ruchy klocka. Pierwsza funkcja przemieszcza klocek o jedno pole w lewo:

Proste, prawda? Myślę, że już każdy wie jak będzie wyglądała funkcja przemieszczająca klocek w prawo. Równie proste będzie obracanie klocka. Wystarczy tylko zmienić wartość jednej zmiennej, na kolejną z 4 wartości, jakie może przyjąć:

Mam nadzieję, że już widzicie zalety proponowanego rozwiązania. Pozostała nam jeszcze do napisania funkcja przemieszczająca klocek o jedno pole w dół. Tutaj sytuacja będzie nieco bardziej skomplikowana. Zastanówmy się jak nasz program powinien zareagować, jeżeli podczas opuszczania klocka kolejny ruch nie będzie możliwy. Klocek, który do tej pory był w ruchu powinien zostać odwzorowany na planszy w postaci stałych jej segmentów. Napiszmy wiec funkcję, która będzie tego dokonywała. Podobnie jak w przypadku sprawdzania kolizji zbudujemy pętlę odliczającą kolejne segmenty klocka, wewnątrz której będziemy obliczać ich współrzędne na planszy. Z tą jednak różnicą, że ustawimy odpowiednie komórki w tablicy odwzorowującej planszę.

Kolejnym działaniem po odwzorowaniu klocka na planszę będzie wygenerowanie kolejnego klocka. Będzie to polegało na ustawieniu współrzędnych klocka na położenie początkowe. Wyzerowaniu zmiennej obrotu klocka, oraz zmiany rodzaju klocka na inny, najlepiej w sposób losowy. Tworzymy kolejna funkcję, która będzie za to odpowiedzialna:

Do pobrania

O autorze