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
叶孤城现在的血量为100
第2回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为90
叶孤城现在的血量为90
第3回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为80
叶孤城现在的血量为90
第4回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为70
叶孤城现在的血量为90
第5回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为70
叶孤城现在的血量为75
第6回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为70
叶孤城现在的血量为65
第7回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为60
叶孤城现在的血量为65
第8回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为60
叶孤城现在的血量为50
第9回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为50
叶孤城现在的血量为50
第10回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为50
叶孤城现在的血量为60
第11回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为40
叶孤城现在的血量为60
第12回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为60
第13回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为50
第14回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为40
第15回合:
西门吹雪使用了回复药,回复了10滴血
西门吹雪现在的血量为40
叶孤城现在的血量为40
第16回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为30
叶孤城现在的血量为40
第17回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为30
叶孤城现在的血量为50
第18回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为30
叶孤城现在的血量为60
第19回合:
西门吹雪使用了回复药,回复了10滴血
西门吹雪现在的血量为40
叶孤城现在的血量为60
第20回合:
叶孤城对西门吹雪打出了暴击
西门吹雪现在的血量为25
叶孤城现在的血量为60
第21回合:
西门吹雪使用了回复药,回复了10滴血
西门吹雪现在的血量为35
叶孤城现在的血量为60
第22回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为25
叶孤城现在的血量为60
第23回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为25
叶孤城现在的血量为45
第24回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为25
叶孤城现在的血量为35
第25回合:
叶孤城对西门吹雪打出了普通攻击
西门吹雪现在的血量为15
叶孤城现在的血量为35
第26回合:
叶孤城使用了回复药,回复了10滴血
西门吹雪现在的血量为15
叶孤城现在的血量为45
第27回合:
西门吹雪对叶孤城打出了普通攻击
西门吹雪现在的血量为15
叶孤城现在的血量为35
第28回合:
西门吹雪对叶孤城打出了暴击
西门吹雪现在的血量为15
叶孤城现在的血量为20
第29回合:
叶孤城对西门吹雪打出了暴击
西门吹雪现在的血量为0
叶孤城现在的血量为20
西门吹雪血量降为0以下,游戏结束