Tetris blokları nasıl döndürülür


16

Kökeni (0,0) sol üst köşede olacak şekilde 20 satır yüksekliğinde ve 10 sütun genişliğinde bir oyun tahtası ızgaram var. Oyunda dört bloktan oluşan bir tetrimino var. Sol üst köşeye göre her bloğun x, y konumlarına sahibim. Ayrıca, pivot konumum var, etrafında döndürmek istediğim nokta sol üst köşe kökenine göredir.

Her blok bir oyun tahtası karesinde bir tamsayı konumuna sahiptir ve bu nedenle pivot, bloklar arasında kesirli bir konuma sahiptir, örneğin (10.5,10.5)

Benim sorum: Her bloğu pivotun etrafında döndürmek için hangi formülü kullanabilirim?

Zaten mevcut benzer sorulara ve cevaplara baktım, ancak çalışabileceğim bir cevap bulamadım.

Yardım çok takdir edilecektir.


oyun dev.

ve eğer buradaysa ... bize bazı veri yapılarını gösterin

Sadece dik açıların katları ile dönüyorsanız, bu oldukça basit olmalıdır. Sadece birkaç şema çizin ve bir tamsayı çözümü bulabilmeniz gerekir.
Kerrek SB

3
Aslında rotasyonları hesaplamak için uğraşmazdım, sadece bir dizi dört olası döndürülmüş versiyonu da koydum.
fredoverflow

1
Ayrıca @FredOverflow'un ne dediğini de öneririm. Soruma (sizinkine benzer) bakarsanız, uygulamam için nasıl tek bir blok sakladığımı görürsünüz.
bummzack

Yanıtlar:


21

Standart Tetris rotasyon mantığına Süper Rotasyon Sistemi denir. SRS, duvar vuruşlarında ve t-spinlerinde birçok varyasyona izin veren yüksek seviyeli Tetris oyununa uygundur.

Tüm tetrominolar sınırlayıcı bir kare içinde bulunur ve engellenmedikçe bu karenin merkezi etrafında döner. Genişlik 3 tetrominoları (J, L, S, T, Z) sınırlayıcı karenin üst iki sırasına ve (J, L ve T için) düz tarafı aşağı gelecek şekilde yerleştirilir. Ben üst orta sıraya yerleştirilir.

Tüm tetrominolar, oyun alanının üst kısmında genellikle gizli 2 sıra halinde ortaya çıkar. Sola yuvarlanarak bu sıraların ortasına yerleştirilirler. Bir tetromino indiğinde, kilit gecikmesi sona erene kadar kilitlenmez. Tetris Şirketi tarafından Infinity olarak adlandırılan kilit gecikme davranışı, tetromino her hareket ettirildiğinde veya döndürüldüğünde kilit gecikmesini sıfırlar. Sert düşüş genellikle kilit gecikmesi olmayan yukarı doğru eşlenir.

Döndürme sınırlayıcı kutularındaki tetrominolar.

Arika'nın Tetris: The Grand Master oyunlarında kullanılan ARS adı verilen başka bir yaygın varyant daha var .


7

Kökeni döndürmek için genel formül

xNew = x * cos(a) - y * sin(a)
yNew = x * sin(a) + y * cos(a)

90 derece için

xNew = -y
yNew = x

Yani, öncelikle tuğla merkezi koordinatlarını pivot noktasına göre nispeten elde edin:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

Sonra bunları pivot noktasının etrafında döndürün:

x1 = -y = yPivot - yBrickCenter
y1 = x = xBrickCenter - xPivot

Ve sonra döndürülen noktaya pivot koordinatları ekleyin:

newXBrickCenter = xPivot + x1 = xPivot + yPivot - yBrickCenter
newYBrickCenter = yPivot + y1 = yPivot - xPivot + xBrickCenter

Ancak 90 derecenin katlarıyla döndürmeniz gerekiyorsa, her yön için dört tuğla pozisyonu saklayabilir ve gerçekte döndürmek yerine aralarında geçiş yapabilirsiniz.


0

Tüm kare halkaları (a-to-h 2 konum, A-to-P 4 konum ve benzeri) bu pivot bloğun etrafında döndürebilirsiniz:

ABCDE MNOPA
PabcF LghaB
Oh.dG -> Kf.bC
NgfeH JedcD
MLKJI IHGFE

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.