南理文字RPGTwo

超级玛丽的简单实现

在此次实现中使用到了类以及函数实现了一个简单的小游戏

在python3中创建类时自动继承object类,类中有着魔法方法。在类定义时使用了父类中的"new"魔法方法,以此创建一个类对象。

创建方式:

class obj():     #此处括号可写可不写,括号中写的是继承那个父类,也可以是根据那个父类创建类对象
	pass          #占位符

函数

创建方式:

#定长参数函数
def func():
    pass
#不定长参数函数
def func(*args,**kwargs):
    pass

字典

字典包含两个部分,一个为key(键)一个为value(值)。字典通过key来查找对应的value,在字典中键值对的位置是无序的

创建方式:

item = {}   #空字典
item = {"key":"value"}
item["key"] = "value"
item.keys()   #得到一个可迭代的键集合
item.values()  #得到一个可迭代的值集合
item.items()   #得到可迭代的键值对集合

下面为文字小游戏的实现

# coding = "utf-8"

import time
import random

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


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

class Body():

    ACCACK = 1

    def __init__(self,NAME_='Ice NPC',HP_=3,MP_=3,MAX_HP_=3,MAX_MP_=3,ATTACK_=1,MAGIC_ATTACK_=1.3,DEFENSE_=0,LEVEL_=1,EXPRIENCE_=0,MAX_EXPRIENCE_ = 20,FUNCTION_POINT_=0,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.DEFENSE = DEFENSE_
        self.LEVEL = LEVEL_
        self.EXPERIENCE = EXPRIENCE_
        self.MAX_EXPERIENCE = MAX_EXPRIENCE_
        self.FUNCTION_POINT = FUNCTION_POINT_

        self.POS_NAME = POS_NAME_
        self.HAS_MAGIC = HAS_MAGIC_

    def Display_Magic(self):      #显示魔法
        for i in self.HAS_MAGIC:
            print(MAGIC_BOOKS[i][0]+"每次攻击消耗"+str(MAGIC_BOOKS[i][1])+"点魔法值")

    def Display_Status(self):    #显示人物状态
        print('\n\r', '    状态:' + self.NAME)
        print("等级:"+str(self.LEVEL)+"     距离下次升级还需"+str(self.MAX_EXPERIENCE-self.EXPERIENCE)+"经验", end='')
        print('\n血量:' + '❤' * int(self.HP), '\n  魔法值:' + '⚓' * int(self.MP),'\n  防御:' + '🛡' * int(self.DEFENSE))
        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),'  防御:' + '🛡' * int(self.DEFENSE))

    def Attack_One_Time(self,CHOOSE,NPC_):       #对敌方进行一次攻击
        if CHOOSE == -2:
            self.Display_Magic()

        elif CHOOSE == -1:
            hit = NPC_.DEFENSE - 1
            if hit<0:
                NPC_.HP -= 1
                print(self.NAME+"使用普攻攻击了"+NPC_.NAME+"造成了"+str(hit)+"点攻击")
            print(self.NAME+"使用普攻攻击了"+NPC_.NAME+"造成了0点攻击")
            print("无魔法消耗")

        else:
            if CHOOSE in self.HAS_MAGIC:
                hit = self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1] - NPC_.DEFENSE
                if hit>0:
                    NPC_.HP -= hit
                    print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了" + str(hit) + "点攻击")
                print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了0点攻击")
                self.MP -= MAGIC_BOOKS[CHOOSE][1]
                print("消耗了"+str(MAGIC_BOOKS[CHOOSE][1])+"点魔法")

            else:
                print("你没有此魔法")

        if NPC_.HP <= 0:
            return 1
        else:
            return 0

    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 display_magic(self):  # 显示魔法
        print(self.NAME + '会如下几种魔法:')
        print('魔法名 ,消耗点数')
        i = 0
        for iMagic in self.HAS_MAGIC:
            print('第', i+1, '个魔法:', MAGIC_BOOKS[iMagic])
            i = i + 1

    def Learn_Magic_From(self,NPC_):      #学习魔法
        NPC_.display_magic()
        CHOOSE = input("是否学习魔法y/n:")
        if CHOOSE == "y":
            for i in NPC_.HAS_MAGIC:
                print('恭喜'+self.NAME+'学会'+MAGIC_BOOKS[i][0]+
                  ',每次使用消耗'+str(MAGIC_BOOKS[i][1])+'MP.')
                self.HAS_MAGIC.append(i)
            self.Display_Magic()
        elif CHOOSE == "n":
            print("由于你的固执,你只能普攻")
        else:
            print("不知道你在说什么")

    #挑战NPC
    def Fight_With(self,NPC_):
        print('【', self.NAME + '开始和' + NPC_.NAME + '战斗! !', '】')

        MAX_ROUND = 100
        IS_DEAD = 0

        for i in range(MAX_ROUND):
            if i%2==0:
                self.display_status_fighting()     #显示玩家状态
                self.Display_Magic()               #显示玩家魔法
                NPC_.Display_Status()              #显示NPC状态
                HAS_MAGIC = []
                for i in self.HAS_MAGIC:
                    HAS_MAGIC.append(str(i))
                HAS_MAGIC = "/".join(HAS_MAGIC)
                choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,{}.魔法攻击,查看状态-2):'.format(HAS_MAGIC)))
                IS_DEAD = self.Attack_One_Time(NPC_ = NPC_, CHOOSE=choose_magic)
                IS_DEAD = IS_DEAD * 2  # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
            else:
                choose_magic = random.choice(NPC_.HAS_MAGIC+[-1])

                IS_DEAD = NPC_.Attack_One_Time(NPC_=self,CHOOSE=choose_magic)
                IS_DEAD = IS_DEAD*4   #用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
            if IS_DEAD>=1:
                print('【战斗结束】')
                if IS_DEAD==2:
                    print('【',self.NAME+'战胜了'+NPC_.NAME,'】')
                    print("恭喜你增加经验20")
                    self.EXPERIENCE += 20
                    while True:
                        if self.EXPERIENCE - self.MAX_EXPERIENCE >= 0:
                            self.LEVEL += 1
                            self.EXPERIENCE -= self.MAX_EXPERIENCE
                            self.MAX_EXPERIENCE *= 2
                            FUNCYTION_POINT = self.FUNCTION_POINT + self.LEVEL * 2 + 2
                            self.FUNCTION_POINT += FUNCYTION_POINT
                            print("恭喜等级提升到" + str(self.LEVEL) + "级","\n  获得"+str(FUNCYTION_POINT)+"点功能点,可用来提升属性")


                        #防止一次提升多次等级
                        if self.EXPERIENCE - self.MAX_EXPERIENCE < 0:
                            break

                    self.Display_Status()
                    for i in range(self.FUNCTION_POINT):
                        CHOOSE = input("你需要提升哪个属性?(HP/MP/DEFENCE)")

                        if CHOOSE == "HP":
                            self.HP += 1
                        elif CHOOSE == "MP":
                            self.MP += 1
                        elif CHOOSE == "DEFENCE":
                            self.DEFENSE += 1
                    self.Display_Status()

                elif IS_DEAD==4:
                    print('【',NPC_.NAME+'战胜了'+self.NAME,'】')
                return IS_DEAD
            else:
                if i % 2 == 1:
                    print('【第' + str(1 + int(i / 2)) + '回合结束!】\n===================================')

class World:

    PLAYER = Body(DEFENSE_=2)

    def __init__(self):
        self.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])
        }
        print("欢迎来到南理文字游戏")
        self.PLAYER.NAME = input("请输入玩家姓名")
        print('....南理文字RPG0.2的世界开始了.....')

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

    #随机选择PNPC
    def Draw_NPC(self):
        NPCs = [i for i in self.NPCs.keys()]
        num = random.randint(0,len(NPCs)-1)
        return self.NPCs[NPCs[num]]

    #实现逻辑
    def run(self):
        #展示人物状态
        self.PLAYER.Display_Status()

        #随机选择NPVC
        NPC_ = self.Draw_NPC()

        #遭遇NPC
        self.PLAYER.talk_to(NPC_=NPC_,NPC_SCRIPT_=SCRIPT_NPC_SCHOOL_SISTER)

        #向NPC进行学习
        self.PLAYER.Learn_Magic_From(NPC_)

        #随机挑战NPC
        NPC_ = self.Draw_NPC()
        self.PLAYER.Fight_With(NPC_)

if __name__ == "__main__":
    magic_world = World()
    magic_world.run()

本人学习所创,如有错误请多多指教

联系QQ1135999353

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值