码迷,mamicode.com
首页 > 其他好文 > 详细

py---------面向对象基础篇

时间:2018-05-14 13:14:44      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:哈哈   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
人和狗初始角色1

定义了两个模子,游戏里的每个人和每只猫拥有相同属性。具体传入一个人和一只猫。

技术分享图片
#生一个人和一条狗具体参数
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‘: []}
attact 和 bite

上面的功能实现的简直是完美!

但是仔细玩耍一会,你就不小心干了下面这件事

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 咬狗这会就报错啦
限制alex咬狗的全新代码

 

py---------面向对象基础篇

标签:哈哈   def   EDA   技术分享   游戏公司   spl   相同   src   完美   

原文地址:https://www.cnblogs.com/edeny/p/9035473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!