标签:哈哈 def EDA 技术分享 游戏公司 spl 相同 src 完美
一、引子
你现在是一家游戏公司的开发人员,现在你需要开发一款叫做《人猫大战》的小游戏,你就思考呀,人猫大战,那至少需要两个角色,一个是人,一个是猫,且人和猫有不同的技能,比如人拿棍打狗,狗可以咬人,让我们来描述这种不同角色和他们的功能?
首先定义初始技能,描述两个角色
#人和狗初始角色1 def Person(name,sex,hp,dps): # 人模子 dic = {‘name‘:name,‘sex‘:sex,‘hp‘:hp,‘dps‘:dps,‘bag‘:[]} return dic def Dog(name,kind,hp,dps): # 狗模子 dic = {‘name‘:name,‘kind‘:kind,‘hp‘:hp,‘dps‘:dps} return dic
定义了两个模子,游戏里的每个人和每只猫拥有相同属性。具体传入一个人和一只猫。
#生一个人和一条狗具体参数 alex = Person(‘alex‘,‘不详‘,250,5) #一个人alex ha2 = Dog(‘小黑‘,‘藏獒‘,15000,200) #一只猫 小花
两个角色对象生成了,狗和人的功能不同,打狗,狗咬人,这时候每一个功能写一个函数,用哪个功能那个就调用哪个。
#######人打狗 def attack(person,dog): dog[‘hp‘] -= person[‘dps‘] print(‘%s打了%s,%s掉了%s点血,剩余%s点血‘%(person[‘name‘],dog[‘name‘],dog[‘name‘],person[‘dps‘],dog[‘hp‘])) attack(alex,ha2) print(ha2) #原来血量减少了 ####狗咬人 def bite(dog,person): person[‘hp‘] -= dog[‘dps‘] print(‘%s咬了%s,%s掉了%s点血,剩余%s点血‘%(dog[‘name‘],person[‘name‘],person[‘name‘],dog[‘dps‘],person[‘hp‘])) bite(ha2,alex) #结果: 小黑咬了alex,alex掉了200点血,剩余50点血 print(alex) #结果: {‘name‘: ‘alex‘, ‘sex‘: ‘不详‘, ‘hp‘: 50, ‘dps‘: 5, ‘bag‘: []}
上面的功能实现的简直是完美!
但是仔细玩耍一会,你就不小心干了下面这件事
bite(alex,ha2) #让alex咬了小黑,哈哈哈
事实 上,从你写的代码上来看,这并没出错。很显然,人是不能调用狗的功能的,但在你的程序例没有做限制,如何在代码级别实现这个限制呢?
def Person(name,sex,hp,dps): # 人模子 dic = {‘name‘:name,‘sex‘:sex,‘hp‘:hp,‘dps‘:dps,‘bag‘:[]} def attack(dog): dog[‘hp‘] -= dic[‘dps‘] print(‘%s打了%s,%s掉了%s点血,剩余%s点血‘ % (dic[‘name‘], dog[‘name‘], dog[‘name‘], dic[‘dps‘], dog[‘hp‘])) dic[‘attack‘] = attack return dic def Dog(name,kind,hp,dps): # 狗模子 dic = {‘name‘:name,‘kind‘:kind,‘hp‘:hp,‘dps‘:dps} def bite(person): person[‘hp‘] -= dic[‘dps‘] print(‘%s咬了%s,%s掉了%s点血,剩余%s点血‘ % (dic[‘name‘], person[‘name‘], person[‘name‘], dic[‘dps‘], person[‘hp‘])) dic[‘bite‘] = bite return dic alex = Person(‘alex‘,‘不详‘,250,5) ha2 = Dog(‘哈士奇‘,‘藏獒‘,15000,200) # 人打狗 print(ha2) #打狗钱‘hp‘: 15000 print(alex[‘attack‘]) #属于Person.<locals>局部组的函数 alex[‘attack‘](ha2) #alex 打狗 print(ha2) #打狗后‘hp‘: 14995 #alex[‘bite‘](ha2) #alex 咬狗这会就报错啦
标签:哈哈 def EDA 技术分享 游戏公司 spl 相同 src 完美
原文地址:https://www.cnblogs.com/edeny/p/9035473.html