Что мне нужно для создания игры CLI? Какие-нибудь полезные ресурсы? - PullRequest
1 голос
/ 26 февраля 2011

Так что потратили некоторое время и решили сделать небольшую игру в качестве побочного проекта, пока я учусь в школе.

Я бы хотел сделать игру для командной строки, возможно, какую-нибудь ролевую игругрязь.У меня вопрос: что мне нужно, чтобы это стало реальностью?

Я посмотрел ncurses и читал какую-то документацию, это необходимый шаг или есть что-то более простое?Есть ли какие-то особые технологии, которые мне понадобятся по сравнению с обычным приложением командной строки, которое я мог бы сделать из него школьное?

Спасибо.

1 Ответ

1 голос
/ 26 февраля 2011

Вам нужно две вещи:

  1. игровой движок
  2. Интерфейс

Это то же самое, что вам нужно для игры с графическим интерфейсом. Единственными единственными отличиями являются ваш механизм ввода и вывода.

Итак, напишите свой игровой движок, убедитесь, что он адаптируется, а затем интерфейс командной строки для управления этим движком.

========= Редактировать в отношении комментариев: =========

Целью любого интерфейса является сопоставление пользовательских запросов с запросами движка. Не зная, на каком языке вы говорите, специфика будет немного ... ну ... неспецифичной.

Я могу рассказать вам, как бы я делал это на Java.

Я бы создал класс UserRequest со следующими основными характеристиками:

абстрактный класс UserRequest {

protected GameEngine engine;
protected String command;
protected int numArgs;

public UserRequest(GameEngine engine) { 
    this.engine = engine; 
    this.command= command; 
    this.numArgs= numArgs; 
}

public abstract void callback(User user, String[] args);

protected void checkArgs(String[] args) {
    if(args == null || args.length != numArgs) {
        throw new IllegalArgumentException("your args suck...");
    }
    if(!args[0].equals(command)) throw new IllegalArgumentException("commands don't match");
}

}

В моем интерфейсе у меня будет Map<String,UserRequest>, который заполняется так:

Map<String,UserRequest> behaviors = new HashMap<String,UserRequest>();
behaviors.add("MOVE",new UserRequest(engine,"MOVE",2) {
    // define the engine callback
    public void callback(User user, String[] args) {
        // assume args[0] is command
        int x = Integer.parseInt(args[1]);
        int y = Integer.parseInt(args[2]);
        engine.move(user,x,y);
    }
}

public void repl() {
    while(true) {
        // assume you have a form of input - scanner perhaps?
        String inputline = acquireNextInputLine();
        String[] tokens = inputline.split("\\s"); // default split on white space
        UserRequest behavior = behavior.get(tokens[0]);
        if(tokens == null) displayError(inputLine);
        try { behavior.callback(currentUser,tokens); }
        catch(Exception e) displayError(e); // assume you have better error reporting than this!
    }
}
...