老王开枪的程序练习,主要是强化对于面向对象认识
#1.创建老王对象
#2.创建一个枪
#3.创建一个弹夹对象
#4.创建一个子弹对象
#5.老王把子弹安装到枪的弹夹中
#6.老王把弹夹安装在枪中
#7.老王拿起枪
#8.创建一个敌人对象
#9.老王拿枪打敌人
1.创建老王对象
class People(object):
“”“用来创建一个人的类别”“”
def init(self,name):
super(People, self).init()
self.name = name
self.gun = None #定义一个变量用来指向枪的引用
self.hp = 100 #默认的血量为100
def install_bullet(self,bullet_temp,clip_temp):
'''把子弹安装在弹夹中'''
#弹夹.保存子弹(子弹)
clip_temp.save_bullet(bullet_temp)
def install_clip(self,gun_temp,clip_temp):
'''把弹夹安装在枪中'''
#枪.安装弹夹(弹夹)
gun_temp.save_clip(clip_temp)
def take_weapon(self,gun_temp):
'''老王拿起枪'''
self.gun = gun_temp
def shoot(self,enemy_temp):
'''开枪去打敌人'''
#枪开火
self.gun.fire(enemy_temp)
def loosehp(self,killability_temp):
'''根据子弹的杀伤力,敌人将进行掉血'''
self.hp = self.hp-killability_temp
def __str__(self):
if self.gun:
return "%s的血量为:%d,他是有枪的,%s"%(self.name,self.hp,self.gun)
else:
if self.hp>0:
return "%s的血量为:%d,他是没有枪的"%(self.name,self.hp)
else:
return"%s已经死了..."%(self.name)
class Gun(object):
“”“创建一个枪类”“”
def init(self, name):
super(Gun, self).init()
self.name = name #用来存放枪的名字
self.clip_add = None #定义一个变量来存储弹夹的地址
def __str__(self):
if self.clip_add: #这里为什么使用clip_add呢?
return "枪的信息为:%s,%s"%(self.name,self.clip_add)
else:
return "枪的信息为:%s,很遗憾这把枪没有弹夹。。。"%(self.name)
def save_clip(self,clip_temp):
'''同样的,需要记录弹夹的引用,但是不需要使用列表,因为弹夹只有一个的'''
self.clip_add = clip_temp
def fire(self,enemy_temp):
'''枪从弹夹中获得子弹,然后是子弹发射到敌人身上,但是敌人血量的减少'''
#先从弹夹中取得子弹
bullet_temp = self.clip_add.pop_bullet()
#让子弹去伤害敌人
if bullet_temp:
bullet_temp.hit(enemy_temp)
else:
print("弹夹中是没有子弹的,请去填充子弹。")
class Clip(object):
“”“创建一个弹夹类别”“”
def init(self, num_max):
super(Clip, self).init()
self.bullet_list = [] #用来记录所有子弹的引用
self.num_max = num_max #用来表示枪的存弹的能力save_bullet
def save_bullet(self,bullet_temp):
'''保存子弹,使用列表来保存'''
self.bullet_list.append(bullet_temp)
def __str__(self):
return "弹夹的信息为:%d/%d"%(len(self.bullet_list),self.num_max)
def pop_bullet(self,):
'''子弹是先压进去的后出来的'''
if self.bullet_list:
return self.bullet_list.pop()
else:
return None
class Bullet(object):
“”“docstring fo Bullet”“”
def init(self, killability):
super(Bullet, self).init()
self.killability = killability#表示一颗子弹的杀伤力
def hit(self,enemy_temp):
'''让敌人掉血'''
#敌人.掉血(一颗子弹的威力)
enemy_temp.loosehp(self.killability)
def main():
””用来控制整个程序的流程”’
1.创建老王对象
player = People("老王")
2.创建一个枪
gun = Gun("ak47")
#用于测试 print(gun)
3.创建一个弹夹对象
clip = Clip(40)
4.创建一个子弹对象
for i in range(15):
bullet = Bullet(10)
#5.玩家把子弹安装到枪的弹夹中
#老王.安装子弹到弹夹中(子弹,弹夹)
player.install_bullet(bullet,clip)
6.老王把弹夹安装在枪中
#玩家.安装弹夹到枪中(枪,弹夹)
player.install_clip(gun,clip)
#print(gun)
#test print(clip)#用来测试弹夹的信息
7.老王拿起枪
#玩家.拿起枪(枪)
player.take_weapon(gun)
print(player)#测试玩家的信息
8.创建一个敌人对象
enemy = People("小李")
print(enemy)
9.老王拿枪打敌人
#老王.扣扳机(小李)
for j in range(1,18):
player.shoot(enemy)
print(enemy)
print(player)
if name == ‘main‘:
main()