#南昌理工学院人工智能学院实验室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的更多相关文章

  1. python实践项目1

    python #南昌理工学院人工智能学院实验室 WORKSHOP 实践项目 import time print('welcome to our WORKSHOP') print('.......... ...

  2. python实践项目九:操作文件-修改文件名

    描述:多个文件,文件名名包含美国风格的日期( MM-DD-YYYY),需要将它们改名为欧洲风格的日期( DD-MM-YYYY) 代码1:先创建100个文件名为美国风格日期的文件(文件路径为项目当前路径 ...

  3. python实践项目一:Collatz函数

    要求1:编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数,那么 collatz()就打印出 number // 2, 并返回该值.如果 number 是奇数, ...

  4. Python实践项目——LSB隐写术

    此为北京理工大学某专业某学期某课程的某次作业 一.项目背景 1.隐写术 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容. 2.L ...

  5. python 实践项目

    项目一:让用户输入圆的半径,告诉用户圆的面积 思路: 1.首先需要让用户输入一个字符串,即圆的半径 2.判断用户输入的字符串是否为数字  isalpha 3.求圆的面积需要调用到math模块,所以要导 ...

  6. python实践项目—Collatz序列

    Collatz序列题意说明 编写一个名为collatz()的函数,它有一个名为number 的参数.如果参数是偶数,那么collatz()就打印出number // 2,并返回该值.如果number ...

  7. python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件

    描述:将指定路径下的某文件夹备份到一个zip文件 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # backupToZip - Copies an ent ...

  8. python实践项目八:生成随机试卷文件

    描述:匹配美国50个州的首府. 下面是程序需要完成的任务: • 创建35 份不同的测验试卷. • 为每份试卷创建50 个多重选择题,次序随机. • 为每个问题提供一个正确答案和3 个随机的错误答案,次 ...

  9. python实践项目七:正则表达式版本的strip()函数

    描述:写一个函数,它接受一个字符串,做的事情和 strip()字符串方法一样.如果只传入了要去除的字符串, 没有其他参数, 那么就从该字符串首尾去除空白字符:否则, 函数第二个参数指定的字符将从该字符 ...

随机推荐

  1. Python爬取网站上面的数据很简单,但是如何爬取APP上面的数据呢

  2. Web For Pentester 学习笔记 - XSS篇

    XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给 ...

  3. 打开终端自动source .bashrc文件

    vim ~/.bash_profile在文件内部输入 if test -f .bashrc ; then source .bashrc fi 就再也不用手动source了

  4. python3.x与2.x中print输出不换行

    python3.x: print(i,end=' ') 循环输出: ... ------------------------- print(i,end='!') 循环输出:!!!... end=单引号 ...

  5. C#设计模式之19-观察者模式

    观察者模式(Observer Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/423 访问. 观察者模式 ...

  6. C#LeetCode刷题之#532-数组中的K-diff数对(K-diff Pairs in an Array)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3716 访问. 给定一个整数数组和一个整数 k, 你需要在数组里找 ...

  7. Hyperledger Fabric介绍

    转载地址 https://blog.csdn.net/xiaonu123/article/details/81006936 简介 Hyperledger介绍 超级账本(Hyperledger)项目是首 ...

  8. MySQL数据库练习题

    表结构 DROP DATABASE IF EXISTS test1; CREATE DATABASE test1; USE test1; ##部门表 #DROP IF EXISTS TABLE DEP ...

  9. Java 添加条码、二维码到PDF文档

    本文介绍如何通过Java程序在PDF文档中添加条码和二维码.创建条码时,可创建多种不同类型的条码,包括Codebar.Code11.Code128A.Code128B.Code32.Code39.Co ...

  10. python3在科学计算中的三种常用数据结构

    在科学研究中,数据运算是必不可少的,下面介绍python语言在科学计算中常用的数据结构和运算函数. 主要数据结构: (1)列表,用中括号表示,元素之间逗号分隔,每个元素可以是数字,字符,也可以是列表, ...