workshop0.2

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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值