Làm thế nào để xoay khối trong tetris


17

Tôi có một lưới gameboard cao 20 hàng và rộng 10 cột với gốc (0,0) nằm ở góc trên cùng bên trái. Tôi có một tetrimino đang chơi, bao gồm bốn khối. Tôi có vị trí x, y của mỗi khối so với gốc góc trên bên trái. Tôi cũng có vị trí của trục, điểm mà tôi muốn xoay tương đối với điểm gốc góc trên bên trái.

Mỗi khối có một vị trí số nguyên trong một ô vuông và do đó trục có vị trí phân đoạn nằm giữa các khối, ví dụ: (10,5,10,5)

Câu hỏi của tôi là: Tôi có thể sử dụng công thức nào để xoay từng khối xung quanh trục?

Tôi đã xem xét các câu hỏi và câu trả lời tương tự hiện có nhưng không thể tìm thấy câu trả lời mà tôi có thể làm việc.

Trợ giúp sẽ được nhiều đánh giá cao.


thuộc về game dev.

và nếu nó ở đây ... cho chúng ta thấy một số cấu trúc dữ liệu

Nếu bạn chỉ xoay theo nhiều góc vuông, thì điều này khá cơ bản. Chỉ cần vẽ một vài sơ đồ, và bạn sẽ có thể tìm ra một giải pháp số nguyên.
Kerrek SB

3
Tôi sẽ không thực sự tính toán các phép quay, chỉ cần đặt tất cả bốn phiên bản có thể xoay trong một mảng.
fredoverflow

1
Tôi cũng sẽ đề xuất những gì @FredOverflow nói. Nếu bạn nhìn vào câu hỏi của tôi (tương tự câu hỏi của bạn), bạn sẽ thấy cách tôi lưu trữ một khối duy nhất để thực hiện.
bummzack

Câu trả lời:


22

Logic xoay Tetris tiêu chuẩn được gọi là Super Rotation System. SRS phù hợp với lối chơi Tetris cấp cao, cho phép thực hiện nhiều biến thể trên cú đá trên tường và vòng quay.

Tất cả các tetromin tồn tại bên trong một hình vuông giới hạn và xoay quanh tâm của hình vuông này trừ khi bị cản trở. Tetrominoes có chiều rộng 3 (J, L, S, T, Z) được đặt ở hai hàng trên cùng của hình vuông giới hạn và (đối với J, L và T) với mặt phẳng hướng xuống. Tôi được đặt ở hàng giữa trên cùng.

Tất cả các tetrominoes sinh sản trong 2 hàng thường ẩn ở đầu sân chơi. Chúng được đặt ở trung tâm của các hàng này, làm tròn sang trái. Khi một tetromino hạ cánh, nó không khóa cho đến khi hết hạn khóa. Hành vi trì hoãn khóa, được gọi là Infinity của Công ty Tetris, đặt lại độ trễ khóa bất cứ khi nào tetromino được di chuyển hoặc xoay. Hard drop thường được ánh xạ lên, không có độ trễ khóa.

Tetrominos trong hộp giới hạn xoay của họ.

Có một biến thể phổ biến khác được gọi là ARS, được sử dụng trong các trò chơi Tetris: The Grand Master của Arika .


7

Công thức chung để xoay quanh nguồn gốc là

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

Trong 90 độ, nó trở thành

xNew = -y
yNew = x

Vì vậy, trước tiên hãy lấy tọa độ trung tâm gạch tương đối với điểm trục:

x = xBrickCenter - xPivot
y = yBrickCenter - yPivot

Sau đó xoay chúng xung quanh điểm trục:

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

Và sau đó thêm tọa độ trục vào điểm xoay:

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

Nhưng nếu bạn cần xoay theo bội số 90 độ, bạn có thể lưu trữ bốn bộ vị trí gạch cho mỗi hướng và chuyển đổi giữa chúng thay vì thực sự xoay.


0

Bạn có thể xoay tất cả các vòng vuông (a-qua-h theo 2 vị trí, A-qua-P theo 4 vị trí, v.v.) xung quanh khối trục đó:

ABCDE MNOPA
Bông cà phê LghaB
Oh.dG -> Kf.bC
NgfeH JedcD
MLKJI IHGFE

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.