求大神们帮忙!!
英雄pk怪物用面向对象的方式编写一个小游戏,实现如下功能:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于0时游戏结束。
游戏输出结果如下所示:
小强你被张三攻击,受到了6点伤害!还剩54滴血
张三你被小强攻击,受到了25点伤害!还剩75滴血
小强你被张三攻击,受到了9点伤害!还剩45滴血
张三你被小强攻击,受到了19点伤害!还剩56滴血
小强你被张三攻击,受到了10点伤害!还剩35滴血
张三你被小强攻击,受到了23点伤害!还剩33滴血
小强你被张三攻击,受到了11点伤害!还剩24滴血
张三你被小强攻击,受到了22点伤害!还剩11滴血
小强你被张三攻击,受到了10点伤害!还剩14滴血
张三你被小强攻击,受到了24点伤害!还剩-13滴血
张三你被杀死了!胜败乃兵家常事 请重新来过。 print("""
小强你被张三攻击,受到了6点伤害!还剩54滴血
张三你被小强攻击,受到了25点伤害!还剩75滴血
小强你被张三攻击,受到了9点伤害!还剩45滴血
张三你被小强攻击,受到了19点伤害!还剩56滴血
小强你被张三攻击,受到了10点伤害!还剩35滴血
张三你被小强攻击,受到了23点伤害!还剩33滴血
小强你被张三攻击,受到了11点伤害!还剩24滴血
张三你被小强攻击,受到了22点伤害!还剩11滴血
小强你被张三攻击,受到了10点伤害!还剩14滴血
张三你被小强攻击,受到了24点伤害!还剩-13滴血
张三你被杀死了!胜败乃兵家常事 请重新来过。
""")
input() 乘号 发表于 2020-5-11 20:49
你的代码写的太淦了吧…… '''
题:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于0时游戏结束。
思路:
通过题意得知有2个对象 英雄 和 怪物。
因题中没有说明英雄和怪物的名称是什么及血量多少,则名称和血量由用户创建对象时输入。
伤害值则受到攻击时随机生成。
使用循环实现英雄和怪物轮流攻击,当一方血量低于0时退出循环游戏结束。
描述 英雄:
属性:
名称
血量
伤害血量
方法:
攻击(攻击对象)
被攻击
获取名称
获取血量
获取伤害血量
描述 怪物:
属性:
名称
血量
伤害血量
方法:
攻击(攻击对象)
被攻击
获取名称
获取血量
获取伤害血量
'''
import random
# 描述英雄
class Hero:
def __init__(self, name, blood):
self.name = name
self.blood = blood
self.hurBlood = 0
def attack(self, monster):
monster.attacked()
def attacked(self):
self.hurtBlood = random.randint(0, 50)
if self.blood>0:
self.blood -= self.hurtBlood
def getName(self):
return self.name
def getBlood(self):
return self.blood
def getHurblood(self):
return self.hurtBlood
# 描述怪物
class Monster:
def __init__(self, name, blood):
self.name = name
self.blood = blood
self.hurBlood = 0
def attack(self, hero):
hero.attacked()
def attacked(self):
self.hurtBlood = random.randint(0, 50)
if self.blood>0:
self.blood -= self.hurtBlood
def getName(self):
return self.name
def getBlood(self):
return self.blood
def getHurblood(self):
return self.hurtBlood
# 游戏开始函数,传入英雄和怪物对象
def startGame(hero, monster):
flag = True # 用于标记切换攻击
while True:
if(flag):
hero.attack(monster)
print("%s你被%s攻击,受到了%d点伤害!还剩%d滴血" % (monster.getName(), hero.getName(), monster.getHurblood(), monster.getBlood()))
if monster.getBlood()<=0:
print("%s你被杀死了!胜败乃兵家常事 请重新来过。" % (monster.getName()))
break
flag = False
else:
monster.attack(hero)
print("%s你被%s攻击,受到了%d点伤害!还剩%d滴血" % (hero.getName(), monster.getName(), hero.getHurblood(), hero.getBlood()))
if hero.getBlood()<=0:
print("%s你被杀死了!胜败乃兵家常事 请重新来过。" % (hero.getName()))
break
flag = True
# 生成 英雄和怪物
hero = Hero("张三", 100)
monster = Monster("小强", 100)
startGame(hero, monster)
小版主写的太好了 本帖最后由 heidern0612 于 2020-5-11 22:11 编辑
class Cara(object):
"""this is for the innitiaiton information"""
def __init__(self,name,hp,atk): #此处定义三个基本属性值
self.name = name
self.hp = hp
self.atk = atk
c1 = Cara("hero",100,5)
c2 = Cara("monster",70,6)
class Battle():
"""main battle stuff."""
while True:
c2.hp -= c1.atk
c1.hp -= c2.atk
print(f"{c1.name}受到{c2.atk}点攻击,还剩下{c1.hp}点血")
print(f"{c2.name}受到{c1.atk}点攻击,还剩下{c2.hp}点血")
if c1.hp <= 0:
print("hero你被monster杀死了。")
break
elif c2. hp <= 0:
print("你战胜了monster,你胜利了。")
break Mrzhou1201 发表于 2020-5-11 21:59
小版主写的太好了
相互学习 ba21 发表于 2020-5-11 21:47
大佬优秀 from random import randint,random
class Hero:
def __init__(self,under_atk=0): # 初始化英雄数据
self.life_value = 100 # 初始化生命值
self.atkmin = 5 # 初始化最小攻击力
self.atkmax = 13 # 初始化最大攻击力
self.dodge = 0.4 # 初始化闪避率
self.under_atk = under_atk # 受到的伤害
def action_attack(self):# 定义攻击动作
judge_dodge = random()# 判断攻击是否miss
if judge_dodge < self.dodge:
return '闪避'
self.actual_atk = randint(self.atkmin,self.atkmax)
return self.actual_atk
class Monster:
def __init__(self,under_atk=0): # 初始化英雄数据
self.life_value = 60# 初始化生命值
self.atkmin = 18 # 初始化最小攻击力
self.atkmax = 26 # 初始化最大攻击力
self.dodge = 0.1 # 初始化闪避率
self.under_atk = under_atk # 受到的伤害
def action_attack(self):# 定义攻击动作
judge_dodge = random()# 判断攻击是否miss
if judge_dodge < self.dodge:
return '闪避'
self.actual_atk = randint(self.atkmin,self.atkmax)
return self.actual_atk
if __name__ == '__main__':
H = Hero()
M = Monster()
round = 0
while M.life_value > 0 and H.life_value > 0:
round += 1
print(f'第{round}回合,轮到张三攻击!')
try:
hero_atk = H.action_attack()
M.life_value -= hero_atk
print(f'小强你被张三攻击,受到了{hero_atk}点伤害!还剩{M.life_value}滴血。')
except TypeError:
print('张三的攻击落空,小强不削的瞟了一眼')
print('-' * 60)
round += 1
print(f'第{round}回合,轮到小强攻击!')
try:
monster_atk = M.action_attack()
H.life_value -= M.action_attack()
print(f'小强你被张三攻击,受到了{monster_atk}点伤害!还剩{H.life_value}滴血。')
except TypeError:
print('小强的攻击落空,使张三感到自信倍增!')
print('-' * 60)
if H.life_value <= 0 :
print('张三你被杀死了!胜败乃兵家常事 请重新来过。')
elif M.life_value <= 0 :
print('小强你被杀死了!胜败乃兵家常事 请重新来过。') ba21 发表于 2020-5-11 21:47
大佬秀...我忽略了定义人物名称 Twilight6 发表于 2020-5-11 22:15
哇 都是大佬级别呀!!
页:
[1]