鱼C论坛

 找回密码
 立即注册
查看: 1569|回复: 10

[已解决]求大神们帮忙!!

[复制链接]
发表于 2020-5-11 20:47:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
英雄pk怪物
用面向对象的方式编写一个小游戏,实现如下功能:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于0时游戏结束。
游戏输出结果如下所示:
小强你被张三攻击,受到了6点伤害!还剩54滴血
张三你被小强攻击,受到了25点伤害!还剩75滴血
小强你被张三攻击,受到了9点伤害!还剩45滴血
张三你被小强攻击,受到了19点伤害!还剩56滴血
小强你被张三攻击,受到了10点伤害!还剩35滴血
张三你被小强攻击,受到了23点伤害!还剩33滴血
小强你被张三攻击,受到了11点伤害!还剩24滴血
张三你被小强攻击,受到了22点伤害!还剩11滴血
小强你被张三攻击,受到了10点伤害!还剩14滴血
张三你被小强攻击,受到了24点伤害!还剩-13滴血
张三你被杀死了!胜败乃兵家常事 请重新来过。
最佳答案
2020-5-11 21:47:31
  1. '''
  2. 题:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于0时游戏结束。

  3. 思路:
  4.   通过题意得知有2个对象 英雄 和 怪物。
  5.   因题中没有说明英雄和怪物的名称是什么及血量多少,则名称和血量由用户创建对象时输入。
  6.   伤害值则受到攻击时随机生成。
  7.   使用循环实现英雄和怪物轮流攻击,当一方血量低于0时退出循环游戏结束。

  8. 描述 英雄:
  9.   属性:
  10.     名称
  11.     血量
  12.     伤害血量
  13.   方法:
  14.     攻击(攻击对象)
  15.     被攻击
  16.     获取名称
  17.     获取血量
  18.     获取伤害血量

  19. 描述 怪物:
  20.   属性:
  21.     名称
  22.     血量
  23.     伤害血量
  24.   方法:
  25.     攻击(攻击对象)
  26.     被攻击
  27.     获取名称
  28.     获取血量
  29.     获取伤害血量
  30. '''
  31. import random

  32. # 描述英雄
  33. class Hero:
  34.         def __init__(self, name, blood):
  35.                 self.name = name
  36.                 self.blood = blood
  37.                 self.hurBlood = 0

  38.         def attack(self, monster):
  39.                 monster.attacked()
  40.        
  41.         def attacked(self):
  42.                 self.hurtBlood = random.randint(0, 50)
  43.                 if self.blood>0:
  44.                         self.blood -= self.hurtBlood

  45.         def getName(self):
  46.                 return self.name

  47.         def getBlood(self):
  48.                 return self.blood

  49.         def getHurblood(self):
  50.                 return self.hurtBlood
  51.                

  52. # 描述怪物
  53. class Monster:
  54.         def __init__(self, name, blood):
  55.                 self.name = name
  56.                 self.blood = blood
  57.                 self.hurBlood = 0
  58.                
  59.         def attack(self, hero):
  60.                 hero.attacked()
  61.        
  62.         def attacked(self):
  63.                 self.hurtBlood = random.randint(0, 50)
  64.                 if self.blood>0:
  65.                         self.blood -= self.hurtBlood

  66.         def getName(self):
  67.                 return self.name

  68.         def getBlood(self):
  69.                 return self.blood

  70.         def getHurblood(self):
  71.                 return self.hurtBlood

  72. # 游戏开始函数,传入英雄和怪物对象
  73. def startGame(hero, monster):
  74.         flag = True # 用于标记切换攻击
  75.         while True:
  76.                 if(flag):
  77.                         hero.attack(monster)
  78.                         print("%s你被%s攻击,受到了%d点伤害!还剩%d滴血" % (monster.getName(), hero.getName(), monster.getHurblood(), monster.getBlood()))
  79.                         if monster.getBlood()<=0:
  80.                                 print("%s你被杀死了!胜败乃兵家常事 请重新来过。" % (monster.getName()))
  81.                                 break
  82.                         flag = False
  83.                 else:
  84.                         monster.attack(hero)
  85.                         print("%s你被%s攻击,受到了%d点伤害!还剩%d滴血" % (hero.getName(), monster.getName(), hero.getHurblood(), hero.getBlood()))
  86.                         if hero.getBlood()<=0:
  87.                                 print("%s你被杀死了!胜败乃兵家常事 请重新来过。" % (hero.getName()))
  88.                                 break
  89.                         flag = True


  90. # 生成 英雄和怪物
  91. hero = Hero("张三", 100)
  92. monster = Monster("小强", 100)

  93. startGame(hero, monster)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-11 20:49:46 | 显示全部楼层
  1. print("""
  2. 小强你被张三攻击,受到了6点伤害!还剩54滴血
  3. 张三你被小强攻击,受到了25点伤害!还剩75滴血
  4. 小强你被张三攻击,受到了9点伤害!还剩45滴血
  5. 张三你被小强攻击,受到了19点伤害!还剩56滴血
  6. 小强你被张三攻击,受到了10点伤害!还剩35滴血
  7. 张三你被小强攻击,受到了23点伤害!还剩33滴血
  8. 小强你被张三攻击,受到了11点伤害!还剩24滴血
  9. 张三你被小强攻击,受到了22点伤害!还剩11滴血
  10. 小强你被张三攻击,受到了10点伤害!还剩14滴血
  11. 张三你被小强攻击,受到了24点伤害!还剩-13滴血
  12. 张三你被杀死了!胜败乃兵家常事 请重新来过。
  13. """)
  14. input()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2020-5-11 21:38:48 From FishC Mobile | 显示全部楼层
