2013-04-20 1 views
2

저는 아직 프로그래밍에 비교적 익숙하지 않습니다. SDL로 게임을 진행하는 중입니다. 나쁜 습관을 사용하고 있는지 여부를 궁금해합니다.함수가 int 대신 문자열을 반환하도록하는 것이 좋지 않습니까? (C++)

예를 들어, 사용자가 입력 할 게임 모드를 결정하는 titleScreen()이라는 함수가 있습니다.

0-3의 값을 반환 한 다음 if/else/else/else 문을 통해 처리하여 선택한 모드를 결정할 수 있습니다.

또는

I는 "STORYMODE", "프리 플레이", "튜토리얼"과 같은 문자열을 반환 또는 "QUIT"어느 모드를 결정하는 것을 사용할 수

.

나는 두 번째 모드를 좋아하는데, 이는 어떤 모드가 선택되었는지를 알아 내려고 시도 할 때 initital 혼란을 없애기 때문입니다.하지만 내 머리 뒤쪽에 그런 식으로 문제가 있다는 느낌이 들었습니다.

내 경우 값을 반환하는 가장 좋은 방법은 무엇입니까?

답변

8

이 경우 성능이 저하되지 않도록 가독성을 높이기 위해 모든 상태를 나열하는 enum을 사용해야합니다. 예를 들어 : 당신이 그것에 대해 열거 형을 사용한다

enum mode { 
    STORYMODE, 
    FREEPLAY, 
    TUTORIAL, 
    QUIT 
} 
+5

그것은 성능에 관한 것이 아니라 가능한 값 집합에 유형을 지정하는 것입니다. C++ 11에서는 실제로 강하게 입력됩니다. –

2

, 그 사실 int로하지만, 단지 더 읽을 수 있습니다. 그래서 내가 만들 것입니다 :

enum GameMode { STORYMODE, FREEPLAY, TUTORIAL, QUIT }; 

및 방법의 반환 형식의 게임 모드가 있습니다.

편집 2 :

당신은 모든 게임 모드 버튼이있는 경우, 단지 열거 형을 반환하거나 버튼을 클릭하면 열거 매개 변수와 함께 다른 메서드를 호출합니다. 당신이 문자열로 지금하는 것과 같은 방식입니다.

+0

정확하게 열거 형에 대한 선언을 어디에 넣을까요? 함수가 호출되기 전에 main에서? 또는 enum이 자체 함수로 간주됩니까? – brocoder

+0

아, 나는 네가 잘 질문하는 것을 이해하지 못했다. 그래서 당신은 그 값들을 콘솔에 입력으로 가지고 있습니까? – Vajda

+0

답장을 보내 주셔서 감사합니다. SDL 응용 프로그램을 만들고있어 main.cpp, function.h 및 function.cpp가 내 파일로 포함되어 있습니다. 내 주요 함수는 init(), loadFiles()를 호출 한 다음 titlescreen()을 호출해야합니다. Titlescreen()는 enum 값을 반환해야하지만, main, titlescreen() 함수에서 열거 형을 작성하거나 function.h 및 function.cpp 파일에서 자체 줄을 작성하고 싶은지 잘 모르겠습니다. . 사과드립니다. 나는이 모든 것에 대해 아주 새롭습니다. 책으로 배우는 동안, 나는 도움을 줄 수는 없지만 내가 준비하지 못한 목표를 다루려고 노력할 수는 없습니다. – brocoder

0

게임 개체에 공유 포인터를 반환하면 어떨까요? 아래 코드는 titleScreen이 호출 된 객체가 무엇이든간에 반환 된 객체에 operator()을 호출해야하는 몇 가지 의사 코드입니다.

class GameI { 
public: 
    virtual ~GameI() {}; 
    void operator() = 0; 
} 

typedef std::shared_ptr<GameI> SharedGame; 

class GameStory { 
public: 
    void operator(); 
} 

void GameStory::operator() 
{ 
    ... 
} 

SharedGame titleScreen() 
{ 
    ... 
    return SharedGame(new GameStory()); 
} 
관련 문제