当前位置:   article > 正文

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/333369
推荐阅读
相关标签
  

闽ICP备14008679号