乘号 发表于 2020-5-11 20:49

你的代码写的太淦了吧……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 21:47:31 | 显示全部楼层    本楼为最佳答案   
  1. '''
  2. 题:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于0时游戏结束。

  3. 思路:
  4.   通过题意得知有2个对象 英雄 和 怪物。
  5.   因题中没有说明英雄和怪物的名称是什么及血量多少,则名称和血量由用户创建对象时输入。
  6.   伤害值则受到攻击时随机生成。
  7.   使用循环实现英雄和怪物轮流攻击,当一方血量低于0时退出循环游戏结束。

  8. 描述 英雄:
  9.   属性:
  10.     名称
  11.     血量
  12.     伤害血量
  13.   方法:
  14.     攻击(攻击对象)
  15.     被攻击
  16.     获取名称
  17.     获取血量
  18.     获取伤害血量

  19. 描述 怪物:
  20.   属性:
  21.     名称
  22.     血量
  23.     伤害血量
  24.   方法:
  25.     攻击(攻击对象)
  26.     被攻击
  27.     获取名称
  28.     获取血量
  29.     获取伤害血量
  30. '''
  31. import random

  32. # 描述英雄
  33. class Hero:
  34.         def __init__(self, name, blood):
  35.                 self.name = name
  36.                 self.blood = blood
  37.                 self.hurBlood = 0

  38.         def attack(self, monster):
  39.                 monster.attacked()
  40.        
  41.         def attacked(self):
  42.                 self.hurtBlood = random.randint(0, 50)
  43.                 if self.blood>0:
  44.                         self.blood -= self.hurtBlood

  45.         def getName(self):
  46.                 return self.name

  47.         def getBlood(self):
  48.                 return self.blood

  49.         def getHurblood(self):
  50.                 return self.hurtBlood
  51.                

  52. # 描述怪物
  53. class Monster:
  54.         def __init__(self, name, blood):
  55.                 self.name = name
  56.                 self.blood = blood
  57.                 self.hurBlood = 0
  58.                
  59.         def attack(self, hero):
  60.                 hero.attacked()
  61.        
  62.         def attacked(self):
  63.                 self.hurtBlood = random.randint(0, 50)
  64.                 if self.blood>0:
  65.                         self.blood -= self.hurtBlood

  66.         def getName(self):
  67.                 return self.name

  68.         def getBlood(self):
  69.                 return self.blood

  70.         def getHurblood(self):
  71.                 return self.hurtBlood

  72. # 游戏开始函数,传入英雄和怪物对象
  73. def startGame(hero, monster):
  74.         flag = True # 用于标记切换攻击
  75.         while True:
  76.                 if(flag):
  77.                         hero.attack(monster)
  78.                         print("%s你被%s攻击,受到了%d点伤害!还剩%d滴血" % (monster.getName(), hero.getName(), monster.getHurblood(), monster.getBlood()))
  79.                         if monster.getBlood()<=0:
  80.                                 print("%s你被杀死了!胜败乃兵家常事 请重新来过。" % (monster.getName()))
  81.                                 break
  82.                         flag = False
  83.                 else:
  84.                         monster.attack(hero)
  85.                         print("%s你被%s攻击,受到了%d点伤害!还剩%d滴血" % (hero.getName(), monster.getName(), hero.getHurblood(), hero.getBlood()))
  86.                         if hero.getBlood()<=0:
  87.                                 print("%s你被杀死了!胜败乃兵家常事 请重新来过。" % (hero.getName()))
  88.                                 break
  89.                         flag = True


  90. # 生成 英雄和怪物
  91. hero = Hero("张三", 100)
  92. monster = Monster("小强", 100)

  93. startGame(hero, monster)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
