作业6
创建函数在 Python 中,使用 def 关键字定义函数,调用函数,使用函数名称后跟括号。
`def my_function():
print("Hello from a function")
my_function() #调用函数
`
Python 是一种面向对象的编程语言,Python 中的几乎所有东西都是对象,拥有属性和方法。类(Class)类似对象构造函数,或者是用于创建对象的“蓝图”。
所有类都有一个名为 __init__() 的函数,它始终在启动类时执行。
使用 __init__() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作。
self 参数是对类的当前实例的引用,用于访问属于该类的变量。
它不必被命名为 self,您可以随意调用它,但它必须是类中任意函数的首个参数。
class Person:
def __init__(mysillyobject, name, age):
mysillyobject.name = name
mysillyobject.age = age
def myfunc(abc):
print("Hello my name is " + abc.name)
p1 = Person("Bill", 63)
p1.myfunc()
字典是一个无序、可变和有索引的集合。在 Python 中,字典用花括号编写,拥有键和值。
thisdict = {
"brand": "Porsche",
"model": "911",
"year": 1963
}
print(thisdict)
作业1
增加了
`self.MP=self.MAX_MP - hit`
造成了多少魔法伤害,就扣多少魔法值。
作业2
在body中增加了DEF防御属性,物理防御和法术防御,物理防御在遭受普通攻击是可以抵挡一半伤害,法术防御在遭受魔法攻击时抵挡一半伤害。
作业3
在body中增加EXP经验值体系,以及等级体系,设定是完成一次战斗增加1经验,升级后普通攻击伤害+1,魔法伤害攻击+1。
作业4
还可以增加装备属性,提高攻击或者防御。然后火魔法对火怪伤害减半,冰魔法对冰怪伤害减半。
作业5
import time
import random
#与学姐的台词
SCRIPT_NPC_SCHOOL_SISTER=['你好!',
'你好!',
'你是新生吗?',
'是的',
'想要我教你魔法吗?',
'\n1、好的 \
\n2、不用了吧,我不和学姐学魔法!\n'
]
#世界里的魔法清单
MAGIC_BOOKS=[
['火魔法',1],
['水魔法',2],
['土魔法',0.5]
]
class Body: #人物类
NAME='' #名字
HP=0 #血量
MAX_HP=0 #最大血量
MP=0 #魔法值
MAX_MP=0 #最大魔法值
DEF=0 #防御值
MAX_DEF=0 #最大防御值
EXP=0 #经验值
MAX_EXP=0
ATTACK=1
LEVEL=1
MAGIC_ATTACK=1.3
HAS_MAGIC=[] #会的魔法
POS_NAME='南昌理工学院南大门' #地点
def __init__(self,NAME_='Ice NPC',HP_=3,MP_=3,MAX_HP_=3,MAX_MP_=3,DEF_=3,MAX_DEF_=3,EXP_=0,MAX_EXP_=3,ATTACK_=1,LEVEL_=1,MAGIC_ATTACK_=1.3,HAS_MAGIC_=[],POS_NAME_='南昌理工学院南大门'):
#初始化 默认值
self.NAME=NAME_
self.HP=HP_
self.MP=MP_
self.DEF=DEF_
self.EXP=EXP_
self.MAX_EXP=MAX_EXP_
self.MAX_HP=MAX_HP_
self.MAX_MP=MAX_MP_
self.MAX_DEF=MAX_DEF_
self.ATTACK=ATTACK_
self.LEVEL=LEVEL_
self.MAGIC_ATTACK=MAGIC_ATTACK_
self.POS_NAME=POS_NAME_
self.HAS_MAGIC=HAS_MAGIC_
def display_status(self): #显示人物状态
print('\n\r',' 状态:'+self.NAME,end = '')
print('\n 等级:'+str(self.LEVEL),'\n血量:'+'❤'*int(self.HP),'\n 魔法值:'+'⚓'*int(self.MP),'\n 防御值:'+'⭐'*int(self.DEF),'\n 经验值:'+'♥'*int(self.EXP))
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 等级:'+str(self.LEVEL),'\n血量:'+'❤'*int(self.HP),'\n 魔法值:'+'⚓'*int(self.MP),'\n 防御值:'+'⭐'*int(self.DEF),'\n 经验值:'+'♥'*int(self.EXP))
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),'点攻击】'+NPC_.NAME,'增加了1经验值')
self.EXP=self.EXP + 1
elif iChoose_magic_==0: #print(iChoose_magic_)
hit=self.MAGIC_ATTACK*MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]
self.MP=self.MAX_MP - hit
self.EXP=self.EXP + 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)+'点攻击'+"消耗了"+str(hit)+'点魔法值!'+NPC_.NAME,'增加了1经验值''】')
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魔法攻击,查看状态-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]),
'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()
请输入玩家名:55
…南理文字RPG0.2的世界开始了…
Hi,55,欢迎加入南理文字RPG0.2
状态:55
等级:1
血量:❤❤❤
魔法值:⚓⚓⚓
防御值:⭐⭐⭐
经验值:
地点:南昌理工学院南大门
无魔法
在南昌理工学院南大门遇到 school elder sister
school elder sister:你好!
55:你好!
school elder sister:你是新生吗?
55:是的
school elder sister:想要我教你魔法吗?
55:
1、好的
2、不用了吧,我不和学姐学魔法!
school elder sister会如下几种魔法:
魔法名 ,消耗点数
第 0 个魔法: [‘火魔法’, 1]
第 1 个魔法: [‘水魔法’, 2]
是否向school elder sister学魔法?(输入:1/2/no)2
恭喜55学会水魔法,每次使用消耗2MP.
55会如下几种魔法:
魔法名 ,消耗点数
第 0 个魔法: [‘水魔法’, 2]
【 55开始和fire monster战斗! ! 】
状态:55
等级:1
血量:❤❤❤
魔法值:⚓⚓⚓
防御值:⭐⭐⭐
经验值:
55会如下几种魔法:
魔法名 ,消耗点数
第 0 个魔法: [‘水魔法’, 2]
状态:fire monster
等级:1
血量:❤❤❤
魔法值:⚓⚓⚓
防御值:⭐⭐⭐
经验值:
-----使用魔法/普通攻击(-1普通攻击,0魔法攻击,查看状态-2):-1
【 55击剑攻击fire monster 造成了1 点攻击】fire monster 增加了1经验值
【 fire monster用魔法火魔法,攻击了55, 造成了1.3点攻击消耗了1.3点魔法值!55 增加了1经验值】
【第1回合结束!】
状态:55
等级:1
血量:❤
魔法值:⚓⚓⚓
防御值:⭐⭐⭐
经验值:♥
55会如下几种魔法:
魔法名 ,消耗点数
第 0 个魔法: [‘水魔法’, 2]
状态:fire monster
等级:1
血量:❤❤
魔法值:⚓
防御值:⭐⭐⭐
经验值:♥
-----使用魔法/普通攻击(-1普通攻击,0魔法攻击,查看状态-2):0
【 55用魔法水魔法,攻击了fire monster, 造成了2.6点攻击消耗了2.6点魔法值!fire monster 增加了1经验值】
【战斗结束】
【 55战胜了fire monster 】