游戏中各种奖励比如金币 钻石 道具 体力等等都是策划配置在配置文件中的,程序不用关心具体配置的是什么内容,只要给策划指定好正确的配置格式就好,程序要做到的就是 奖励字符串的合并、翻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))