2013-03-06 1 views
0

동일한 메인 게임 루프에서 실행되는 게임 내에서 다양한 게임 유형을 처리하기위한 좋은 전략이 있다면 궁금합니다. 즉, 세 가지 게임 유형이있는 게임이 있습니다. 각 유형간에 약간의 차이가 있으므로 현재 동일한 루프/클래스를 사용하여 실행됩니다. 하나는 '시간이 다 떨어지기 전에 얼마나 많은 X를 얻을 수 있는가'이고 또 하나는 '10 X를 잡는 데 얼마나 걸릴 것인가'이고, 마지막은 '연습/무한 시간'게임 유형입니다. 지금 당장의 전략은 게임의 모든 차별화 부분에서 if, then, else 체크를 실행하고 각 게임 유형에 대해 적절한 로직을 수행하는 것입니다.게임 디자인 : 다른 게임 유형을 다루고 있습니까?

if (gameType == INFINITE) 
{...} 
else if (gameType == TIMED) 
{...} 
else 
{...} 

이것은 나에게 끔찍하게 틀린 것으로 보입니다. 또한 비효율적입니다. 나는이 검사를 한 번하고 앞으로 나아갈 수있는 것처럼 보이는 때 이러한 모든 불필요한 검사로 CPU를 숙청하고 싶지 않습니다. 또한 모든 클래스를 복사하여 붙여 넣기하지 않고 각각의 클래스를 약간만 변경하려고합니다. 이것을 할 수있는 좋은 방법이 있습니까?

답변

3

이를 처리하는 한 가지 방법은 화면 관리자 시스템을 만드는 것입니다. 이는 기본적으로 업데이트 및 그리기 작업이 포함 된 추상 클래스를 가짐을 의미합니다. 그런 다음 각각의 게임 (스크린)을 상속 받아 각 플레이어가 자체 업데이트/그리기 동작을 할 수있게합니다. 궁극적으로 그리기/업데이트를 결정하려면 if-else 또는 switch 문이 필요합니다. 이를 최소화하는 한 가지 방법은 추상적 인 유형의 변수를 사용하여 현재 "화면"을 추적하는 것입니다. 그런 다음 해당 변수에 업데이트/그릴 필요가있는 화면을 다형 적으로 할당 할 수 있습니다. 그런 다음 현재 화면에서 업데이트 또는 그리기를 호출하면 구체적인 유형을 알 필요가 없습니다.

거기에 예 많은, 괜찮은 XNA 하나가에서 찾을 수 있습니다 http://xbox.create.msdn.com/en-US/education/catalog/sample/game_state_management

아이디어는 완전히 양도가. 대부분이 시스템을 사용하여 메뉴 화면과 사물을 추가하지만, 귀하의 목적에 사용할 수없는 이유는 없습니다.

+0

오, 소년. 이것은 내 코드의 주요, 주요 리팩터링을 필요로합니다. – Clev3r

+0

@ Celver yea 문제가 될 수 있습니다. –

+0

아 ... 어떻게하면 객관적으로 '진정한'추상적 수업을 놓칠까요? 그러나, 그 갈 방법 : 3 (또는 N) 구현 및 해당 인스턴스를 생성 할 수있는 추상 컨트롤러가 동의합니다. 프로토콜도 가능합니다 :) – YvesLeBorg