-2

我一直在为课堂制作一个基于文本的游戏,并且通过一些试验和错误就能够完成大部分工作。但是我在用户输入解析方面遇到了障碍,我已经不得不简化得比我喜欢的还要多。这个想法是有一个将字符串作为输入的方法,然后调用在另一个类中实例化的对象中的方法。这是代码,是的,我知道这是一团糟。

看来我对这个问题的表述有点糟糕。除了不知道如何做我想做的事之外,我实际上没有遇到任何问题。Gilbert La Blanc 提出的方法非常好,并且解决了我的问题。也许我真的会通过这个决赛!谢谢大家的帮助。

import java.util.Scanner;

public class Parser{
static String[] Prepositions = {"on", "in", "under"};
static String Word;

public static void Parse(String Raw){
    Raw.toLowerCase(); //Make input lower case

    Scanner Splitter = new Scanner(Raw).useDelimiter(" "); //Split into seperate words
    Word = Splitter.next(); //Get first word
    Splitter.close();
    CheckFirst(Word);
}

public static void CheckFirst(String Word){
    switch(Word){
        case "north":
        case "n":
        case "south":
        case "s":
        case "east":
        case "e":
        case "west":
        case "w":
            Player.Location.LeaveRoom(Word);
            break;
        case "take": TakeWhat(); break;
        default: System.out.print("That was absolute gibberish!"); break;
    }
}

public static void TakeWhat(){
    System.out.println("Take what?");
    System.out.print("> ");
    String ToTake = Game.Input.next();
    ToTake.toLowerCase();

    switch(ToTake){
    case "key": break;
    default: TakeWhat();
    }
}

}

4

1 回答 1

0

您已经有两组词(介词、词),并且正在添加第三组(宾语)。您可以看到 if / switch 语句将如何变得笨拙。

管理此问题的一种方法是创建一个单词和动作列表。

您将从一个界面开始。

package com.ggl.text.game;

public interface WordAction {

    public boolean isWord(String word);

    public void execute();

}

接下来,您创建类来执行与单词对应的操作。这是一个示例类。

package com.ggl.text.game;

public class NorthAction implements WordAction {

    private static final String WORD = "north";

    @Override
    public boolean isWord(String word) {
        word = word.toLowerCase();
        if (WORD.equals(word) || (WORD.startsWith(word))) {
            return true;
        } else {
            return false;
        }
    }

    @Override
    public void execute() {
        // TODO Move player North
    }

}

最后,您创建一个 WordAction 类的列表。您将创建的所有操作类添加到列表中。

    List<WordAction> actions = new ArrayList<WordAction>();
    actions.add(new NorthAction());

稍后,当您解析输入字符串时,您将遍历 List 并像这样执行 execute 方法。

    for (WordAction wordAction : actions) {
        if (wordAction.isWord("north")) {
            wordAction.execute();
        }
    }
于 2015-05-15T22:17:20.690 回答