1

在过去的几周里,我一直在创建一种完全围绕玩家行为的基于文本的冒险游戏。一般的想法是有一个模拟类来维护世界的状态,并且是模拟控制器(即玩家)的责任来保持动作的进行。大多数情况下,会说控制器告诉模拟要做什么(即模拟向前 1 个时间步长),但有时模拟需要向控制器询问一些事情。因此,我创建了一个这样的界面:

/**
 * 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 的 Adob​​e Flex 来创建一个非常简单的用户界面,该界面将通过实现或持有实现SimulationController接口的东西来与模拟通信。有“长轮询”的概念,但我不承认完全知道如何将它与诸如此类的远程对象一起使用。

我的问题是,将信息推送到播放器以便所有Simulation请求直接发送到 Flash 客户端并且所有控制循环逻辑都可以保留在 Java 端的良好设计模式是什么?

谢谢!

4

1 回答 1

0

在 wiki 上阅读Push 技术以了解主要概念。之后阅读 BlazeDS 开发者指南中的消息部分。

我假设您对 BlazeDS 有一定的经验..(至少您将它安装在某些应用程序服务器中)。查看示例文件夹,您会发现两个有趣的示例(一个聊天应用程序和另一个名为 datapush 的应用程序)。它们很容易理解。

于 2010-07-23T14:59:29.083 回答