游戏中奖励配置问题

        游戏中各种奖励比如金币 钻石 道具  体力等等都是策划配置在配置文件中的,程序不用关心具体配置的是什么内容,只要给策划指定好正确的配置格式就好,程序要做到的就是 奖励字符串的合并、翻N倍等等,这里边往往涉及到字符串的合并,现给出一种解决方案。


class Item(object):
    
    def __init__(self,strs):
        its = strs.split("|")
        self.itemid = "|".join(its[:-1])
        self.num = int(its[-1])

    def __str__(self):
        return self.itemid + "|" + str(self.num)

    def equal(self,item):
        return self.itemid == item.itemid

    def add(self,item):
        if self.equal(item):
            self.num += item.num
    
    def multiply(self,mul):
        self.num = int(self.num * mul)

class ItemManager(object):

    def __init__(self):
        pass

    def str2items(self,itemstr):
        ret = []
        if len(itemstr) == 0:
            return ret
        strs = itemstr.split(',')
        for vs in strs:
            nitem = Item(vs)
            ret.append(nitem)
        return ret

    def items2str(self,items):
        return ",".join([str(item) for item in items])

    def merge(self,items):
        tmpd = {}
        for item in items:
            oitem = tmpd.get(item.itemid,None)
            if oitem:
                oitem.add(item)
            else:
                tmpd[item.itemid] = item
        return tmpd.values()

    def add(self,itemstr1,itemstr2):
        items1 = self.str2items(itemstr1)
        items2 = self.str2items(itemstr2)
        items1.extend(items2)
        items = self.merge(items1)
        return self.items2str(items)

    def multiply(self,itemstr,mul):
        itemlist = self.str2items(itemstr)
        itemlist = self.merge(itemlist)
        for item in itemlist:
            item.multiply(mul)
        return self.items2str(itemlist)


if __name__ == "__main__":
    manager = ItemManager()
    print(manager.add("G|200,D|500,P|1001001|100,G|300,P|1001001|1,P|1002001|100","G|200,G|300,P|1001001|100,D|500"))
    print(manager.multiply("G|200,G|300,D|500,P|1001001|100",2))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值