За последние несколько недель я создавал своего рода текстовую приключенческую игру, вращающуюся исключительно вокруг действий игрока. Общая идея заключается в том, что существует класс Simulation, который поддерживает состояние мира и является обязанностью SimulationController (т. Е. Игрока) за продолжение действий. В большинстве случаев будет сказано, что Контроллер говорит Моделированию, что делать (то есть, имитировать 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()
, но симуляция также может вызывать другие методы для запроса некоторой информации от игрока.
В настоящее время я использую Adobe Flex с BlazeDS для создания очень простого пользовательского интерфейса, который будет взаимодействовать с Simulation путем реализации или хранения чего-либо, реализующего интерфейс SimulationController
. Существует понятие «длинный опрос», но я не признаю, что знал, как использовать его с такими удаленными объектами, как этот.
У меня вопрос: каков хороший шаблон проектирования для передачи информации в проигрыватель, чтобы все запросы Simulation
направлялись прямо во Flash-клиент и чтобы вся логика цикла управления могла оставаться на стороне Java?
Спасибо!