鱼C论坛

 找回密码
 立即注册
查看: 1289|回复: 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
'''
题:英雄和怪物轮流攻击对方,展示对方受到的伤害与剩余血量,当一方血量低于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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

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

你的代码写的太淦了吧……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 21:59:03 From FishC Mobile | 显示全部楼层
小版主写的太好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

相互学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-11 22:08:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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('小强你被杀死了!胜败乃兵家常事 请重新来过。')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬秀...我忽略了定义人物名称
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哇 都是大佬级别呀!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 08:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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