首页 > 解决方案 > 滚动直到数组仅包含特定元素

问题描述

如果有人玩游戏,尤其是 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)

标签: javascriptarraysrandom

解决方案


睡个好觉可以创造奇迹。当我醒来的时候,我的脑海里已经有了答案,而且很简单

我所要做的就是添加这个简单的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)

自己解决它感觉很好,但令人失望的是,没有人试图提供帮助。


推荐阅读