Javascript 案例:"look at" + 项

Javascript Case: "look at" + item

好的,所以这可能是重复的,但我个人没有在 Internet 或 Whosebug 上看到任何关于此的信息。

我正在做一个游戏项目,我一直在尝试制作一个基于文本的游戏。

在这个游戏中,我有一个 switch 语句,用于当用户输入命令时。

到目前为止,我已经有了 Inventory 和 Look(环顾四周的环境)的东西,但是我如何在 switch 语句中处理特定的东西?

例如:

submit = function(input) {
    switch(input) {
        case "LOOK":
            lookaround();
            break;
        case "LOOK AT" + item:
            look();
    }
}

这是我遇到问题的 LOOK AT 行。我不知道如何使字符串以这种格式工作,除非我单独为每个项目设置一个案例,例如 case "LOOK AT ORANGE" 或 case "LOOK AT TREE".

我希望我解释得够透彻了。谁能给我一些建议?

谢谢

编辑

我认为重要的是要注意用户正在将输入输入到输入框中,因此输入的值将是一个字符串。

如果有助于查看我编写的代码,请在下面的评论中告诉我。

编辑

感谢您的帮助!

我使用了正则表达式(感谢@red-devil)和切片的混合。它现在完美运行!

Switch 使用常量,而不是像 'LOOK AT' + anything.

这样的表达式

您可以定义一个对象来将您的任何案例映射到您自己的函数。像这样:

var looks = {
  'lookat-something' : function() {
    alert('something');
  },
  'lookat-other-thing' : function() {
    alert('other thing');
  },
};


var x = 'lookat-other-thing';

looks[x]();

它比以任何方式使用 switch 都灵活得多。

如果我没理解错的话,您希望用户能够输入 LOOK AT,然后输入任何项目名称。这里的问题是你有这个不祥的 item 变量可以代表任何东西,这是行不通的。 我会建议这两种方式之一: 按照您的示例行事:

submit = function (input) {
    switch (true) {
        case input == "LOOK":
            alert("Look")
            break;
        case input.startsWith("LOOK AT"):
            alert(input)
            break;
    }
}

if (typeof String.prototype.startsWith != 'function') {
    String.prototype.startsWith = function (str) {
        return this.slice(0, str.length) == str;
    };
}

其次,这是我推荐的方法,您实现一种将任何输入解析为命令和参数的方法。一种方法是在每个 space 字符处拆分输入,然后第一个值是命令,其余值是参数。这将要求您使用像 LookAt 而不是 LOOK AT 这样的单字命令。 所以像这样:

function submit(input) {
    var parts = input.split(" ");
    var cmd = parts[0];
    var args = parts.slice(1);

    switch (cmd) {
        case "Look":
            lookAround();
            break;

        case "LookAt":
            lookAt(args[0]);
            break;
    }
}