Javascript 如何让代码选择随机变量,然后将其从可能的选择列表中删除
我几乎没有进入JS方面的编码,我需要一个小项目,我的工作,所以我道歉提前,如果我没有提供正确的信息 所以我想让这段代码做的是Javascript 如何让代码选择随机变量,然后将其从可能的选择列表中删除,javascript,arrays,loops,splice,Javascript,Arrays,Loops,Splice,我几乎没有进入JS方面的编码,我需要一个小项目,我的工作,所以我道歉提前,如果我没有提供正确的信息 所以我想让这段代码做的是 从可能的选择列表中删除初始选择(是否有效?) 创建一个包含其余可能选择的变量(我想我知道了?) 从列表中随机选择(我想我知道了?) 然后从可能的选择中删除该选择,以便不再选择它。(坏了) 然后循环运行,直到没有更多可能的选择。(我不知所措) 旁注:我也不知道是否有“更干净”的方式来写这篇文章 这就是我迄今为止所尝试的 // Target success chance. v
// Target success chance.
var successRate = 0.90;
// Check if this succeeded.
if (Math.random() < successRate) {
// Determine the thunder element ID used for shock.
var elementId = 7;
// Damage formula used for the shock effect.
var damage = user.mat * 3;
// Check if a critical hit landed.
if (target.result().critical) {
// Apply critical damage.
damage = this.applyCritical(damage);
}
// Get all of the alive members from the opponent's unit.
var members = this.opponentsUnit().aliveMembers();
// Remove the main target from the member list.
members.splice(members.indexOf(target), 1);
// Play the shock animation on the target.
target.startAnimation(137);
// Increase the damage received by the shock damage with the thunder multiplier.
value += Math.ceil(damage * target.elementRate(elementId));
// Other members of the opposite team need to be shocked.
var extraTargets = members;
// Loop each of these 4 members.
while (extraTargets--) {
// Get a random member from the opponent's team.
var member = members[Math.floor(Math.random() * members.length)];
// Check if the member exists.
if (member) {
// Play the shock animation on the random member.
member.startAnimation(77);
// Make the random member take damage with the thunder multiplier.
member.gainHp(-Math.ceil(damage * member.elementRate(elementId)));
// Start the damage popup on the random member.
var text = 'damage';
var motion = 'Pop High, Wait, Wait, Wait, Stretch';
var font = 'this.standardFontFace()';
var size = 'this.standardFontSize()';
var color = '#BBFFFF';
member.startDamagePopup().callCustomPopup(text, motion, font, size, color, x, y);
// Clear the random member's results.
member.clearResult();
// Remove the random member from the list of valid targets.
members.splice(members.indexOf(member), 1);
// Check if the member is dead.
if (member.isDead) {
// If the member is dead, have it collapse.
member.performCollapse();
}
}
}
}
//目标成功机会。
var成功率=0.90;
//检查此操作是否成功。
if(Math.random()
它不会循环通过所有可能的选择,我不知道一旦选择了它,它是否会从选择列表中删除选择,因为由于循环失败,我无法测试第一部分
感谢您的时间:)所有这些方法(例如
.applycritic()
)都是在哪里定义的?它们显然是习惯性的,远远不符合标准。它们是否来自类
?正如我之前提到的,我是一名新手,因此我不确定我是否能正确回答这个问题,但它们来自我使用的游戏创建引擎的结构。您可以使用库采样从集合中随机选择项目,而无需替换它们。我已经用过了。它很容易实现,也不难理解。您的while
循环不会开始运行,因为如果成员
变量是数组,则使用递减运算符(extraTargets--)
将返回NaN
,这是错误的。这就是为什么循环没有运行的原因。那么我需要做什么或研究什么呢?