2010-07-22 3 views
1

지난 몇 주 동안 저는 플레이어의 행동을 중심으로 일종의 텍스트 기반 어드벤처 게임을 만들었습니다. 일반적인 생각은 세계의 상태를 유지하는 Simulation 클래스가 있으며, 동작을 유지하는 SimulationController (즉, 플레이어)의 책임입니다. 대부분의 경우 컨트롤러가 시뮬레이션에 무엇을해야하는지 (즉, 1 타임 스텝 앞당기는 것)를 알려주지 만, 때로는 시뮬레이션이 컨트롤러에 무엇인가를 물어야 할 때가 있습니다. 모든이의Adobe BlazeDS/LiveCycle을 사용하여 클라이언트에 질문 보내기

/** 
* An interface to a GUI, command line, etc; 
* a way to interact with the Simulation class 
* @author dduckworth 
* 
*/ 
public interface SimulationController { 

    /** 
    * Returns the index of a choice from a list 
    * 
    * @param message: prompt for the player 
    * @param choices: options, in order 
    * @return: the index of the choice chosen 
    */ 
    public int chooseItem(String message, List<String> choices); 

    /** 
    * Returns some text the player must type in manually. 
    * 
    * @param message 
    * @return 
    */ 
    public String enterChoice(String message); 

    /** 
    * Give the user a message. This could be notification 
    * of a failed action, some response to some random event, 
    * anything. 
    * 
    * @param message 
    */ 
    public void giveMessage(String message); 

    /** 
    * The simulation this controller is controlling 
    * @return 
    */ 
    public Simulation getSimulation(); 

    /** 
    * The primary loop for this controller. General flow 
    * should be something like this: 
    * 1) Prompt the player to choose a tool and target 
    *  from getAvailableTools() and getAvailableTargets() 
    * 2) Prompt the player to choose an action from 
    *  getAvailableActions() 
    * 3) call Simuluation.simulate() with the tool, target, 
    *  action chosen, the time taken to make that decision, 
    *  and this 
    * 4) while Simulation.isFinished() == false, continue onward 
    */ 
    public void run(); 
} 

주요 제어 루프가 SimulationController.run()에서 구현해야하지만 시뮬레이션은 플레이어에서 몇 가지 정보를 요청하기 위해 다른 방법을 호출 할 수 있습니다 : 따라서, 정말 같은 인터페이스를 만들었습니다.

현재 BlazeDS와 함께 Adobe Flex를 사용하여 SimulationController 인터페이스를 구현하는 항목을 구현하거나 보유함으로써 Simulation과 통신 할 매우 간단한 사용자 인터페이스를 만듭니다. 'long polling'이라는 개념이 있지만, 이와 같은 원격 객체와 함께 사용하는 방법을 알고 있다는 것을 인정하지 않습니다.

제 질문은 모든 Simulation 요청을 플래시 클라이언트에 직접 전달하고 모든 제어 루프 논리를 Java 측에 유지할 수 있도록 플레이어에게 정보를 전달하는 좋은 디자인 패턴은 무엇입니까?

감사합니다.

답변

0

주요 개념을 이해하려면 Push technology에 대한 위키를 읽으십시오. 그 후 BlazeDS 개발자 가이드에서 메시징 부분을 읽으십시오.

BlazeDS에 대한 경험이 있다고 가정합니다. (적어도 일부 응용 프로그램 서버에 설치했을 때). 샘플 폴더를 살펴보면 두 가지 재미있는 예제 (채팅 응용 프로그램과 datapush라는 또 다른 응용 프로그램)를 찾을 수 있습니다. 그것들은 아주 이해하기 쉽습니다.

+0

안녕 코넬 그게 도움이 되겠지만, 푸시를 사용해도 플레이어에게 응답을 요청하고 그가 회신 할 때를 알 수있는 간단한 방법이 없습니다. 예를 들어, 별도의 스레드가 실행 중일 수 있습니다.이 경우 "우유는 어디 있습니까?"라는 질문을 던지게됩니다. 클라이언트는 응답을 다른 채널로 밀어 넣거나 원래 원격 객체의 메소드를 호출하여 대답 할 수 있지만 그 중 아무 것도 원활하거나 직관적이지는 않습니다. – duckworthd

+0

동의 할 지 모르겠지만 메시징으로 얼마 동안 노력하고 있습니다. 어쩌면 여러 가지 빛을 보았을 것입니다. 예를 들어, "우유가 어디 있습니까?"라는 질문으로 메시지를 작성해야합니다. 귀하의 질문에 관심있는 모든 가입자. 이론적으로 메시징 프레임 워크는 이중 소켓없이 통신을 시뮬레이트하기 위해 수행 된 여러 가지 단점을 숨겨야합니다. –

관련 문제