超级玛丽的简单实现
在此次实现中使用到了类以及函数实现了一个简单的小游戏
类
在python3中创建类时自动继承object类,类中有着魔法方法。在类定义时使用了父类中的"new"魔法方法,以此创建一个类对象。
创建方式:
class obj(): #此处括号可写可不写,括号中写的是继承那个父类,也可以是根据那个父类创建类对象
pass #占位符
函数
创建方式:
#定长参数函数
def func():
pass
#不定长参数函数
def func(*args,**kwargs):
pass
字典
字典包含两个部分,一个为key(键)一个为value(值)。字典通过key来查找对应的value,在字典中键值对的位置是无序的
创建方式:
item = {} #空字典
item = {"key":"value"}
item["key"] = "value"
item.keys() #得到一个可迭代的键集合
item.values() #得到一个可迭代的值集合
item.items() #得到可迭代的键值对集合
下面为文字小游戏的实现
# coding = "utf-8"
import time
import random
SCRIPT_NPC_SCHOOL_SISTER=['你好!',
'你好!',
'你是新生吗?',
'是的',
'想要我教你魔法吗?',
'\n1、好的 \
\n2、不用了吧,我不和学姐学魔法!\n'
]
#世界里的魔法清单
MAGIC_BOOKS=[
['火魔法',1],
['水魔法',2],
['土魔法',0.5]
]
class Body():
ACCACK = 1
def __init__(self,NAME_='Ice NPC',HP_=3,MP_=3,MAX_HP_=3,MAX_MP_=3,ATTACK_=1,MAGIC_ATTACK_=1.3,DEFENSE_=0,LEVEL_=1,EXPRIENCE_=0,MAX_EXPRIENCE_ = 20,FUNCTION_POINT_=0,HAS_MAGIC_=[],POS_NAME_='南昌理工学院南大门'):
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.LEVEL = LEVEL_
self.EXPERIENCE = EXPRIENCE_
self.MAX_EXPERIENCE = MAX_EXPRIENCE_
self.FUNCTION_POINT = FUNCTION_POINT_
self.POS_NAME = POS_NAME_
self.HAS_MAGIC = HAS_MAGIC_
def Display_Magic(self): #显示魔法
for i in self.HAS_MAGIC:
print(MAGIC_BOOKS[i][0]+"每次攻击消耗"+str(MAGIC_BOOKS[i][1])+"点魔法值")
def Display_Status(self): #显示人物状态
print('\n\r', ' 状态:' + self.NAME)
print("等级:"+str(self.LEVEL)+" 距离下次升级还需"+str(self.MAX_EXPERIENCE-self.EXPERIENCE)+"经验", end='')
print('\n血量:' + '❤' * int(self.HP), '\n 魔法值:' + '⚓' * int(self.MP),'\n 防御:' + '🛡' * int(self.DEFENSE))
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),' 防御:' + '🛡' * int(self.DEFENSE))
def Attack_One_Time(self,CHOOSE,NPC_): #对敌方进行一次攻击
if CHOOSE == -2:
self.Display_Magic()
elif CHOOSE == -1:
hit = NPC_.DEFENSE - 1
if hit<0:
NPC_.HP -= 1
print(self.NAME+"使用普攻攻击了"+NPC_.NAME+"造成了"+str(hit)+"点攻击")
print(self.NAME+"使用普攻攻击了"+NPC_.NAME+"造成了0点攻击")
print("无魔法消耗")
else:
if CHOOSE in self.HAS_MAGIC:
hit = self.MAGIC_ATTACK * MAGIC_BOOKS[CHOOSE][1] - NPC_.DEFENSE
if hit>0:
NPC_.HP -= hit
print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了" + str(hit) + "点攻击")
print(self.NAME + "使用" + MAGIC_BOOKS[CHOOSE][0] + "攻击了" + NPC_.NAME + "造成了0点攻击")
self.MP -= MAGIC_BOOKS[CHOOSE][1]
print("消耗了"+str(MAGIC_BOOKS[CHOOSE][1])+"点魔法")
else:
print("你没有此魔法")
if NPC_.HP <= 0:
return 1
else:
return 0
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 display_magic(self): # 显示魔法
print(self.NAME + '会如下几种魔法:')
print('魔法名 ,消耗点数')
i = 0
for iMagic in self.HAS_MAGIC:
print('第', i+1, '个魔法:', MAGIC_BOOKS[iMagic])
i = i + 1
def Learn_Magic_From(self,NPC_): #学习魔法
NPC_.display_magic()
CHOOSE = input("是否学习魔法y/n:")
if CHOOSE == "y":
for i in NPC_.HAS_MAGIC:
print('恭喜'+self.NAME+'学会'+MAGIC_BOOKS[i][0]+
',每次使用消耗'+str(MAGIC_BOOKS[i][1])+'MP.')
self.HAS_MAGIC.append(i)
self.Display_Magic()
elif CHOOSE == "n":
print("由于你的固执,你只能普攻")
else:
print("不知道你在说什么")
#挑战NPC
def Fight_With(self,NPC_):
print('【', self.NAME + '开始和' + NPC_.NAME + '战斗! !', '】')
MAX_ROUND = 100
IS_DEAD = 0
for i in range(MAX_ROUND):
if i%2==0:
self.display_status_fighting() #显示玩家状态
self.Display_Magic() #显示玩家魔法
NPC_.Display_Status() #显示NPC状态
HAS_MAGIC = []
for i in self.HAS_MAGIC:
HAS_MAGIC.append(str(i))
HAS_MAGIC = "/".join(HAS_MAGIC)
choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,{}.魔法攻击,查看状态-2):'.format(HAS_MAGIC)))
IS_DEAD = self.Attack_One_Time(NPC_ = NPC_, CHOOSE=choose_magic)
IS_DEAD = IS_DEAD * 2 # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
else:
choose_magic = random.choice(NPC_.HAS_MAGIC+[-1])
IS_DEAD = NPC_.Attack_One_Time(NPC_=self,CHOOSE=choose_magic)
IS_DEAD = IS_DEAD*4 #用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了
if IS_DEAD>=1:
print('【战斗结束】')
if IS_DEAD==2:
print('【',self.NAME+'战胜了'+NPC_.NAME,'】')
print("恭喜你增加经验20")
self.EXPERIENCE += 20
while True:
if self.EXPERIENCE - self.MAX_EXPERIENCE >= 0:
self.LEVEL += 1
self.EXPERIENCE -= self.MAX_EXPERIENCE
self.MAX_EXPERIENCE *= 2
FUNCYTION_POINT = self.FUNCTION_POINT + self.LEVEL * 2 + 2
self.FUNCTION_POINT += FUNCYTION_POINT
print("恭喜等级提升到" + str(self.LEVEL) + "级","\n 获得"+str(FUNCYTION_POINT)+"点功能点,可用来提升属性")
#防止一次提升多次等级
if self.EXPERIENCE - self.MAX_EXPERIENCE < 0:
break
self.Display_Status()
for i in range(self.FUNCTION_POINT):
CHOOSE = input("你需要提升哪个属性?(HP/MP/DEFENCE)")
if CHOOSE == "HP":
self.HP += 1
elif CHOOSE == "MP":
self.MP += 1
elif CHOOSE == "DEFENCE":
self.DEFENSE += 1
self.Display_Status()
elif IS_DEAD==4:
print('【',NPC_.NAME+'战胜了'+self.NAME,'】')
return IS_DEAD
else:
if i % 2 == 1:
print('【第' + str(1 + int(i / 2)) + '回合结束!】\n===================================')
class World:
PLAYER = Body(DEFENSE_=2)
def __init__(self):
self.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])
}
print("欢迎来到南理文字游戏")
self.PLAYER.NAME = input("请输入玩家姓名")
print('....南理文字RPG0.2的世界开始了.....')
welcome_script = 'Hi,' + self.PLAYER.NAME + ',欢迎加入南理文字RPG0.2 '
# self.display_a_line(script=welcome_script)
print(welcome_script)
#随机选择PNPC
def Draw_NPC(self):
NPCs = [i for i in self.NPCs.keys()]
num = random.randint(0,len(NPCs)-1)
return self.NPCs[NPCs[num]]
#实现逻辑
def run(self):
#展示人物状态
self.PLAYER.Display_Status()
#随机选择NPVC
NPC_ = self.Draw_NPC()
#遭遇NPC
self.PLAYER.talk_to(NPC_=NPC_,NPC_SCRIPT_=SCRIPT_NPC_SCHOOL_SISTER)
#向NPC进行学习
self.PLAYER.Learn_Magic_From(NPC_)
#随机挑战NPC
NPC_ = self.Draw_NPC()
self.PLAYER.Fight_With(NPC_)
if __name__ == "__main__":
magic_world = World()
magic_world.run()
本人学习所创,如有错误请多多指教
联系QQ1135999353