Вам нужно две вещи:
- игровой движок
- Интерфейс
Это то же самое, что вам нужно для игры с графическим интерфейсом. Единственными единственными отличиями являются ваш механизм ввода и вывода.
Итак, напишите свой игровой движок, убедитесь, что он адаптируется, а затем интерфейс командной строки для управления этим движком.
========= Редактировать в отношении комментариев: =========
Целью любого интерфейса является сопоставление пользовательских запросов с запросами движка. Не зная, на каком языке вы говорите, специфика будет немного ... ну ... неспецифичной.
Я могу рассказать вам, как бы я делал это на 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!
}
}