Python实践项目2
#南昌理工学院人工智能学院实验室WORKSHOP实践项目
import time
import random
SCRIPT_NPC_SCHOOL_SISTER = ['你好!',
                                  '你好!',
                                  '你是新生嘛?',
                                  '是的',
                                  '想要我教你魔法吗?',
                                  '\n1、好的 \
                                 \n2、不用了吧,我不和学姐学魔法!\n'
                                  ]
MAGIC_BOOKS = [
    ['风巽千叶翔龙', 1],
    ['泽兑鬼尘珠', 2],
    ['凤翔九天', 3]
]
class Body:  # 人物类
    LEVEL=1  #等级
    EXP=0    #经验
    NAME = ''  # 名字
    HP = 0  # 血量
    MAX_HP = 0  # 最大血量
    MP = 0  # 魔法值
    MAX_MP = 0  # 最大魔法值
    ATTACK = 1
    MAGIC_ATTACK = 1.3
    DEFENSE=5
    HAS_MAGIC = []  # 会的魔法
    POS_NAME = '南昌理工学院南大门'  # 地点  
    def __init__(self, NAME_='Ice NPC',LEVEL_=1,EXP_=0, HP_=3, MP_=3, MAX_HP_=3, MAX_MP_=3, ATTACK_=1, MAGIC_ATTACK_=1.3, HAS_MAGIC_=[],
                 POS_NAME_='南昌理工学院南大门', DEFENSE_=5):
        # 初始化 默认值
        self.LEVEL=LEVEL_
        self.EXP=EXP_
        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.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/3/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 == '3':
            print('恭喜' + self.NAME + '学会' + MAGIC_BOOKS[NPC_.HAS_MAGIC[2]][0] +
                  ',每次使用消耗' + str(MAGIC_BOOKS[NPC_.HAS_MAGIC[2]][1]) + 'MP.')
            self.HAS_MAGIC = self.HAS_MAGIC + [NPC_.HAS_MAGIC[2]]
            self.display_magic()
        elif CHOOSE == 'no':
            print('由于你的固执,没有学习新的魔法.')
        else:
            print('不明白你说什么.')
    def DEFENSE_(self,NPC):
        hit=self.ATTACK*(100-self.DEFENSE)%100
        return hit
    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
            self.HP = NPC_.HP + self.DEFENSE
            self.EXP=self.EXP+MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]
            print('【', self.NAME + '击剑攻击' + NPC_.NAME, '造成了' + str(self.ATTACK), '点攻击】')
            print('***' + self.NAME + '增加了' + str(MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]) + '点经验值***')
            print('【', self.NAME + '消耗了' + str(MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]) + '点魔法】')
            print('***' + self.NAME + '的经验值为' + str(self.EXP) + '***')
        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_]
            NPC_.MP = NPC_.MP + self.HAS_MAGIC[iChoose_magic_]#实现魔法无消耗
            self.MP=self.MP-MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]
            self.EXP=self.EXP+MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]
            print('【', self.NAME + '用魔法' + MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][0] + ',攻击了' + NPC_.NAME + ',',
                  '造成了' + str(hit) + '点攻击!】')
            print('***'+self.NAME+'增加了'+str(MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1])+'点经验值***')
            print('【',self.NAME+'消耗了'+str(MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1])+'点魔法】')
            print('***'+self.NAME+'的经验值为'+str(self.EXP)+'***')
        if self.EXP>=2:   #如果经验值大于等于2  玩家即升一级
            print('***'+self.NAME+'已升级')  #显示玩家已升级
            self.LEVEL=self.LEVEL+1
            self.EXP=0     #升级后 经验清零
            print('***'+self.NAME+'的等级为'+str(self.LEVEL)+'***')
            # 玩家各属性提升
            self.HP=self.HP+1
            self.MP=self.MP+1
            self.MAX_HP=self.MAX_HP+1
            self.MAX_MP=self.MAX_MP+1
            self.DEFENSE=self.DEFENSE+5
            self.ATTACK=self.ATTACK+1
            self.MAGIC_ATTACK=self.MAGIC_ATTACK+0.5
            #输出玩家升级后属性值
            print('***'+self.NAME+'的HP为'+str(self.HP)+'***')
            print('***'+self.NAME+'的MP为'+str(self.MP)+'***')
            print('***'+self.NAME+'的最大生命为'+str(self.MAX_HP)+'***')
            print('***'+self.NAME+'的最大魔法为'+str(self.MAX_MP)+'***')
            print('***'+self.NAME+'的普通攻击力为'+str(self.ATTACK)+'***')
            print('***'+self.NAME+'的魔法攻击为'+str(self.MAGIC_ATTACK)+'***')
            print('***'+self.NAME+'的防御为'+str(self.DEFENSE)+'***')
        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,2]),
        '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()
												
											Python实践项目2的更多相关文章
