python教学——面向对象

通过创建角色、武器、弹药等对象,模拟一场射击游戏,深入理解面向对象编程思想,实现角色与敌人之间的互动及战斗过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

老王开枪的程序练习,主要是强化对于面向对象认识

    #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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值