javascript - 滚动直到数组仅包含特定元素
问题描述
如果有人玩游戏,尤其是 GI,他们会知道这是关于什么的,但基本上我正在制作一个随机统计生成器。
第一个功能工作正常,它只是为了展示我打算如何工作。有一些主要的和随机的统计数据,选择一个主要的和 4 个随机的子,同时还删除一个选择的,以避免重复,就是这样。他们就是他们。
let sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
const main_stats=['ATK%','HP%','DEF%','EM','CR','CD','ER','Physical','Geo','Electro','Pyro','Cyro','Hydro','Anemo'];
// let sets=[];
let artifacts=[];
let random_main=main_stats[Math.floor(Math.random() * main_stats.length)];
let random_subs=[];
for(let i=0; i<4; i++){
let random_sub=sub_stats[Math.floor(Math.random() * sub_stats.length)];
random_subs.push(random_sub);
let index = sub_stats.indexOf(random_sub);
if (index !== -1) {
sub_stats.splice(index, 1);
}
}
let artifact={
main_stat: random_main,
sub_stats: random_subs,
rolls: 1
};
artifacts.push(artifact);
sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
console.log(artifacts)
然后在第二个函数中,我的目标是重复滚动第一个函数所做的,直到random_subs
数组只包含“ATK,ATK%,CD,CR”(基本上直到它是一个完美的滚动)。他们的顺序根本不重要。并且随着每次失败的滚动,增加roll
计数器。
这是这个函数的当前状态,从技术上讲,它以某种方式工作,但仍然不完美,因为应该只有 4 个子统计信息,并且它只是不断添加子统计信息,直到上述条件为真,所以有总是只有 2 或 3 卷,因为到第三卷,所有子统计都已经添加。显然这只是我的错,但我想不出正确的方法。
let sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
const main_stats=['ATK%','HP%','DEF%','EM','CR','CD','ER','Physical','Geo','Electro','Pyro','Cyro','Hydro','Anemo'];
// let sets=[];
let artifacts=[];
let random_main=main_stats[Math.floor(Math.random() * main_stats.length)];
let random_subs=[];
let rolls=0;
let perfect=false;
while(!perfect){
for(let i=0; i<4; i++){
let random_sub=sub_stats[Math.floor(Math.random() * sub_stats.length)];
random_subs.push(random_sub);
let index = sub_stats.indexOf(random_sub);
if (index !== -1) {
sub_stats.splice(index, 1);
}
}
rolls++;
if(random_subs.includes('ATK') &&
random_subs.includes('ATK%') &&
random_subs.includes('CR') &&
random_subs.includes('CD')){
perfect=true;
}
}
let artifact={
main_stat: random_main,
sub_stats: random_subs,
rolls: rolls
};
artifacts.push(artifact);
sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
console.log(artifacts)
解决方案
睡个好觉可以创造奇迹。当我醒来的时候,我的脑海里已经有了答案,而且很简单。
我所要做的就是添加这个简单的else
子句:
else{
random_subs=[];
sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
}
let sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
const main_stats=['ATK%','HP%','DEF%','EM','CR','CD','ER','Physical','Geo','Electro','Pyro','Cyro','Hydro','Anemo'];
// let sets=[];
let artifacts=[];
let random_main=main_stats[Math.floor(Math.random() * main_stats.length)];
let random_subs=[];
let rolls=0;
let perfect=false;
while(!perfect){
for(let i=0; i<4; i++){
let random_sub=sub_stats[Math.floor(Math.random() * sub_stats.length)];
random_subs.push(random_sub);
let index = sub_stats.indexOf(random_sub);
if (index !== -1) {
sub_stats.splice(index, 1);
}
}
rolls++;
if(random_subs.includes('ATK') &&
random_subs.includes('ATK%') &&
random_subs.includes('CR') &&
random_subs.includes('CD')){
perfect=true;
}
else{
random_subs=[];
sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
}
}
let artifact={
main_stat: random_main,
sub_stats: random_subs,
rolls: rolls
};
artifacts.push(artifact);
sub_stats=['ATK%','ATK','HP%','HP','DEF%','DEF','EM','CR','CD','ER'];
console.log(artifacts)
自己解决它感觉很好,但令人失望的是,没有人试图提供帮助。
推荐阅读
- java - 如何在 wso2 EI 6.3.0 中使用“text/plain”作为内容类型来格式化电子邮件正文?
- javascript - 按星期和日期对 DataTable 进行排序
- node.js - 如何在节点js中显示来自api(计算机视觉-azure中的缩略图服务)响应的网页中的图像
- symfony - 如何从上面的当天停用日期
- python - 如何使用两个列表制作字典,但我想要两个作为值并且键将是名称和 sys-id?
- webview - 有什么方法可以使用 Url_launcher 插件在 Iphone 浏览器上隐藏 url
- javascript - 在重新渲染之间,对 redux 存储的对象引用是否保持不变
- ruby - Nokogiri SAX 忽略空字符
- python - 如何使用 Matplotlib 使 x 轴更清晰?
- wordpress - Meta_key 和 meta_value - Wordpress