python⼈狗⼤战游戏_day2201初识⾯向对象----简单的⼈狗⼤
战⼩游戏
day22 01 初识⾯向对象----简单的⼈狗⼤战⼩游戏
假设有⼀个简单的⼩游戏:⼈狗⼤战 怎样⽤代码去实现呢?
⾸先得有任何狗这两个⾓⾊,并且每个⾓⾊都有他们⾃⼰的⼀些属性,⽐如任务名字name,⾎量blood,攻击⼒aggr,⼈的性别,狗的品种等,如下就是定义了这两个⾓⾊:
someone={'name':'王昭君','blood':100,'aggr':1000,'sex':'none'}
dog={'name':'溜溜球','blood':100,'aggr':2000,'kind':'泰迪'}
如上的定义就⽐较单⼀,就只能⼀个⼈和⼀只狗玩,如果是⼏个⼈和⼏条狗⼀起,就不能够实现了,如何实现呢?利⽤以前学过的知识,把⼈和狗都转换成变量就好了,⽽这样的实现⽅法就是定义函数,然
后传参数,调⽤函数:
def someone(name,blood,aggr,sex):
someone={'name': name,'blood': blood,'aggr': aggr,'sex': sex
}returnsomeone
person=someone('王昭君',100,1000,'girl')
#要想多个⼈⼀起玩,只要多次传参调⽤函数someone就可以了
print(person)
def dog(name,blood,aggr,kind):
dog={'name': name,'blood': blood,'aggr': aggr,'kind': kind
}returndog
dog=dog('溜溜球',200,1000,'泰迪')
#要想多条狗⼀起玩,只要多次传参调⽤函数dog就可以了
print(dog)
这样⽤函数调⽤的⽅法相⽐与开始的直接定义具体的来说存在⼏个优点:
代码精简了,⽅便增加多个⾓⾊,⽅便修改,⽽且⼈物更加规范了(有⼏个属性是固定的,什么属性也是固定的,每个⾓⾊所有的属性也是⼀样的)
someone函数和dog函数都是定义了⼀类事物,可以抽象地称为⼈模⼦和狗模⼦,直到调⽤了函数,穿了参数,赋值之后才成了实实在在的⼈和狗
然后是⼈和狗都需要有攻击技能:
⼈的技能:⼈
狗的技能:狗咬⼈
当⼈的时候,狗会掉⾎,狗咬⼈的时候,⼈掉⾎
def attack(person,dog):
dog['blood']-=person['aggr'] #⼈和狗的⾓⾊都是字典,这⾥就可以直接⽤了
print('%s被⼈打了,掉了%s的⾎'%(dog['name'],person['aggr']))
def bite(dog,person):
person['blood']-=dog['aggr']
print('%s被狗咬了,掉了%s的⾎'%(person['name'],dog['aggr']))
person=someone('王昭君',100,1000,'girl')#要想多个⼈⼀起玩,只要多次传参调⽤函数someone就可以了
print(person)
dog=dog('溜溜球',200,1000,'泰迪')#要想多条狗⼀起玩,只要多次传参调⽤函数dog就可以了
print(dog)
attack(person,dog)
bite(dog,person)
运⾏的结果:
{'sex': 'girl', 'name': '王昭君', 'blood': 100, 'aggr': 1000}
{'name': '溜溜球', 'blood': 200, 'aggr': 1000, 'kind': '泰迪'}
溜溜球被⼈打了,掉了1000的⾎
王昭君被狗咬了,掉了1000的⾎
虽然这样可以⼩⼩的玩⼀下了,但是还是存在问题,当你在技能函数外⾯调⽤:
attack(dog,person )
bite(person,dog)
运⾏的结果就会反过来:
王昭君被⼈打了,掉了1000的⾎
溜溜球被狗咬了,掉了1000的⾎
这样⼦⾓⾊就会变乱了,不符合实际要求,实际效果是:⼈只能被狗咬,⽽狗只能被⼈打,要满⾜这个要求,就需要有⼀定的限制,要使得攻击技能函数不能在外⾯被调⽤,
解决这个问题可以使⽤以前学过的知识,函数的嵌套,闭包来解决,将攻击技能函数嵌套如对应的⾓⾊⾥⾯,这样要调⽤攻击技能函数只能先通过调⽤外层对应⾓⾊的函数来实现,
从⽽⾓⾊也就不会发⽣混乱了:
def someone(name,blood,aggr,sex):
someone={'name': name,'blood': blood,'aggr': aggr,'sex': sex,
}
def attack(dog):#将⼈的攻击技能函数嵌套在⼈物⾓⾊函数⾥⾯,并且这⾥只⽤传⼊狗的参数,⽽⼈物⾓⾊使⽤的则是外层函数定义的someone
dog['blood'] -= someone['aggr'] # ⼈和狗的⾓⾊都是字典,这⾥就可以直接⽤了
print('%s被⼈打了,掉了%s的⾎' % (dog['name'], someone['aggr']))
someone['attack']=attack #在⼈物⾓⾊的属性⾥⾯添加攻击技能,这⾥给的是攻击技能的函数名,也就是相当与在someone⾥⾯存了攻击技能函数的内存地址returnsomeone
def dog(name,blood,aggr,kind):
dog={'name': name,'blood': blood,'aggr': aggr,'kind': kind
}
def bite(someone):#将狗的攻击技能函数嵌套在狗⾓⾊函数⾥⾯,并且这⾥只⽤传⼊⼈的参数,⽽狗⾓⾊使⽤的则是外层函数定义的dog
someone['blood'] -= dog['aggr'] #⼈和狗的⾓⾊都是字典,这⾥就可以直接⽤了
print('%s被狗咬了,掉了%s的⾎' % (someone['name'], dog['aggr']))
java python是什么意思dog['bite']=bite#在⼈狗的⾓⾊的属性⾥⾯添加攻击技能,这⾥给的是攻击技能的函数名,也就是相当与在dog⾥⾯存了攻击技能函数的内存地址returndog
person=someone('王昭君',100,1000,'girl')#要想多个⼈⼀起玩,只要多次传参调⽤函数someone就可以了
print(person) #person⾥⾯除了⼈物⾓⾊传⼊的参数属性还有添加的⼈物的攻击技能函数
dog=dog('溜溜球',200,1000,'泰迪')#要想多条狗⼀起玩,只要多次传参调⽤函数dog就可以了
print(dog)#dog⾥⾯除了狗的⾓⾊传⼊的参数属性还有添加的狗的攻击技能函数
person['attack'](dog) #传⼊狗的⾓⾊,调⽤⼈物⾓⾊⾥⾯的攻击技能函数
dog['bite'](person) #传⼊⼈的⾓⾊,调⽤狗⾓⾊⾥⾯的攻击技能函数
运⾏结果:
{'sex': 'girl', 'name': '王昭君', 'blood': 100, 'attack': .attack at 0x000001C74E6E3D90>, 'aggr': 1000}
{'name': '溜溜球', 'blood': 200, 'bite': .bite at 0x000001C74EDBF048>, 'kind': '泰迪', 'aggr': 1000}
溜溜球被⼈打了,掉了1000的⾎
王昭君被狗咬了,掉了1000的⾎
这样就完成了⼀个简单的⼈狗⼤战的⼩游戏了
这个游戏⾥⾯定义的⼈物⾓⾊就是⼀个类,⽽⾥⾯具体的⼈物王昭君就是⼀个对象
同样定义的狗⾓⾊也是⼀个类,⽽具体的狗溜溜球就是⼀个对象
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论