2012-11-21 2 views
0

최근에 저는 좋은 회사에서 인터뷰를했으며 효율적인 데이터 구조로 테트리스 게임을 디자인하도록 요청 받았습니다. 각 도형에 대해 2D 배열에 응답했지만 인터뷰 담당자는 더 나은 답변을 찾고있었습니다. 그런 다음 그는 Ludo도 디자인 해달라고 부탁했습니다.디자인 테트리스 게임

이 두 가지 질문에 대한 의견이 있으십니까?

답변

3

나는 Ludo를하는 방법을 모르지만, Tetris를 염두에 두어야 할 첫 번째 것은 비트 마스크를 사용하는 것입니다.

테트리스에있는 모든 도형을 포함하고 마스크의 비트를 켜서 '도형'을 만들 정도로 충분히 큰 '슈퍼 도형'을 만들 수 있습니다.

이렇게하면 각 도형이 동일한 객체 유형이 될 수 있습니다. 그들이 '착륙'할 때 보드를 나타내는 더 큰 비트 마스크에서 비트를 켤 수 있습니다. 올바른 비트 세트가 모두 '만들어졌습니다'일 때 이벤트를 처리 할 수 ​​있습니다.

3

각각의 조각에 대해 기원 (세 번째 오프셋은 {0.0})의 3 쌍의 오프셋의 목록을 선택해야합니다. 유리 안쪽에 자리를 손에이 목록으로

I {0,1} {0,2} {0,3} 
J {0,1} {1,1} {2,1} 
L {0,1} {-1,1} {-2,1} 
O {0,1} {1,1} {1,0} 
S {-1,0} {-1,1} {-2,1} 
T {-1,1} {0,1} {1,1} 
Z {1,0} {1,1} {2,1} 

하면, 해당 모양을위한 공간 가용성을 위해 "유리"를 확인 모양을 그릴 회전을 적용 할 수있을 것이며,이는 다음과 같이 shapes를 인코딩 할 것 그들의 마지막 휴게소에서. 대부분의 작업에 두 개의 중첩 루프가 필요한 2D 구조와 달리이 구조를 사용하면 단일 루프 또는 루프없이 테스트 할 수 있습니다. unroll 사소한 네 단계.