a聪明叶 发表于 2020-5-11 20:47:20

求大神们帮忙!!

英雄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 20:49:46

print("""
小强你被张三攻击,受到了6点伤害!还剩54滴血
张三你被小强攻击,受到了25点伤害!还剩75滴血
小强你被张三攻击,受到了9点伤害!还剩45滴血
张三你被小强攻击,受到了19点伤害!还剩56滴血
小强你被张三攻击,受到了10点伤害!还剩35滴血
张三你被小强攻击,受到了23点伤害!还剩33滴血
小强你被张三攻击,受到了11点伤害!还剩24滴血
张三你被小强攻击,受到了22点伤害!还剩11滴血
小强你被张三攻击,受到了10点伤害!还剩14滴血
张三你被小强攻击,受到了24点伤害!还剩-13滴血
张三你被杀死了!胜败乃兵家常事 请重新来过。
""")
input()

_2_ 发表于 2020-5-11 21:38:48

乘号 发表于 2020-5-11 20:49


你的代码写的太淦了吧……

ba21 发表于 2020-5-11 21:47:31

'''
题:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于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)

Mrzhou1201 发表于 2020-5-11 21:59:03

小版主写的太好了

heidern0612 发表于 2020-5-11 22:00:47

本帖最后由 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

ba21 发表于 2020-5-11 22:01:08

Mrzhou1201 发表于 2020-5-11 21:59
小版主写的太好了

相互学习

heidern0612 发表于 2020-5-11 22:08:51

ba21 发表于 2020-5-11 21:47


大佬优秀

Twilight6 发表于 2020-5-11 22:15: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('小强你被杀死了!胜败乃兵家常事 请重新来过。')

Twilight6 发表于 2020-5-11 22:17:54

ba21 发表于 2020-5-11 21:47


大佬秀...我忽略了定义人物名称

a聪明叶 发表于 2020-5-12 09:54:18

Twilight6 发表于 2020-5-11 22:15


哇 都是大佬级别呀!!
页: [1]
查看完整版本: 求大神们帮忙!!