게임의 진행,,

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
킬레인

게임의 진행,,

Post by 킬레인 »

이런식으로 게임이 돌아 간다고 할떄..

오프닝
  :
메뉴
  :
게임
  :
  :
종료


화면을 업데이트 하는 함수 GraphicUpdate() 함수가 있다고 할떄,,
제가 생각할수 있는것이,,아래와 같은 방법밖에 없었는데요,,

Code: Select all

void GraphicUpdate()
{
   switch(State)
   {
        case 오프닝:
             오프닝 출력함수();
             break;

        case 게임:
             게임 출력함수();
             break;
                 :
                 :
   }
}
보통 이런식으로 처리하나요? 뭔가 멋진 방법이 있을것 같기도 한데,,
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

관계를 아예 뒤집어서

오프닝() ... 오프닝출력()
|
메뉴() ... 메뉴출력()
|
게임() ... 게임출력()
|
종료() ... 종료출력()

이런 것도 가능합니다. GPG 2권의 1.12 윈도우즈 기반 게임을 위한 선형적 프로그래밍 모델 을 참고하세요.

기존의 방식(아마도 메시지 펌프에 묶여있는)에서 현재 제가 제일 괜찮다 싶은 것은 GPG 3권 1.2 객체 조합식 게임 프레임웍의 계층적 방식입니다. case 문을 극복하는 것 자체는 GoF의 Design Patterns와 파울러의 Refactoring에서 좋은 해답을 얻을 수 있을 것입니다.
sonee
Posts: 35
Joined: 2001-11-09 09:00
Contact:

Post by sonee »

명쾌한 해답은 못드리지만 걍 상속을 잘이용해서-_-a
class 화면출력베이스클래스 {virtual void draw()=0;}
class 오프닝출력클래스 : public 화면출력베이스클래스 {void draw();}
class 게임출력클래스 : public 화면출력베이스클래스{void draw();}
화면출력베이스클래스 graphicsupdate;

void GraphicUpdate()
{ graphicsupdate->draw(); }
오프닝시 graphicsupdate = new 오프닝출력클래스;
게임시 grahpicsupdate = new 게임출력클래스;
등으로 사용하시거나 함수포인터로 연결을...
개인적으로 화면출력베이스클래스가 아니라 게임루프클래스로 이름을 바꿔서 쓰셔도 좋을것 같은데요. 뭐 장단점이야 있겠지만요..
Locked