Określ pozycję obracanego elementu w Tetris


24

Płytki Tetris są przechowywane jako macierz boolowska 4x4. Każdy krok obrotu ma własną matrycę, reprezentacja bloku T- Block wyglądałaby następująco:

[
    0, 0, 0, 0,
    0, 1, 1, 1,
    0, 0, 1, 0,
    0, 0, 0, 0
],
[
    0, 0, 1, 0,
    0, 0, 1, 1,
    0, 0, 1, 0,
    0, 0, 0, 0
],
[
    0, 0, 1, 0,
    0, 1, 1, 1,
    0, 0, 0, 0,
    0, 0, 0, 0
],
[
    0, 0, 1, 0,
    0, 1, 1, 0,
    0, 0, 1, 0,
    0, 0, 0, 0
]

Próbuję znaleźć sposób, aby obliczyć pozycję bloku, gdy jest on obracany i zderza się z płytką (tablica jest również matrycą). Pierwotny Tetris po prostu nie pozwalałby na obrót bloku, gdy obrót spowodowałby kolizję. Nowoczesne warianty gry rozstrzygną kolizję i przestawią blok na prawidłową pozycję.

Oto kilka sytuacji, które należy rozwiązać. Plansza ma wymiary 6 x 6, czerwony = aktywny blok, szary = umieszczone / zajęte bloki. Za każdym razem należy wykonać obrót w lewo. Zielona nakładka wskazuje macierz dla bloku. Strzałka wskazuje wynikową korektę rozwiązującą obrót:

obrót bloku tetris

  1. Blok znajduje się po lewej stronie planszy. Ponieważ blok nie może opuścić planszy, po obrocie należy go przenieść z powrotem do środka.
  2. Zablokuj trafienia „na ziemi”, ale nie zostało jeszcze umieszczone / popełnione. W takim przypadku kafelek musi zostać przesunięty w górę, aby rozwiązać kolizję (w przypadku blokady „I” ruch byłby o 2 komórki w górę).
  3. Płytka uderzy w zajmowane bloki, musi zostać przesunięta w lewo, aby rozwiązać kolizję.
  4. Płytki nie można obracać.

Jakie byłoby najlepsze podejście do rozwiązania tego problemu? Optymalnie rozwiązanie powinno być ogólne, np. pracować z dowolnymi blokami macierzy 4x4 na dowolnej wielkości i wypełnionej płycie.


Ciekawe .. Zrobiłem tetris rok temu i właśnie obróciłem matrycę i zachowałem oryginał. Jeśli coś się pokrywało, użyłem oryginału. Działał dobrze Grałem dość często i nigdy nie miałem problemów. Musiał mieć szczęście. Dzięki za ciekawy temat!
— snitch182,

Odpowiedzi:


16

Opisana sytuacja nazywa się „ kopnięciem w ścianę ”.

Kopnięcie w ścianę ma miejsce, gdy gracz obraca pion, gdy nie ma miejsca na polach, na których tetromino normalnie zajmowałoby po rotacji.

...

Najprostszym algorytmem kopnięcia w ścianę ... jest próba przesunięcia tetromina o jedno pole w prawo, a następnie o jedno miejsce w lewo i nie powiedzie się, jeśli nie da się tego zrobić.

Istnieje wiele systemów rotacji Tetris, wszystkie udokumentowane na Wikia: Rotation Systems

SRS jest „oficjalną” specyfikacją Tetris i ma dość skomplikowany algorytm do kopnięć w ścianę z wykorzystaniem tabel. Ostatni kawałek może w ogóle nie pokrywać się z oryginalnym!

System rotacji DTET rozszerza najprostszy algorytm, sprawdzając pięć innych kopnięć w ścianę oprócz prawej i lewej. Wszystkie elementy podlegają tym samym zasadom.


+1, ciekawe wiki. Chociaż przesuwanie I bloku o jedno miejsce w lewo lub w prawo nie będzie działać. Bardziej zaawansowane systemy rotacji również wydają się stosować różne reguły dla różnych bloków. Chciałbym znaleźć metodę, która działałaby dla wszystkich możliwości bloków (jeśli nie zbyt kosztowna).
— bummzack

1
@bummzack: Cóż, po prostu użyj tej samej tabeli dla wszystkich bloków, takich jak system DTET. Po prostu testuje więcej lokalizacji oprócz lewej i prawej. Możesz stworzyć własny system i sprawdzić, ile pozycji chcesz. Jednak użycie tej samej tabeli dla wszystkich elementów może pozwolić na „nienaturalne” kopnięcia w ścianę.
— Leftium

Dzięki za zmiany. Są one w rzeczywistości znacznie lepsze niż materiały na wiki. Bardzo mile widziane.
— bummzack
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.