本人新人入门Python 老师布置的作业打怪兽,本人参考了大佬们的杰作然后完成了下方的适合新手入门的版本,与大家分享!
第一步:新建Python包,创建文件
注意:需要有_init_.py这个py文件,里面可以为空,但是一定要有。
第二步:写个简单的武器商店Equipment.py
不多说,直接上代码。因为比较基础,也没啥好讲的。都是最基础的。
# EquipmentStore 装备商店 name 名字 attack 攻击 damage伤害 defensive 防御
# attackSpeed 攻速 movingSpeed移速 price价格 EquipmentAttribute的装备属性
class Equipment_Attribute:
def __init__(self, name, attack, defensive, attackSpeed, movingSpeed, price):
self.price = price
self.movingSpeed = movingSpeed
self.attackSpeed = attackSpeed
self.defensive = defensive
self.attack = attack
self.name = name
# def show(self):
# print("%s 攻击:%s 防御:%s 攻速:%s 移速:%s 价格:%s" % (
# self.name, self.attack, self.defensive,
# self.attackSpeed, self.movingSpeed, self.price))
s1 = Equipment_Attribute("攻速鞋", 0, 0, 0.35, 45, 1100)
s2 = Equipment_Attribute("布甲鞋", 0, 20, 0, 45, 1100)
s3 = Equipment_Attribute("短剑", 10, 0, 0, 0, 350)
第三步:写英雄部分内容,Hero.py
import time
import random
import LOL.Equipment
class YaSuo:
def __init__(self, Name, HP, MP, Attack):
self.Name = Name
self.HP = HP
self.MP = MP
self.Attack = Attack
def LinesYS(self): # 亚索的台词
say = random.randint(0, 9)
taici = ['死亡如风,常伴吾身。',
'长路漫漫,唯剑作伴。',
'吾之荣耀,离别已久。',
'明日安在,无人能允。',
'且随疾风前行,身后亦须留心。',
'此剑之势,愈斩愈烈。',
'仁义道德,也是一种奢侈。',
'回首往昔,更进一步。',
'我将遵循此道,直至终结。',
'荣耀存于心,而非流于形。'
]
print("疾风剑豪--亚索: "+taici[say])
# 增加Attack:伤害 as 攻击力
def Add_Attack(self):
s3 = LOL.Equipment.s3
if s3.name:
print(f"{self.Name}已成功购买一柄短剑")
self.Attack += s3.attack
def PuTong_Attack(self): # 普通攻击方法
print(f"{self.Name}平A!")
self.Add_Attack()
return self.Attack
def SkillQ(self):
print(f"{self.Name}释放技能Q:斩钢闪 --哈塞给--")
time.sleep(1)
print(f"{self.Name}技能Q:斩钢闪-->命中")
print(f"{self.Name}对{xz.Name}造成{self.Attack * 2}的HP伤害")
return self.Attack * 2
def SkillR(self):
print(f"{self.Name}释放技能R:狂风绝息斩")
time.sleep(1)
print(f"{self.Name} --索雷阿给动--")
print(f"{self.Name}对{xz.Name}造成{self.Attack * 4}的HP伤害")
return self.Attack * 4
def __str__(self): # 内置魔法方法,输出对象时输出
bar_length = 20
h = '#' * int(self.HP / 100.0 * bar_length)
s = '-' * (bar_length - len(h))
h2 = '#' * int(self.MP / 100.0 * bar_length)
s2 = '-' * (bar_length - len(h2))
return "%s HP: [%s] %d %s MP: [%s] %d" % (self.Name, h + s, self.HP, self.Name, h2 + s2, self.MP)
class LiQing:
def __init__(self, Name, HP, MP, Attack):
self.Name = Name
self.HP = HP
self.MP = MP
self.Attack = Attack
def LinesMS(self): # 盲僧的台词
say = random.randint(0, 9)
taici = ['控制自己,掌控敌人。',
'你今天不会取得胜利的。',
'我用双手成就你的梦想。',
'如果暴力不是为了杀戮 那将毫无意义。',
'双眼失明丝毫不影响我追捕敌人,因为我能闻到他们身上的臭味 。',
'哪里需要我呢。',
'他们心跳加快。',
'我会识破这一切。',
'找到自己的战场。',
'勇往直前。'
]
print("盲僧——李青: "+taici[say])
def Add_Attack(self):
s3 = LOL.Equipment.s3
if s3.name:
print(f"{self.Name}已成功购买一柄短剑")
self.Attack += s3.attack
def PuTong_Attack(self): # 普通攻击方法
print(f"{self.Name}平A!")
self.Add_Attack()
print(f"{self.Name}对{ys.Name}造成{self.Attack}的HP伤害")
return self.Attack
def SkillQ(self):
print(f"{self.Name}释放技能Q:天音波/回音击 --Echo--")
time.sleep(1)
print(f"{self.Name}技能Q:天音波/回音击-->命中")
print(f"{self.Name}对{ys.Name}造成{self.Attack * 2}的HP伤害")
return self.Attack * 2
def SkillR(self):
print(f"{self.Name}释放技能R:猛龙摆尾")
time.sleep(1)
print(f"{self.Name} --一库--")
print(f"{self.Name}对{ys.Name}造成{self.Attack * 4}的HP伤害")
return self.Attack * 4
def __str__(self): # 内置魔法方法,输出对象时输出
bar_length = 20
h = '#' * int(self.HP / 100.0 * bar_length)
s = '-' * (bar_length - len(h))
h2 = '#' * int(self.MP / 100.0 * bar_length)
s2 = '-' * (bar_length - len(h2))
return " %s HP: [%s] %d %s MP: [%s] %d" % (self.Name, h + s, self.HP, self.Name, h2 + s2, self.MP)
ys = YaSuo("疾风剑豪--亚索", 100, 100, 0.35)
xz = LiQing("盲僧——李青", 100, 100, 0.35)
写的极为简单,但是可以无限加,才学的我写这个已经很努力的在CSDN了。哈哈。全是最基础的点,看不懂就直接查知识点怎么用的。
第四步:写main(),写运行过程,前面的都是在给这个做准备!
写的跟实际上的还有是区别,但是我是为了学习,表达意思到位就ok。
# coding=utf-8
import time
import random
import LOL.Hero
print("\033[1;37;40m " + '-' * 20, '《英雄联盟》', '-' * 20 + "\033[0m")
print('请选择你的英雄:')
print('\t1.疾风剑豪——亚索')
print('\t2.盲僧——李青')
player_choose = input('请选择[1-2]:')
print('-' * 66)
if player_choose == '1':
print('你已经选择了1,你将以-> 疾风剑豪——亚索 <-的身份来进行游戏!')
elif player_choose == '2':
print('你已经选择了2,你将以你将以-> 盲僧——李青 <-的身份来进行游戏!')
else:
print('你的输入有误,系统将自动分配身份,你将以-> 疾风剑豪 亚索 <-的身份来进行游戏!')
num = 0
ys = LOL.Hero.YaSuo("疾风剑豪--亚索", 100, 100, 0.35)
xz = LOL.Hero.LiQing("盲僧——李青", 100, 100, 0.35)
print("\033[1;37;40m--------------------欢迎来到英雄联盟--------------------\033[0m")
time.sleep(1)
print("\033[1;37;40m-------------------敌军还有30秒到达战场------------------\033[0m")
time.sleep(1)
print("\033[1;37;40m------------------------全军出击------------------------\033[0m")
time.sleep(1)
ys.LinesYS()
xz.LinesMS()
while True:
if ys.HP > 0 and xz.HP > 0:
num += 1
time.sleep(1)
print(f"\033[1;37;40m============第{num}回合=============\033[0m")
time.sleep(1)
print(ys) # 输出对象,自动执行了上面的__str__魔法方法
time.sleep(1)
print(xz)
a = random.randint(0, 100) # 随机攻击回合
if a > 80: # 如果>60压缩攻击 ,瞎子掉血
xz.HP -= ys.PuTong_Attack()
elif 80 >= a > 60:
ys.HP -= xz.PuTong_Attack()
elif 60 >= a > 40: # 如果是60-40压缩放技能q,瞎子掉血
xz.HP -= ys.SkillQ()
elif 40 >= a > 20: # 如果是40-20瞎子放技能q,压缩掉血
ys.HP -= xz.SkillQ()
elif 20 >= a > 10: # 如果是10-20压缩放技能r,瞎子掉血
xz.HP -= ys.SkillR()
else:
ys.HP -= xz.SkillR()
else:
if xz.HP <= 0: # 瞎子血为0,压缩获胜
time.sleep(1)
print(f"\033[1;32;41m %s WIN!!!! \033[0m" % ys.Name)
time.sleep(1)
print("\033[1;37;40m " + '-' * 20, 'GAME OVER', '-' * 20 + "\033[0m")
break
else:
time.sleep(1)
print(f"\033[1;32;41m %s WIN!!!! \033[0m" % xz.Name)
time.sleep(1)
print("\033[1;37;40m " + '-' * 20, 'GAME OVER', '-' * 20 + "\033[0m")
break
ys.LinesYS()
xz.LinesMS()
其实写的有点花里胡哨的,哈哈哈,攻击靠运气,买东西不用给钱,哈哈,平a到就是赚到,a一下送把短剑,我也是人才!后面继续改进!
最后一步:对着main.py右键-run
其实还有很多代码不正规的地方,但是这是我写的第一个项目式代码。允许我姑且称她为一个项目,很简单,很基础,学了很多基础知识点,而且很有成就感,也感谢CSDN的前辈们对我的隔空指导!我会加油的!
最后跟英语跟我一样差的人,推荐个插件,哈哈,Tran***,后面几个字母记不到了。886!