2012-06-19 5 views
-4

회전 수식별로 각 조각을 회전 시켰습니다. 더 많은 세부 사항, 회전 각도가 너무 90 때문에 :테트리스 : 조각 회전시 문제가 발생했습니다.

xNew = y; 

yNew = -x; 

하지만 내 방법은 두 가지 문제 충족 : 상자 중

1) : 조각의 각 유형 광장 4 × 4에 적합. (왼쪽 아래 0,0) 그러나이 회전에 의해, 어떤 경우에는 그들은이 박스에서 빠져 나올 것입니다. 예를 들어 좌표 (5,6)가있는 점이 있습니다. 따라서이 좌표를 4x4 상자에 다시 맞추는 방법을 알려 주시거나 여기에 다른 공식을 알려주십시오.

2) I 경우 : (동일한 행 또는 동일한 열에서 4 개의 사각형)은 단지 두 개의 회전이 있습니다. 그러나 위의 방법에서, 그들은 여전히 ​​4 조각을 가지고 있습니다. 그래서 이것을 방지하는 방법. 당신은 또한 왼쪽/오른쪽/위/아래를 통해 조각을 이동해야합니다,

감사합니다 :)

답변

3

테트리스 보드는 그리드 레이아웃입니다. 매우 이해하기 쉬운 방법은 테트리스 조각이 '채워진'정사각형 수에 지나지 않는다는 것입니다. 부울 의미에서 조각은 0으로 표시되거나 채워지지 않거나 1으로 채워질 수 있습니다. 그리드 (또는 타일 기반) 접근법을 사용하면 블록이 경계에서 벗어나는 것을 방지 할 수 있으며 추가 보너스는 하단 충돌에 도달했을 때 충돌 코드를 단순화합니다.

의사 코드 : 당신은 grid[x][y] 당신이로 이동하려는 및 block.move(direction)가 지정되어 어떤 방향으로 하나 개의 격자 공간에 의해 당신의 조각지도를 조정하는 임의의 함수 인 공간 체크 if (!grid[x][y]) block.move(direction)을 할 수 있습니다. 이 점에서 게임 루프는 block.move('down')을 사용하여 조각을 점차적으로 떨어 뜨리고 다음 조각에 대해서는 else block.stop(), game.generateBlock()을 사용할 수도 있습니다.

그리드 방법을 사용하면 회전 된 부분이 if(x < 0 || x > gridWidth) block.move(direction)으로 범위를 벗어나는 지 쉽게 확인할 수 있습니다. direction은 범위를 벗어난 방향으로 이동합니다. 이 초보적인 작품으로 만 설명되어 무엇

▇ ▇  ▇ ▇ ▇ ▇ ▇ 
    ▇ or ▇ ▇ ▇ or ▇ or  ▇ 
▇ ▇    ▇ 

가 있다는 것입니다 : 그리드 기반의 예제를 계속

, 당신의 개는 정말 온/오프뿐만 아니라 자신의 회전이 너무로 표시됩니다에 불과 패턴입니다 조각은 종종 직사각형 조각으로 인해 중심점을 중심으로 회전하지 않습니다. 그러나 패턴을 부울 상태로 쉽게 저장할 수 있으며 방향이 무엇인지에 관계없이 테스트 할 코드를 작성할 수 있습니다. . https://stackoverflow.com/a/8131337/571506

: 각 조각 패턴의 유한 수를 가지고 있기 때문에

이 (최대 4) 그것은 당신의 최대 관심사에 아마에 단순히 하드 코드에서 그들이다이 대답은 당신이 영감을 찾을 수있는 몇 가지 코드를 제공 될 수 있습니다

3D 게임 프로그래밍으로 이동할 가능성이 조금이라도있는 경우이 간단한 변수로 리니어 선형 대수학을 연구하고 학습하는 것이 좋습니다. 각 조각을 행렬로 저장할 수 있으므로 기본 패턴 행렬에 간단한 변형을 적용하여 새로운 패턴을 얻을 수 있습니다. 이것은 쉽게 위조 될 수 있거나, 모두 밖으로 나갈 수 있습니다.3D 게임 프로그래밍으로 전환 할 수있는 작은 기회가 있다면 연구를 수행하고 간단한 변수를 사용하여 선형 대수학을 배우는 것이 좋습니다. 알고리즘에 대해서는 다음 질문을 확인하십시오. How do you rotate a two dimensional array?

테트리스는 문서화가 잘 된 게임이며 '도구 상자'에 많은 기술을 추가 할 수 있습니다. 제공된 프로그래밍 패러다임을 가능한 한 많이 사용하면서 많은 양의 프로그래밍을 수행하면서 장기적으로 이점을 누리게 될 것입니다.

0

나는 질문이 이해하지 않지만, 질문 1, 당신은 단지 회전보다 더 많은 일을 할 필요가있다.

+0

예. 나는 당신의 해결책을 가지고 있습니다. 그러나 나는이 작은 문제에 대해 복잡하다고 생각한다. 그러므로 다른 좋은 해결책이있을 것이라고 생각한다. – hqt

+0

질문 2 : 당신이 보았 듯이,'| '네 번 회전하면'|'과'__'가 두 개뿐입니다. . 그러나 실제로, 그것은 4 개의 조각을 가질 것이다. (2 개는 동일하지만 다른 위치에 있습니다 !!!) – hqt

+0

이것은 중심을 중심으로 회전하지 않기 때문입니다. 수정 사항은 # 1과 동일합니다. 나는 더 간단한 해결책을 모른다. –