python小白自学基础知识(二)附加(人狗大战游戏)

本文通过一个Python代码示例介绍了面向对象编程的基础知识,包括类的定义、继承和方法。示例中展示了人狗大战的游戏逻辑,人和狗的属性如攻击力、血量,以及购买枪支进行攻击的流程。通过这个例子,读者可以学习到如何在Python中创建和使用类以及类的方法。
摘要由CSDN通过智能技术生成

python小白自学基础知识(二)

1.计算列表内数字的累加和
这里用到functools模块,以及该模块下的reduce函数
语法:reduce(function1,list1)
注:function1是自己定义的函数名,list1也是自己定义的列表名(不局限于这两个,完全自己定义)

#导入自己需要的模块
import functools
list1 = [1,3,6,8,8]
#定义函数方法
#这里方法只需要包含两个参数即可
def func(a,b):
	return a + b
result = functools.reduce(func,list1)
print(result)

2.面向对象相关知识(类)
类→对象→方法
1.类是对一系列具有相同特征和行为的事物的总称
2.特征即是属性
3.行为即是方法
4.自定义变量名m=类名称()#类生成实例对象m
5.如果在为类定义一个方法时,比如 def m (self): self在我的理解就是:如果类生成了实例化对象,那self就代表实例对象自己
6.init:(魔法方法)生成类的实例时仅被调用一次

根据函数和面向对象(类)的知识,概括为一个总的例子(该例子我在其他的文章中见过),作为上课的内容,老师要求实现人狗大战游戏代码编写,内容中包含:人初始化的金钱额度,金钱用于买枪,枪对狗的伤害,以及狗的血量,最后是人在多少次把狗打死(其中没有涉及到人打狗的同时,狗也在咬人,但是却定义了狗对人的伤害,有兴趣的朋友可以继续把游戏做下去)

人狗大战游戏

#创建一个类(该类的属性会为后面的类继承调用)
class lable:
    def __init__(self, name, aggr, hp):  #类属性
        self.name = name
        self.aggr = aggr
        self.hp = hp

class dog(lable):  #创建狗的类,并且继承lable(父类)的属性
    def __init__(self, name, aggr, hp, kind):
        lable.__init__(self, name, aggr, hp)
        self.kind = kind
	#定义狗的攻击方法
    def attack(self, person):
    	#人的血等于人当前的血量减去狗的攻击力
        person.hp -= self.aggr

class person(lable): #创建人的类,同样继承lable(父类)的属性
    def __init__(self, name, aggr, hp, sex):
        lable.__init__(self, name, aggr, hp)
        self.sex = sex
        #初始化人的钱为0
        self.money = 0
	#定义人的攻击方法,参数对象是狗
    def person_attack(self, dog):
    	#狗的血量等于狗当前的血量减去人的攻击力
        dog.hp -= self.aggr
	#定义人买枪的方法
    def person_gun(self, gun):  
        if self.money >= gun.g_price:
        	#如果钱够就买枪
            self.money -= gun.g_price
            self.gun = gun
            #枪的攻击力赋值与人的攻击力
            self.aggr = gun.g_aggr
        else:
            print('余额不足,请充值金额打狗!')

class gun:  #创建gun枪的类
	#类属性 记录子弹数量,初始化为0
    num_bullet = 0
    def __init__(self, name, aggr, zds, price):
        self.g_name = name
        self.g_aggr = aggr
        self.g_zds = zds
        self.g_price = price
 	def hand_w(self,dog):
 	#定义人开枪的方法
 		while self.g_zds > 0:#保证子弹数一直是正数
 			if dog.hp > 0:
 				#人用枪打狗,伤害为枪伤害的二倍
 				dog.hp -= self.g_aggr * 2
     			self.g_zds -= 1
                gun.num_bullet += 1
                print('正在使用武器攻击(伤害为{}的二倍)!'.format(self.g_aggr))
                print('当前{}的血条为{}'.format(dog.name,dog.hp))
            else:  # 防止程序陷入死循环
                break
#创建实例对象
zangao = dog('zangao', 100, 200, '咬人')
tom = person('tom', 50, 10, '打狗')
m4a1 = gun('m4-a1', 20, 3, 500)
tom.money += 1000
#假想藏獒不攻击人类,只有人类用枪打狗的过程
# 构造一个循环体,当[zangao]的hp<=0时,退出循环
# 固定子弹数量
bullet_full = m4a1.g_zds
while zangao.hp > 0:
    # 使用gun攻击
    # 判断tom是否还有钱购买枪攻击zangao,如果没有终止循环
    while tom.money >= m4a1.g_price:
        # 购买武器
        tom.person_gun(m4a1)
        # 我们需要重置一下子弹的数量
        m4a1.g_zds = 3
        # 使用武器攻击(hand_w方法自带判断,这里不用加判断了)
        m4a1.hand_w(zangao)
        
#输出消耗打狗的总子弹数
print('使用子弹数量为[%d]' % gun.num_bullet)

(这个小例子重点在掌握面向对象的继承,还有定义函数的方法,以及一些逻辑关系,程序里没有实现让狗攻击人,然后人在攻击狗,完全就是单纯的人打狗。至于函数内定义的狗的攻击力,可以作为是为了学习面相对象的继承。一起加油呀!)

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢牛牛@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值