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;
}
}
好的,所以这可能是重复的,但我个人没有在 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;
}
}