python入门笔记——类和对象③(案例:自动随机文字游戏——决战紫禁之巅)

python入门笔记——类和对象③(案例:自动随机文字游戏——决战紫禁之巅)
案例:决战紫禁之巅
属性:
name:名字
HP:血量
方法:
normal_attack:普通攻击,对方掉血10滴
critical_hit:暴击,对方掉血15滴
take_medicine:吃药,回复10滴血
str:打印玩家状态

import random
print('游戏:决战紫禁之巅')
print('角色:西门吹雪,叶孤城,初始HP均为100')
print('普通攻击:对方掉血10滴 暴击:对方掉血15滴 吃药:回复自身10滴血(有极小可能回复到100血以上,但因为可能极小暂未考虑处理)')
print('回合计数:任一方打出一次攻击或使用一次吃药回血')
print('游戏开始:均以随机自动游戏,血量扣到0及以下时结束')
print('-----------------------------------------')
class Role:
    def __init__(self,name,HP):
        '''
        构造初始化角色函数
        :param name:角色名
        :param HP:角色血量
        '''
        self.name = name
        self.HP = HP
        pass
    def normal_attack(self,enemy):
        '''
        普通攻击
        :param enemy:敌人
        :return:
        '''
        enemy.HP -= 10# 敌人扣10滴血
        whatprint = '{}对{}打出了普通攻击'.format(self.name,enemy.name)
        print(whatprint)
        pass
    def critical_hit(self,enemy):
        '''
        暴击
        :param enemy:敌人
        :return:
        '''
        enemy.HP -= 15# 敌人扣15滴血
        whatprint = '{}对{}打出了暴击'.format(self.name, enemy.name)
        print(whatprint)
        pass
    def take_medicine(self):
        '''
        吃药回血
        :return:
        '''
        self.HP += 10
        whatprint = '{}使用了回复药,回复了10滴血'.format(self.name)
        print(whatprint)
        pass
    def __str__(self):
        return '{}现在的血量为{}'.format(self.name,self.HP)
    pass

role1 = Role('西门吹雪',100)
role2 = Role('叶孤城',100)
count = 1# 回合计数,每一次单方面攻击或回复为一回合
while True:
    randomnum = random.randint(0,5)# 随机数函数,获取0到5之间的整数值(这里用randint是左右都是闭区间,而randrange是左闭右开)
    if randomnum == 4 and role1.HP == 100:
    #去除了可能在满血时回复血量的情况
        continue
    elif randomnum == 5 and role2.HP == 100:
    #去除了可能在满血时回复血量的情况
        continue
    print('第{}回合:'.format(count))
    if randomnum == 0:
        role1.normal_attack(role2)
        pass
    elif randomnum == 1:
        role2.normal_attack(role1)
        pass
    elif randomnum == 2:
        role1.critical_hit(role2)
        pass
    elif randomnum == 3:
        role2.critical_hit(role1)
        pass
    elif randomnum == 4:
        role1.take_medicine()
        pass
    elif randomnum == 5:
        role2.take_medicine()
        pass
    print(role1)
    print(role2)

    count += 1

    if role1.HP <= 0:
        print('西门吹雪血量降为0以下,游戏结束')
        break
    elif role2.HP <= 0:
        print('叶孤城血量降为0以下,游戏结束')
        break

输出结果:(某一次)

游戏:决战紫禁之巅
角色:西门吹雪,叶孤城,初始HP均为100
普通攻击:对方掉血10滴 暴击:对方掉血15滴 吃药:回复自身10滴血(有极小可能回复到100血以上,但因为可能极小暂未考虑处理)
回合计数:任一方打出一次攻击或使用一次吃药回血
游戏开始:均以随机自动游戏,血量扣到0及以下时结束
-----------------------------------------1回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为90
叶孤城现在的血量为1002回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为90
叶孤城现在的血量为903回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为80
叶孤城现在的血量为904回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为70
叶孤城现在的血量为905回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为70
叶孤城现在的血量为756回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为70
叶孤城现在的血量为657回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为60
叶孤城现在的血量为658回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为60
叶孤城现在的血量为509回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为50
叶孤城现在的血量为5010回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为50
叶孤城现在的血量为6011回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为40
叶孤城现在的血量为6012回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为6013回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为5014回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为4015回合:
西门吹雪使用了回复药,回复了10滴血
西门吹雪现在的血量为40
叶孤城现在的血量为4016回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为4017回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为30
叶孤城现在的血量为5018回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为30
叶孤城现在的血量为6019回合:
西门吹雪使用了回复药,回复了10滴血
西门吹雪现在的血量为40
叶孤城现在的血量为6020回合:
叶孤城对西门吹雪打出了暴击
西门吹雪现在的血量为25
叶孤城现在的血量为6021回合:
西门吹雪使用了回复药,回复了10滴血
西门吹雪现在的血量为35
叶孤城现在的血量为6022回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为25
叶孤城现在的血量为6023回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为25
叶孤城现在的血量为4524回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为25
叶孤城现在的血量为3525回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为15
叶孤城现在的血量为3526回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为15
叶孤城现在的血量为4527回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为15
叶孤城现在的血量为3528回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为15
叶孤城现在的血量为2029回合:
叶孤城对西门吹雪打出了暴击
西门吹雪现在的血量为0
叶孤城现在的血量为20
西门吹雪血量降为0以下,游戏结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值