Java教程

纯函数实现面向对象

本文主要是介绍纯函数实现面向对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
#人狗大战游戏
#人——角色
    # 名称  等级  血量hp   攻击力ad   性别    职业
#狗——角色
    # 名称  品种  血量   攻击力
#动作——人打狗,狗咬人
缺点:没有限定动作的发起者,人也可以调用bite()咬狗
#人——角色模板
def person(name,hp,ad,sex,job,level=1):
    person_dict={'name':name,
                 'hp':hp,'ad':ad,
                 'sex':sex,'job':job}
    return person_dict

zs=person('张三',200,40,'男','射手')
lisi=person('李四',300,30,'男','战士')
# print(lisi)


#狗——角色模板
def dog(name,kind,hp,ad):
    dog_dict={'name':name,'kind':kind,'hp':hp,'ad':ad}
    return dog_dict

tg=dog('天狗','拉布拉多',1000,50)
jq=dog('警犬','藏獒',800,60)
# print(tg)


#人打狗,狗掉血
def attack(person,dog):
    dog['hp']=dog['hp']-person['ad']
    print('%s攻击了%s,%s掉了%s的血,还剩%s血'%(
        person['name'],
        dog['name'],
        dog['name'],
        person['ad'],
        dog['hp']))

attack(lisi,tg)

#狗咬人,人掉血
def bite(dog,person):
    person['hp'] = person['hp'] - dog['ad']
    print('%s攻击了%s,%s掉了%s的血,还剩%s血'%(
        dog['name'],
        person['name'],
        person['name'],
        dog['ad'],
        person['hp']))

bite(jq,zs)
# bite(zs,jq) #人咬狗也可以,没有限定住

使用闭包优化

将动作写在动作发起者函数中,变成二级函数,限定动作发起者

#优化人打狗
def person(name,hp,ad,sex,job,level=1):
    person_dict={'name':name,
                 'hp':hp,'ad':ad,
                 'sex':sex,'job':job}

    def attack(dog):
        dog['hp'] = dog['hp'] - person_dict['ad']
        print('%s攻击了%s,%s掉了%s的血,还剩%s血'%(
            person_dict['name'],
            dog['name'],
            dog['name'],
            person_dict['ad'],
            dog['hp']))

    person_dict['attack']=attack
    return person_dict

zs=person('张三',200,40,'男','射手')
# print(zs)
zs['attack'](tg)


#优化狗咬人
def dog(name,kind,hp,ad):
    dog_dict={'name':name,'kind':kind,'hp':hp,'ad':ad}

    # 狗咬人,人掉血
    def bite(person):
        person['hp'] = person['hp'] - dog_dict['ad']
        print('%s攻击了%s,%s掉了%s的血,还剩%s血' % (
            dog_dict['name'],
            person['name'],
            person['name'],
            dog_dict['ad'],
            person['hp']))
    dog_dict['bite']=bite
    return dog_dict

tg=dog('天狗','拉布拉多',1000,50)
jq=dog('警犬','藏獒',800,60)
jq['bite'](lisi)

 

这篇关于纯函数实现面向对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!