我正在和一些朋友为游戏聊天室制作机器人,但是我陷入了僵局。有没有一种可靠的方法可以从一串文本中获取数字,而这不会完全破坏没有经验的脚本小子的大脑?这是到目前为止我能想到的最好的方法,为便于说明,对变量进行了略微简化:
var k = [0];
function dieRoll(m,n) {
for(i = 0; i < m; i++) {
k[i] = Math.floor(Math.random()*n)+1;
}
}
var m = text[5];
var n = text[7];
if (text === 'roll '+m+'d'+n) {
dieRoll(m,n)
console.log(k);
}
最大的问题是,它仅限于一位数字输入。
编辑:在文本中循环查找整数正是我在寻找的东西。我没有太多的编程经验,因此我可能会倾向于陷入过于复杂和混乱的意粉代码混乱,这会使任何远程专业人士感到尴尬。至于我要查找的输入格式,“ roll [骰子数] d [骰子上的最高数]”。对于任何不知道的人,这是大多数桌面rpg使用的表示法。例如,两个正常的六面骰子的“掷骰2d6”。
编辑:并不是我一定反对正则表达式,我只是想了解正在发生的事情,这样,当我需要编辑或重用代码时,就可以做到而不会发疯。
编辑:非常感谢大家! split()似乎正是我要的!可能需要经过反复试验,但是我想我可以让她按照本周末的方式工作(是的,我称我的机器人为“她”)。
答案 0 :(得分:1)
基本上,您需要查看所使用输入的格式,并确定有关它的某些事实。这是我根据您的问题做出的假设。
1)首先执行“ roll”命令,后跟一个空格,然后 2)命令后,将以 x d y 形式提供骰子信息。
考虑到这些限制,这里应该可以工作:
function getRollParameters(inputCommand) {
var inputWords = inputCommand.split(' '); //Split our input around the space, into an array containing the text before and after the space as two separate elements.
var diceInfo = inputWords[1]; //Store the second element as "diceInfo"
var diceDetails = diceInfo.split('d'); //Split this diceInfo into two sections, that before and after the "d" - ie, the number of dice, and the sides.
//assign each part of the dicedetails to an appropriate variable
var dice = diceDetails[0];
var sides = diceDetails[1];
//return our two pieces of information as a convenient object.
return {
"dice": dice,
"sides": sides
};
}
//a couple of demonstrations
console.log(getRollParameters("roll 5d8"));
console.log(getRollParameters("roll 126d2"));
有效地,我们首先将字符串分成“命令”和“自变量”(我们想要的信息)。然后,我们使用“ d”作为中点拆分参数。这给了我们两个数字-d之前的一个和d之后的一个。然后,我们将这些值分配给变量,并可以根据需要使用它们。
这显然不会处理更多的创意或灵活的输入,并且未在所示示例中进行过测试,但这应该是一个不错的起点。