猫史档案馆


【添加了maxPile折叠背包】依据字符数组的分割的背包

用户:卑微OIer卑微OIer查看:1 回复:3 评论:1 创建时间:2022-03-08T16:21:34


var entity = {};
const item = {
    'wood': {
        type:'things',
        weight:1,
        maxPile:32,
    },
    'meat': {
        type: 'things',
        weight: 1,
        maxPile: 16,
    },
    'fur': {
        type: 'things',
        weight: 1,
        maxPile : 32,
    }
}
Object.assign(entity, {
    capacity: 60,
    bag: [],
    eqinp : ['none','none','none','none'],
    bagLength() {
        let count = 0;
        for (let i = 0; i < this.bag.length; i++) 
            count += item[this.spliceItem(this.bag[i])[0]].weight * this.spliceItem(this.bag[i])[1];
        return count;
    },
    spliceItem(item) {
        var it = 0, returnName = "", returnNumber = 0;
        while (item[it] != '*') returnName += item[it], it += 1;
        for (it += 1; it < item.length; it++)returnNumber = returnNumber * 10 + parseInt(item[it]);
        return [returnName, returnNumber];
    },
    append(things) {
        if (this.bagLength()+item[things].weight > this.capacity) return false;
        for (let i = 0; i < this.bag.length; i++) {
            let element = this.bag[i], op = this.spliceItem(element);
            if (op[0] == things && op[1] < item[things].maxPile) {
                this.bag[i] = op[0] + '*' + String(op[1] + 1);
                return true;
            }
        }
        this.bag.push(things + '*1');
        this.bag.sort();
        return true;
    },
    remove(things) {
        for (let i = 0; i < this.bag.length; i++) {
            let op = this.spliceItem(this.bag[i]);
            if (op[0] == things) {
                if (op[1] > 1) this.bag[i] = op[0] + '*' + String(op[1] - 1);
                else this.bag.splice(i, 1);
                return true;
            }
        }
        return false;
    },
})

调用方法:

entity.append('meat') // ['meat*1']
entity.append('meat') // ['meat*2']
entity.append('meat') // ['meat*3']
entity.append('meat') // ['meat*4']
entity.append('meat') // ['meat*1','meat*1']
//上面item里面的meat属性中的maxPile代表最多可以折叠
entity.remove('meat') // ['meat*3','meat'*1]


回复

上一页1 页 / 共 1下一页
星辰Lolita星辰Lolita

好眼熟,但不知道哪里看过)

点赞0


评论


yee089yee089

前排))

点赞0


评论


无极玄天无极玄天

嗯,狠好用

点赞0


评论