Mrzhou1201 + 5 + 5 + 3 无条件支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 21:59:03 From FishC Mobile | 显示全部楼层
小版主写的太好了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 22:00:47 | 显示全部楼层
本帖最后由 heidern0612 于 2020-5-11 22:11 编辑
  1. class Cara(object):
  2.     """this is for the innitiaiton information"""
  3.     def __init__(self,name,hp,atk):    #此处定义三个基本属性值
  4.         self.name = name
  5.         self.hp = hp
  6.         self.atk = atk

  7. c1 = Cara("hero",100,5)
  8. c2 = Cara("monster",70,6)

  9. class Battle():
  10.     """main battle stuff."""
  11.     while True:
  12.         c2.hp -= c1.atk
  13.         c1.hp -= c2.atk
  14.         print(f"{c1.name}受到{c2.atk}点攻击,还剩下{c1.hp}点血")
  15.         print(f"{c2.name}受到{c1.atk}点攻击,还剩下{c2.hp}点血")
  16.         if c1.hp <= 0:
  17.             print("hero你被monster杀死了。")
  18.             break
  19.         elif c2. hp <= 0:
  20.             print("你战胜了monster,你胜利了。")
  21.             break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 22:01:08 | 显示全部楼层
Mrzhou1201 发表于 2020-5-11 21:59
小版主写的太好了

相互学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 22:08:51 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 22:15:47 | 显示全部楼层
  1. from random import randint,random

  2. class Hero:

  3.     def __init__(self,under_atk=0):       # 初始化英雄数据
  4.         self.life_value = 100 # 初始化生命值
  5.         self.atkmin = 5       # 初始化最小攻击力
  6.         self.atkmax = 13      # 初始化最大攻击力
  7.         self.dodge = 0.4      # 初始化闪避率
  8.         self.under_atk = under_atk # 受到的伤害

  9.     def action_attack(self):  # 定义攻击动作
  10.         judge_dodge = random()# 判断攻击是否miss
  11.         if judge_dodge < self.dodge:
  12.             return '闪避'
  13.         self.actual_atk = randint(self.atkmin,self.atkmax)
  14.         return self.actual_atk



  15. class Monster:

  16.     def __init__(self,under_atk=0):       # 初始化英雄数据
  17.         self.life_value = 60  # 初始化生命值
  18.         self.atkmin = 18      # 初始化最小攻击力
  19.         self.atkmax = 26      # 初始化最大攻击力
  20.         self.dodge = 0.1      # 初始化闪避率
  21.         self.under_atk = under_atk # 受到的伤害

  22.     def action_attack(self):  # 定义攻击动作
  23.         judge_dodge = random()# 判断攻击是否miss
  24.         if judge_dodge < self.dodge:
  25.             return '闪避'

  26.         self.actual_atk = randint(self.atkmin,self.atkmax)
  27.         return self.actual_atk



  28. if __name__ == '__main__':
  29.     H = Hero()
  30.     M = Monster()
  31.     round = 0
  32.     while M.life_value > 0 and H.life_value > 0:
  33.         round += 1
  34.         print(f'第{round}回合,轮到张三攻击!')
  35.         try:
  36.             hero_atk = H.action_attack()
  37.             M.life_value -= hero_atk
  38.             print(f'小强你被张三攻击,受到了{hero_atk}点伤害!还剩{M.life_value}滴血。')
  39.         except TypeError:
  40.             print('张三的攻击落空,小强不削的瞟了一眼')
  41.         print('-' * 60)
  42.         round += 1
  43.         print(f'第{round}回合,轮到小强攻击!')
  44.         try:
  45.             monster_atk = M.action_attack()
  46.             H.life_value -= M.action_attack()
  47.             print(f'小强你被张三攻击,受到了{monster_atk}点伤害!还剩{H.life_value}滴血。')
  48.         except TypeError:
  49.             print('小强的攻击落空,使张三感到自信倍增!')
  50.         print('-' * 60)
  51.     if H.life_value <= 0 :
  52.         print('张三你被杀死了!胜败乃兵家常事 请重新来过。')
  53.     elif M.life_value <= 0 :
  54.         print('小强你被杀死了!胜败乃兵家常事 请重新来过。')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 22:17:54 | 显示全部楼层

大佬秀...我忽略了定义人物名称
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-12 09:54:18 | 显示全部楼层

哇 都是大佬级别呀!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-19 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表