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