import time
import random
# 与学姐的台词
SCRIPT_NPC_SCHOOL_SISTER = ['你好!',
'你好!',
'你是新生吗?',
'是的',
'想要我教你魔法吗?',
'\n1、好的 \
\n2、不用了吧,我不和学姐学魔法!\n'
]
# 世界里的魔法清单
MAGIC_BOOKS = [
['火魔法', 1],
['水魔法', 2],
['土魔法', 0.5]
]
class Body: # 人物类
NAME = '' # 名字
LEVEL = 0
EXP = 0
HP = 0 # 血量
MAX_HP = 0 # 最大血量
MP = 0 # 魔法值
MAX_MP = 0 # 最大魔法值
ATTACK = 1
DEFENSE = 0
MAGIC_ATTACK = 1.3
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,DEFENSE_=0, MAGIC_ATTACK_=1.3, HAS_MAGIC_=[],
POS_NAME_='斗罗大陆'):
# 初始化 默认值
self.NAME = NAME_
self.LEVEL = LEVEL_
self.EXP = EXP_
self.HP = HP_
self.MP = MP_
self.MAX_HP = MAX_HP_
self.MAX_MP = MAX_MP_
self.ATTACK = ATTACK_
self.DEFENSE = DEFENSE_
self.MAGIC_ATTACK = MAGIC_ATTACK_
self.POS_NAME = POS_NAME_
self.HAS_MAGIC = HAS_MAGIC_
def upgrade_system(self): # 升级系统
if self.EXP == 100:
self.LEVEL += 1
self.HP += 1
self.MP += 1
self.ATTACK += 1
self.DEFENSE += 0.3
self.MAGIC_ATTACK += 1
self.EXP = 0
print('恭喜玩家已升级')
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] - NPC_.DEFENSE # 有防御力
# 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_]
self.MP = self.MP - MAGIC_BOOKS[NPC_.HAS_MAGIC[iChoose_magic_]][1] # 扣魔法值
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, '】')
self.EXP += 50
self.upgrade_system()
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('....斗罗大陆的世界开始了.....')
welcome_script = 'Hi,' + self.PLAYER.NAME + ',欢迎进入斗罗大陆 '
# 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()
Workshop2
最新推荐文章于 2024-09-09 13:35:51 发布