超级玛丽workshop-第二周

第二周Python如期而至##

——分享我的心得及不懂的地方(望看到的大佬能帮忙解决一下)
Project:超级玛丽woroshop

  1. 这周我们接着上周对代码进行完善
  2. 这次敲的代码相对上周而言比较多
    下面是代码
南昌理工学院人工智能学院 深度学习workshop兴趣小组
Project:超级玛丽woroshop第二周
#游戏地图

"""
#引入time库
import time
#引入随机相关函数
import random

# 与学姐的台词
SCRIPT_NPC_SCHOOL_SISTER = ['你好!',
                            '你好!',
                            '你是新生吗?',
                            '是的',
                            '想要我教你魔法吗?',
                            '\n1、好的 \
                          \n2、不用了吧,我不和学姐学魔法!\n'
                            ]

# 世界里的魔法清单
MAGIC_BOOKS = [
    ['火魔法', 1],
    ['水魔法', 2],
    ['土魔法', 0.5]
]


class Body:  # 人物类

    NAME = ''  # 名字
    HP = 0  # 血量
    MAX_HP = 0  # 最大血量
    MP = 0  # 魔法值
    MAX_MP = 0  # 最大魔法值

    ATTACK = 1
    MAGIC_ATTACK = 1.3

    HAS_MAGIC = []  # 会的魔法

    POS_NAME = '南昌理工学院南大门'  # 地点

    def __init__(self, NAME_='Ice NPC', HP_=3, MP_=3, MAX_HP_=3, MAX_MP_=3, ATTACK_=1, MAGIC_ATTACK_=1.3, HAS_MAGIC_=[],
                 POS_NAME_='南昌理工学院南大门'):
        # 初始化 默认值

        self.NAME = NAME_
        self.HP = HP_
        self.MP = MP_
        self.MAX_HP = MAX_HP_
        self.MAX_MP = MAX_MP_
        self.ATTACK = ATTACK_
        self.MAGIC_ATTACK = MAGIC_ATTACK_

        self.POS_NAME = POS_NAME_
        self.HAS_MAGIC = HAS_MAGIC_

    def display_status(self):  # 显示人物状态
        print('\n\r', '    状态:' + self.NAME, end='')
        print('\n血量:' + '❤' * int(self.HP), '\n  魔法值:' + '⚓' * int(self.MP))
        print('地点:' + self.POS_NAME)

        if self.HAS_MAGIC == []:
            print('无魔法')
        else:
            self.display_magic()

    def display_status_fighting(self):

        print('\n\r', '    状态:' + self.NAME, end='')
        print('\n血量:' + '❤' * int(self.HP), '  魔法值:' + '⚓' * int(self.MP))

    def display_magic(self):  # 显示魔法
        print(self.NAME + '会如下几种魔法:')

        print('魔法名 ,消耗点数')

        i = 0

        for iMagic in self.HAS_MAGIC:
            print('第', i, '个魔法:', MAGIC_BOOKS[iMagic])
            i = i + 1

    def talk_to(self, NPC_, NPC_SCRIPT_, delay=0.3):
        # 按剧本和NPC聊天
        print('在' + self.POS_NAME + '遇到 ' + NPC_.NAME)

        for i in range(len(NPC_SCRIPT_)):
            if i % 2 == 1:  # 判断当前说话的人
                TURN = self.NAME
            else:
                TURN = NPC_.NAME

            print(TURN + ':' + NPC_SCRIPT_[i])
            time.sleep(delay)

    def learn_magic_from(self, NPC_):
        # 向NPC学习魔法

        NPC_.display_magic()
        CHOOSE = input('是否向' + NPC_.NAME + '学魔法?(输入:1/2/no)')

        if CHOOSE == '1':

            print('恭喜' + self.NAME + '学会' + MAGIC_BOOKS[NPC_.HAS_MAGIC[0]][0] +
                  ',每次使用消耗' + str(MAGIC_BOOKS[NPC_.HAS_MAGIC[0]][1]) + 'MP.')
            self.HAS_MAGIC = self.HAS_MAGIC + [NPC_.HAS_MAGIC[0]]
            self.display_magic()
        elif CHOOSE == '2':
            print('恭喜' + self.NAME + '学会' + MAGIC_BOOKS[NPC_.HAS_MAGIC[1]][0] +
                  ',每次使用消耗' + str(MAGIC_BOOKS[NPC_.HAS_MAGIC[1]][1]) + 'MP.')
            self.HAS_MAGIC = self.HAS_MAGIC + [NPC_.HAS_MAGIC[1]]
            self.display_magic()
        elif CHOOSE == 'no':
            print('由于你的固执,没有学习新的魔法.')
        else:
            print('不明白你说什么.')

    def attack_one_time(self, NPC_, iChoose_magic_=-1):  # 攻击一下NPC
        if iChoose_magic_ == -2:
            self.display_status()
        elif iChoose_magic_ == -1:
            NPC_.HP = NPC_.HP - self.ATTACK
            print('【', self.NAME + '击剑攻击' + NPC_.NAME, '造成了' + str(self.ATTACK), '点攻击】')
        elif iChoose_magic_ in self.HAS_MAGIC:
            # print(iChoose_magic_)
            hit = self.MAGIC_ATTACK * MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]

            # print('hit:',hit,',',self.MAGIC_ATTACK,',',self.HAS_MAGIC[iChoose_magic_])
            NPC_.HP = NPC_.HP - hit  # 魔法伤害=魔法消耗*魔法攻击力
            NPC_.MP = NPC_.MP - self.HAS_MAGIC[iChoose_magic_]
            print('【', self.NAME + '用魔法' + MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][0] + ',攻击了' + NPC_.NAME + ',',
                  '造成了' + str(hit) + '点攻击!】')
        if NPC_.HP <= 0:
            return 1
        else:
            return 0

    def fight_with(self, NPC_):
        # 挑战NPC

        print('【', self.NAME + '开始和' + NPC_.NAME + '战斗! !', '】')

        MAX_ROUND = 100
        IS_DEAD = 0

        for ROUND in range(MAX_ROUND):

            if (ROUND % 2 == 0):
                self.display_status_fighting()
                self.display_magic()
                NPC_.display_status_fighting()

                choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,0/1/2..魔法攻击,查看状态-2):'))
                IS_DEAD = self.attack_one_time(NPC_, choose_magic)
                IS_DEAD = IS_DEAD * 2  # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
            else:
                choose_magic = random.choice(NPC_.HAS_MAGIC + [-1])

                IS_DEAD = NPC_.attack_one_time(self, choose_magic)
                IS_DEAD = IS_DEAD * 4  # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了

            if IS_DEAD >= 1:
                print('【战斗结束】')
                if IS_DEAD == 2:
                    print('【', self.NAME + '战胜了' + NPC_.NAME, '】')
                elif IS_DEAD == 4:
                    print('【', NPC_.NAME + '战胜了' + self.NAME, '】')
                return IS_DEAD

            else:
                if ROUND % 2 == 1:
                    print('【第' + str(1 + int(ROUND / 2)) + '回合结束!】\n===================================')


class World:  # 世界类

    # 剧本:遇到学姐

    # 玩家初始化
    PLAYER = Body()

    # NPC初始化(先创造三个NPC,学姐,冰怪,火怪
    NPCs = {
        'school elder sister': Body(NAME_='school elder sister', HAS_MAGIC_=[0, 1]),
        'ice monster': Body(NAME_='ice monster', HAS_MAGIC_=[2]),
        'fire monster': Body(NAME_='fire monster', HAS_MAGIC_=[0])
    }

    # 显示一句话:两种方式,直接显示0,以及逐步显示1
    def display_a_line(way, script='hello'):
        for i in range(len(script)):
            time.sleep(0.3)
            print('\r', script[0:i], end='')

    # 初始化世界:
    def init(self):
        player_name = input('请输入玩家名:')

        self.PLAYER.NAME = player_name

        print('....南理文字RPG0.2的世界开始了.....')

        welcome_script = 'Hi,' + self.PLAYER.NAME + ',欢迎加入南理文字RPG0.2 '
        # self.display_a_line(script=welcome_script)
        print(welcome_script)

        self.PLAYER.display_status()

        self.PLAYER.talk_to(self.NPCs['school elder sister'],
                            SCRIPT_NPC_SCHOOL_SISTER)  # 通过NPCs集合,调取'school elder sister'NPC

        self.PLAYER.learn_magic_from(self.NPCs['school elder sister'])

    def run(self):
        self.PLAYER.fight_with(self.NPCs['fire monster'])


magic_world = World()

magic_world.init()

magic_world.run()



代码片

这次封装了较多的函数,比上周的更为简洁,也将上周的文字停留效果进行了改善,除了讲了函数

、还讲了字典

3.当然本次也留了作业
#L2-作业1:南理文字RPG代码每次魔法攻击,没有扣魔法值,请把代码加上去
即在attack_one_time函数里增加即可,代码如下红色框所示L2Z1

#L2-作业2:给Body类加DEFENSE防御力属性(类的变量),并且在普通物理攻击的时候,考虑如何结合防御力和攻击力,扣血。
#L2-作业3:给Body类增加经验值体系EXP,以及等级LEVEL,以及对应的等级提高了后,怎么升级各个属性(最好考虑代码复用性)
作业2和作业3代码如下 ,有些代码下有波浪线,我也不知道怎么回事,具体如何升级各个属性我还没想到该怎么解决在这里插入图片描述
在这里插入图片描述

 def DEFENCE_(self,NPC):
        hit = self.ATTACK*(100-self.DEFENCE) % 100
        return hit

#L2-作业4#:分析attack_one_time 方法,分析这个方法还有哪些细节没考虑到,结合游戏互动可能发生的事情。
在群里面有讨论到可以增加暴击力,防御值之类的,我觉得可以增加共享方法来提升整体能力,也就是说不一定是以一对一进行挑战,可以多对多。(当然,我只是这么想,实现的话可能有些麻烦)
#L2-作业5: 大家自己不抄代码,按自己的理解,从零实现一下这个代码。error
这是我运行时出的问题,后面发现是在初始化的时候DEFENCE忘记和前面代码一致了(漏了下划线
#L2-作业6:完成以下3个链接的代码的练习和调试实验。
函数:https://www.w3school.com.cn/python/python_functions.asp
字典:https://www.w3school.com.cn/python/python_dictionaries.asp
类:https://www.w3school.com.cn/python/python_classes.asp
作业6我在对应链接上已经运行过了。
4.总体感觉这周更难一些,有些还没理解,或许是代码增多了并且知识点也在增多,我得多加敲敲代码,熟练熟练。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值