- python实践项目1
		
python #南昌理工学院人工智能学院实验室 WORKSHOP 实践项目 import time print('welcome to our WORKSHOP') print('.......... ...
 - python实践项目九:操作文件-修改文件名
		
描述:多个文件,文件名名包含美国风格的日期( MM-DD-YYYY),需要将它们改名为欧洲风格的日期( DD-MM-YYYY) 代码1:先创建100个文件名为美国风格日期的文件(文件路径为项目当前路径 ...
 - python实践项目一:Collatz函数
		
要求1:编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数,那么 collatz()就打印出 number // 2, 并返回该值.如果 number 是奇数, ...
 - Python实践项目——LSB隐写术
		
此为北京理工大学某专业某学期某课程的某次作业 一.项目背景 1.隐写术 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容. 2.L ...
 - python 实践项目
		
项目一:让用户输入圆的半径,告诉用户圆的面积 思路: 1.首先需要让用户输入一个字符串,即圆的半径 2.判断用户输入的字符串是否为数字 isalpha 3.求圆的面积需要调用到math模块,所以要导 ...
 - python实践项目—Collatz序列
		
Collatz序列题意说明 编写一个名为collatz()的函数,它有一个名为number 的参数.如果参数是偶数,那么collatz()就打印出number // 2,并返回该值.如果number ...
 - python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件
		
描述:将指定路径下的某文件夹备份到一个zip文件 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # backupToZip - Copies an ent ...
 - python实践项目八:生成随机试卷文件
		
描述:匹配美国50个州的首府. 下面是程序需要完成的任务: • 创建35 份不同的测验试卷. • 为每份试卷创建50 个多重选择题,次序随机. • 为每个问题提供一个正确答案和3 个随机的错误答案,次 ...
 - python实践项目七:正则表达式版本的strip()函数
		
描述:写一个函数,它接受一个字符串,做的事情和 strip()字符串方法一样.如果只传入了要去除的字符串, 没有其他参数, 那么就从该字符串首尾去除空白字符:否则, 函数第二个参数指定的字符将从该字符 ...
 
随机推荐
- 响应式Web设计与CSS(上)
			
1.一个例子 响应式Web设计最核心的一点,就是可以适配不同视口大小的流式布局. 1.1 简单上手 <div class="row"> <header class ...
 - UIAutomator环境Android8.0 环境异常解决
			
个人PC环境 ANDROID_HOME:F:\1Study\Andriod\51zxw_2018-0102\Sdk ANT_HOME:D:\ant\apache-ant-1.10.5\ CLASSPA ...
 - [机器学习 ]PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做
			
PCA降维--两种实现 : SVD或EVD. 强力总结. 在鸢尾花数据集(iris)实做 今天自己实现PCA,从网上看文章的时候,发现有的文章没有搞清楚把SVD(奇异值分解)实现和EVD(特征值分解) ...
 - C#LeetCode刷题之#342-4的幂(Power of Four)
			
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4058 访问. 给定一个整数 (32 位有符号整数),请编写一个函 ...
 - Homekit_DoHome_智能通断器
			
本款通断器适用于IOS和android系统用户,苹果用户可以非常方便的使用siri进行有效控制,android用户需要下载Dohome App进行操作,同时支持市面上主流的智能音箱进行控制. 对于an ...
 - 怎么把txt转换成excel
			
地址: https://jingyan.baidu.com/article/c1465413b2f2c50bfdfc4c61.html
 - Windows 右键 照片查看器 不见了--解决办法
			
桌面新建 一个文本文档,将下边复制进去,另存为命名例如为:1.reg 双击运行1.reg,点‘是’,点确认即可. Windows Registry Editor Version 5.00 ; Chan ...
 - CODING DevOps 微服务项目实战系列第一课,明天等你
			
CODING DevOps 微服务项目实战系列第一课<DevOps 微服务项目实战:DevOps 初体验>将由 CODING DevOps 开发工程师 王宽老师 向大家介绍 DevOps ...
 - Oracle数据库安装教程
			
一.准备文件 Oracle安装程序(64位)下载地址: http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_ ...
 - 简述 jpg  png   gif  png-8  png-24  的区别
			
Gif 格式的特点: 1.透明性,GIF是一种布尔透明类型,既可以是全透明,又可以是不透明,但是不可以半透明: 2.动画 GIF支持动画. 3.无损耗性 GIF是一种无损耗的图像格式,也 ...