py3射击小游戏

关于py3面向对象的小Demo,欢迎 交流。

class Person(object):#声明人类
    def __init__(self,name):
        self.name = name
        self.gun = None#是否拿枪
        self.hp = 100#人的血量
    def __str__(self):
        if self.gun:
            return "%s拿的枪是%s,血量为:%s"%(self.name,self.gun,self.hp)
        else:
            return "%s没有拿枪,血量为%s"%(self.name,self.hp)
    #定义方法实现人安装子弹到弹夹
    def installBullet(self,cartridgeClip,bullet):
        #安装子弹到当前弹夹
        cartridgeClip.pushBullet(bullet)#找cartridgeClip类中的pushBullet方法保存子弹
    #老李安装中弹夹到枪
    def installToGun(self,name,cartridgeClip):
        name.installtogun(cartridgeClip)
    #拿枪
    def getgun(self,name):
        self.gun = name
    #开枪打敌人(老宋)
    def kill(self,name):
        self.gun.fire(name)
    #掉血
    def diaoxue(self,lethality):
        if self.hp >0:
            self.hp -= lethality
        else:
            print("%s已经挂了"%self.name)


class Gun(object):#声明枪类
    def __init__(self,name):
        self.name = name#记录弹夹的类型
        self.cartridgeClip = None#记录弹夹对象的引用
    def __str__(self):
        if self.cartridgeClip:
            return "枪名是:%s, 弹夹信息为:%s"%(self.name,self.cartridgeClip)
        else:
            return "枪名是:%s,没有弹夹"%(self.name)
    def installtogun(self,cartridgeClip):
        self.cartridgeClip = cartridgeClip
    #开火射击
    def fire(self,name):
        #先取子弹
        temp = self.cartridgeClip.outBullet()
        #让子弹去伤害敌人
        if temp:
            temp.ko(name)
        else:
            print("没有子弹了。。。")
class  CartridgeClip(object):#声明弹夹类
    def __init__(self,maxNum):
        self.maxnum = maxNum#记录最大容量
        # 声明列表buttlelist用来存放子弹
        self.buttlelist = []
    def __str__(self):
        return "弹夹的信息为:%s/%s"%(len(self.buttlelist),self.maxnum)
    def pushBullet(self,bullet):
        self.buttlelist.append(bullet)
    def outBullet(self):#弹出子弹
        if self.buttlelist:
            return  self.buttlelist.pop()
        else:
            return None
class Bullet(object):#声明子弹类
    def __init__(self,Lethality):
        self.lethality = Lethality#子弹的杀伤力
    def ko(self,name):#打中敌人,敌人掉血
        name.diaoxue(self.lethality)
def main():
    #分别声明对象
    laoli = Person("老李")#拿枪的人叫老李
    k98 = Gun("98k")#该枪的名称为98k
    cartridgeClip = CartridgeClip(30)#弹夹的最大容量是30
    bullet = Bullet(10)#子弹的杀伤力是10
    #创建一些子弹
    for i in range(10):
        bullet =  Bullet(10)
        laoli.installBullet(cartridgeClip, bullet)
    #老李拿着弹夹吧子弹放入弹夹,在安装弹夹到枪中 老李.安装子弹到弹夹(person类中的方法)
    laoli.installBullet(cartridgeClip,bullet)
    #laoli把弹夹安装到枪里
    laoli.installToGun(k98,cartridgeClip)
   # print("66")
    print(cartridgeClip)
    #测试枪的信息
    print(k98)
    #老李拿枪\
    laoli.getgun(k98)
    print(laoli)
    #创建敌人老宋
    laosong = Person("对面老宋")
    print(laosong)
    #开枪打老宋
    laoli.kill(laosong)
    print(laosong)
    laoli.kill(laosong)
    print(laosong)
    laoli.kill(laosong)
    print(laosong)
    laoli.kill(laosong)
    print(laosong)
    for i  in range(20):
        laoli.kill(laosong)
        print(laosong)

    #print("66")

if __name__ == '__main__':
        main()


运行效果如下:

 

猜你喜欢

转载自blog.csdn.net/peng_for_csdn/article/details/88701334
今日推荐