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_=1,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.8
self.MAGIC_ATTACK += 1
self.EXP = 1
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]
#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_]
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()