> 文档中心 > 挑战纯python写王者荣耀,开lou!

挑战纯python写王者荣耀,开lou!


挑战用纯python写一个王者荣耀小游戏?

信不信点进来看!小白们快来,你们也行!我就不信你不笑,快跟我来!

这里是文章要用到的所有东西,需要的同学自取一下,直接可以用:用Python写王者荣耀,源码+解析+演示PPT+思路直接拿去用!

这是我第一次写博客,如果有语言不当的地方,还请大家对小徐多多谅解(-.-)

先向大家介绍一下自己,我是一名人工智能专业的大一新生,就是那种啥也不会的小白,然后这个游戏我大约写了一周左右吧,400多行代码,里面所有的东西都是自己一点一点想的。做的时候挺开心的,玩的时候更开心!
Show time:
在这里插入图片描述
欢迎来到小徐想玩王者荣耀!
**一.我的思路:
在这里插入图片描述
**对王者荣耀,我只想说:你认真了,你就输了;你开心了,这就够了!反正受益的都是电脑屏幕后坐着数钱的老马…
二.设定游戏人物,为其配置技能以及血量蓝量:
在这里插入图片描述
看不清没关系,一会儿我会在代码中详细介绍的!
三.代码展示
1.

import randomnumber = 8 #在这里我设定了八个角色,大家也可以再创作出自己的角色呦print('*'*40)print('\t欢迎来到小徐想玩王者荣耀!')print('*'*40)#开局bpban_1 = int(input('请玩家1禁用一个对方的英雄:'))ban_2 = int(input('请玩家2禁用一个对方的英雄:'))#取随机数,决定谁先走A = random.randint(1, 2)if A == 1:    print('1号玩家先手,2号玩家后手')#取随机数,决定谁先走elif A == 2:    print('2号玩家先手,1号玩家后手')#玩家1选英雄while True:    role1 = int(input('玩家1请选择您的游戏人物:(1.马保国 2.小阿giao 3.马化腾 4.张大仙 5.马爸爸 6.两个年轻人 7.卢本伟 8.李云龙)'))    if role1 == ban_2: print('该英雄已经被禁用,请重新输入')    elif role1 <= 0 or role1 > number: print('输入错误请重新输入')    else: print('亲爱的1号召唤师恭喜你选择成功') break

这是开局的选英雄和bp以及决定谁先走
2.

if role1 == 1:    print('马保国:\n---ph:101---\n---lan:101----\n英雄定位:战士\n1技能:耗子尾汁(普攻),对对方造成20点伤害,消耗自身10点蓝\n2技能:不讲武德,保住性命,恢复20生命值,消耗自身10点蓝\n技能三:五连鞭(大招),对对方造成40点伤害,消耗自身30点蓝')if role1 == 2:    print('小阿giao:\n---ph:151---\n---lan:101----\n英雄定位:坦克\n1技能:giao(普攻),对对方造成15点伤害,消耗自身10点蓝\n2技能:要礼物,恢复15生命值,消耗自身10点蓝\n技能三:一giao我里giaogiao(大招),对对方造成25点伤害,消耗自身20点蓝')if role1 == 3:    print('马化腾:\n---ph:61---\n---lan:51----\n英雄定位:法师\n1技能:充钱(普攻),让对手进入防沉迷状态,减去其当前生命值的一半,消耗自身10点蓝\n2技能:淦淦淦,私自修改游戏回血设置,大幅度恢复自身50生命值,消耗30蓝\n技能三:金钱的力量(大招),秒杀生命值低于其原始生命值一半的角色,不耗蓝')if role1 == 4:    print('\n---ph:121---\n---lan:1000+----\n英雄定位:战士\n1技能:吹牛皮(普攻),对对方造成10点伤害,不耗蓝\n2技能:走位走位,吃口药,恢复自身10点生命值,不耗蓝\n技能三:冰心(大招),对自己和对方都造成伤害,对对方造成30点伤害,对自己造成20点伤害,不耗蓝')if role1 == 5:    print('马爸爸:\n---ph:81---\n---lan:31----\n英雄定位:法师\n1技能:关闭淘宝(普攻),让对方蓝量下降一半,消耗自身30点蓝\n2技能:收购美团外卖,补充能量,恢复自身10点生命值\n技能三:氪金(大招),将对方10点生命值转化为自己的10点蓝量')if role1 == 6:    print('两个年轻人:\n---ph:71---\n---lan:81----\n英雄定位:刺客\n1技能:不讲武德(普攻),对对方造成30点伤害,消耗自身30点蓝\n2技能:耗子尾汁,吸收马大师精华,恢复25生命值,消耗自身10点蓝\n技能三:偷袭(大招),以迅雷不及掩耳之势对对方造成50点伤害,消耗自身40点蓝')if role1 == 7:    print('卢本伟:\n---ph:81---\n---lan:201---\n英雄定位:献祭流战士\n 1技能(普攻):召唤卢本伟广场,随意交换自己的蓝量和血量,不耗蓝\n技能2:给阿姨倒一杯卡布奇诺,被阿姨赏识,恢复20点生命值,消耗40点蓝\n技能三(大招):把电脑屏幕吃掉,进入狂暴状态,消耗自身100蓝量,对对手造成60点伤害,但会增加对方50点蓝量')if role1 == 8:    print('李云龙:\n---ph:131---\n---lan:51---\n英雄定位:软辅型坦克\n 1技能(普攻):给老子上意大利炮,对对方造成10点伤害,不耗蓝\n技能2:召唤二营长,恢复40血量 消耗自身20蓝\n技能三(大招):你他娘的真是个人才,和对方交换血量, 消耗自身30点蓝')while True:    role2 = int(input('玩家2请选择您的游戏人物:(1.马保国 2.小阿giao 3.马化腾 4.张大仙 5.马爸爸 6.两个年轻人 7.卢本伟 8.李云龙)'))    if role2 == ban_1: print('该英雄已经被禁用,请重新输入')    elif role2 == role1: print('该英雄已被选用,不能重复选择呀!')    elif role2 <= 0 or role2 > number: print('输入错误请重新输入')    else: print('亲爱的2号召唤师恭喜你选择成功') breakif role2 == 1:    print('马保国:\n---ph:101---\n---lan:101----\n英雄定位:输出型战士\n1技能:耗子尾汁(普攻),对对方造成20点伤害,消耗自身10点蓝\n2技能:不讲武德,保住性命,恢复20生命值,消耗自身10点蓝\n技能三:五连鞭(大招),对对方造成40点伤害,消耗自身30点蓝')if role2 == 2:    print('小阿giao:\n---ph:151---\n---lan:101----\n英雄定位:硬辅型坦克\n1技能:giao(普攻),对对方造成10点伤害,消耗自身10点蓝\n2技能:要礼物,恢复15生命值,消耗自身10点蓝\n技能三:一giao我里giaogiao(大招),对对方造成25点伤害,消耗自身20点蓝')if role2 == 3:    print('马化腾:\n---ph:61---\n---lan:51----\n英雄定位:爆发型法师\n1技能:充钱(普攻),让对手进入防沉迷状态,减去其当前生命值的一半,消耗自身10点蓝\n2技能:淦淦淦,私自修改游戏回血设置,大幅度恢复自身50生命值,消耗30蓝\n技能三:金钱的力量(大招),秒杀生命值低于其原始生命值一半的角色,不耗蓝')if role2 == 4:    print('张大仙:\n---ph:121---\n---lan:1000+----\n英雄定位:续航型战士\n1技能:吹牛皮(普攻),对对方造成10点伤害,不耗蓝\n2技能:走位走位,吃口药,恢复自身10点生命值,不耗蓝\n技能三:冰心(大招),对自己和对方都造成伤害,对对方造成30点伤害,对自己造成20点伤害,不耗蓝')if role2 == 5:    print('马爸爸:\n---ph:81---\n---lan:31----\n英雄定位:持续型法师\n1技能:关闭淘宝(普攻),让对方蓝量下降一半,消耗自身30点蓝\n2技能:收购美团外卖,补充能量,恢复自身10点生命值\n技能三:氪金(大招),将对方10点生命值转化为自己的10点蓝量')if role2 == 6:    print('两个年轻人:\n---ph:71---\n---lan:81----\n英雄定位:爆炸型刺客\n1技能:不讲武德(普攻),对对方造成30点伤害,消耗自身30点蓝\n2技能:耗子尾汁,吸收马大师精华,恢复25生命值,消耗自身10点蓝\n技能三:偷袭(大招),以迅雷不及掩耳之势对对方造成50点伤害,消耗自身40点蓝')if role2 == 7:    print('卢本伟:\n---ph:81---\n---lan:201---\n英雄定位:献祭流战士\n 1技能(普攻):召唤卢本伟广场,随意交换自己的蓝量和血量,不耗蓝\n技能2:给阿姨倒一杯卡布奇诺,被阿姨赏识,恢复20点生命值,消耗40点蓝\n技能三(大招):把电脑屏幕吃掉,进入狂暴状态 ,消耗自身100蓝量,对对手造成60点伤害,但会增加对方50点蓝量')if role2 == 8:    print('李云龙:\n---ph:131---\n---lan:51---\n英雄定位:软辅型坦克\n 1技能(普攻):给老子上意大利炮,对对方造成10点伤害,不耗蓝\n技能2:召唤二营长,恢复40血量 消耗自身20蓝\n技能三(大招):你他娘的真是个人才,和对方交换血量 ,消耗自身30点蓝')

这是英雄介绍,在玩家选择之后会给出提示的,防止一些没玩过的玩家处于mb状态。
3.

print('注明:\n’1’代表玩家1普攻\n‘2’代表玩家2普攻\n‘3’代表玩家1回血\n‘4’代表玩家2回血\n’5‘代表玩家1大招\n’6‘代表玩家2大招\n提示:每个英雄的1技能(普攻),有百分之十的几率造成追击效果,即连续使用两次\n每个英雄的大招有百分之二的几率造成暴击,即一招制敌!')print('规则:选手通过控制英雄进行作战,每个英雄初始生命值和蓝量均为100左右\n每一方蓝量或ph先消耗完则被淘汰')print('请各位召唤师发挥自己最大的智慧,取得战争的胜利吧!\n你们的战斗时刻会受到国际组织的时刻关注,他们会有20%的可能会为你们添油加醋的呦!')

这是游戏规则的介绍,介绍攻击回血键位,及一些游戏中的彩蛋:
暴击 追加 随机轰炸(血上加霜)或随机回血(血中送碳)
*** 这个游戏中人物的血量和蓝量都设计的非常巧妙,需要我们考虑好每一步的打法,每一步的小差错,都会使局面逆转,需要你平衡蓝量与血量,算是个烧脑and不确定性很强的游戏吧***
4.

class Person:    def __init__(self, name, hp, attack, lan, chushishengmingzhi, chushilanliang): self.name = name self.hp = hp self.attack = attack self.lan=lan self.chushishengmingzhi=chushishengmingzhi self.chushilanliang=chushilanliang    def __str__(self): return '{}的血量还剩下{},{}的蓝还剩下{}'.format(self.name, self.hp, self.name,self.lan)

这里首先设定了一个类,然后调用了init函数,为其附上属性(name, hp, attack, lan, chushishengmingzhi, chushilanliang)
接着调用了str函数,使其在接下来的每个回合都可以随时注意血量蓝量的变化
5.

# 普通攻击函数    def small_kill(self, name): if self.name == "马保国":     name.hp -= 20     self.lan -= 10 elif self.name == "小阿giao":     name.hp -= 15     self.lan -= 10 elif self.name == "马化腾":     name.hp = name.hp/2     self.lan -= 10 elif self.name == "张大仙":     name.hp -= 10 elif self.name == "马爸爸":     name.lam = name.lan/2     self.lan -= 30 elif self.name == "两个年轻人":     name.hp -= 30     self.lan -= 30 elif self.name == "卢本伟":     self.hp,self.lan=self.lan,self.hp elif self.name == "李云龙":     name.hp -= 10 if role1 == 1 and x == 1:     self.attack = "耗子尾汁" elif role1 == 2 and x == 1:     self.attack = "giao" elif role1 == 3 and x == 1:     self.attack = "充钱,马化腾让对手陷入防沉迷状态" elif role1 == 4 and x == 1:     self.attack = "吹牛皮,mvp理所应当" elif role1 == 5 and x == 1:     self.attack = "关闭淘宝,对手蓝量下降一半" elif role1 == 6 and x == 1:     self.attack = "不讲武德" elif role1 == 7 and x == 1:     self.attack = "召唤卢本伟广场,随意交换自己的蓝量和血量" elif role1 == 8 and x == 1:     self.attack = "给老子上意大利炮" elif role2 == 1 and x == 2:     self.attack = "耗子尾汁" elif role2 == 2 and x == 2:     self.attack = "giao" elif role2 == 3 and x == 2:     self.attack = "充钱,马化腾让对手陷入防沉迷状态" elif role2 == 4 and x == 2:     self.attack = "吹牛皮,mvp理所应当" elif role2 == 5 and x == 2:     self.attack = "关闭淘宝,对手蓝量下降一半" elif role2 == 6 and x == 2:     self.attack = "不讲武德" elif role2 == 7 and x == 2:     self.attack = "召唤卢本伟广场,随意交换自己的蓝量和血量" elif role2 == 8 and x == 2:     self.attack = "给老子上意大利炮" print('{}使用{},普通攻击了{}'.format(self.name, self.attack, name.name)) print(self, ' ', name)  #输出剩余血量

这里定义了普攻函数
6.

# 大招攻击函数    def big_kill(self, name): if self.name == "马保国":     name.hp -= 40     self.lan -= 30 elif self.name == "小阿giao":     name.hp -= 25     self.lan -= 20 elif self.name == "马化腾":     if name.hp < name.chushishengmingzhi/2:  name.hp = 0     else:  name.hp = name.hp elif self.name == "张大仙":     name.hp -= 30     self.hp -= 20 elif self.name == "马爸爸":     name.hp -= 10     self.lan += 10 elif self.name == "两个年轻人":     name.hp -= 50     self.lan -= 40 elif self.name == "卢本伟":     name.hp -= 60     self.lan -= 100     name.lan+=50 elif self.name == "李云龙":     name.hp,self.hp = self.hp,name.hp     self.lan-=30 if role1 == 1 and x == 5:     self.attack = "以极快的手速打出了五连鞭" elif role1 == 2 and x == 5:     self.attack = "使用一giao我里giaogiao" elif role1 == 3 and x == 5:     self.attack = "相信钱可以解决一切问题,对低于自身血量50%的人物秒杀" elif role1 == 4 and x == 5:     self.attack = "出了一个冰心,对自己和对方都造成伤害" elif role1 == 5 and x == 5:     self.attack = "进行不断地氪金" elif role1 == 6 and x == 5:     self.attack = "不讲武德偷袭" elif role1 == 7and x == 5:     self.attack = "进入狂暴状态 -消耗自身100蓝量,对对手造成60点伤害" elif role1 == 8 and x == 5:     self.attack = "你他娘的真是个人才,和对方交换血量" elif role2 == 1 and x == 6:     self.attack = "以极快的手速打出了五连鞭" elif role2 == 2 and x == 6:     self.attack = "使用一giao我里giaogiao" elif role2 == 3 and x == 6:     self.attack = "相信钱可以解决一切问题,对低于自身血量50%的人物秒杀" elif role2 == 4 and x == 6:     self.attack = "出了一个冰心,对自己和对方都造成伤害" elif role2 == 5 and x == 6:     self.attack = "进行不断地氪金" elif role2 == 6 and x == 6:     self.attack = "不讲武德偷袭" elif role2 == 7and x == 6:     self.attack = "进入狂暴状态 -消耗自身100蓝量,对对手造成60点伤害" elif role2 == 8 and x == 6:     self.attack = "你他娘的真是个人才,和对方交换血量" print('{}{},大招攻击了{}'.format(self.name, self.attack, name.name)) print(self, ' ', name)

这里定义了大招攻击函数
7.

# 回血函数    def reback(self): if self.name == "马保国":     self.hp += 20     self.lan -= 10 elif self.name == "小阿giao":     self.hp += 15     self.lan -= 10 elif self.name == "马化腾":     self.hp += 50     self.lan -= 30 elif self.name == "张大仙":     self.hp += 10 elif self.name == "马爸爸":     self.hp += 10 elif self.name == "两个年轻人":     self.hp += 25     self.lan -= 10 elif self.name == "卢本伟":     self.hp += 20     self.lan -= 40 elif self.name == "李云龙":     self.hp += 40     self.lan -= 20 if role1 == 1 and x == 3:     self.attack = "不讲武德,保住性命" elif role1 == 2 and x == 3:     self.attack = "太难了,要到礼物" elif role1 == 3 and x == 3:     self.attack = "淦淦淦,私自修改游戏回血设置" elif role1 == 4 and x == 3:     self.attack = "走位,走位,吃口药" elif role1 == 5 and x == 3:     self.attack = "收购美团外卖,补充能量" elif role1 == 6 and x == 3:     self.attack = "耗子尾汁,吸收马大师精华" elif role1 == 7 and x == 3:     self.attack = "给阿姨倒了一杯卡布奇诺,被阿姨赏识" elif role1 == 8 and x == 3:     self.attack = "召唤二营长" elif role2 == 1 and x == 4:     self.attack = "不讲武德,保住性命" elif role2 == 2 and x == 4:     self.attack = "太难了,要到礼物" elif role2 == 3 and x == 4:     self.attack = "淦淦淦,私自修改游戏回血设置" elif role2 == 4 and x == 4:     self.attack = "走位,走位,吃口药" elif role2 == 5 and x == 4:     self.attack = "收购美团外卖,补充能量" elif role2 == 6 and x == 4:     self.attack = "耗子尾汁,吸收马大师精华" elif role2 == 7 and x == 4:     self.attack = "给阿姨倒了一杯卡布奇诺,被阿姨赏识" elif role2 == 8 and x == 4:     self.attack = "召唤二营长" if self.name == "马保国":     xyp = 20 elif self.name == "小阿giao":     xyp = 15 elif self.name == "马化腾":     xyp = 50 elif self.name == "张大仙":     xyp = 10 elif self.name == "马爸爸":     xyp = 10 elif self.name == "两个年轻人":     xyp = 25 elif self.name == "卢本伟":     xyp = 20 elif self.name == "李云龙":     xyp = 40 print('{}{},恢复了'.format(self.name, self.attack,), xyp, '滴血') print(self)

这里定义了一个回血函数
8.

print('----------游戏开始啦-----------')count = 1x = 0MBG = Person('马保国', 101, 0, 101, 101, 1010)#需要修改lan的值XAG = Person('小阿giao', 151, 0, 101, 150, 101)MHT = Person('马化腾', 61, 0, 51, 61, 51)ZDX = Person('张大仙', 121, 0, 10000, 121, 10000)MBB = Person('马爸爸', 81, 0, 31, 81, 31)NQR = Person('两个年轻人', 71, 0, 81, 71, 81)LBW = Person('卢本伟',81,0,201,81,201)LYL = Person('李云龙',131,0,51,131,51)

现在开始进入游戏的实现阶段
为人物英雄附上其各种属性
9.

if role1 == 1:    a = MBGif role1 == 2:    a = XAGif role1 == 3:    a = MHTif role1 == 4:    a = ZDXif role1 == 5:    a = MBBif role1 == 6:    a = NQRif role1 == 7:    a = LBWif role1 == 8:    a = LYLif role2 == 1:    b = MBGif role2 == 2:    b = XAGif role2 == 3:    b = MHTif role2 == 4:    b = ZDXif role2 == 5:    b = MBBif role2 == 6:    b = NQRif role2 == 7:    b = LBWif role2 == 8:    b = LYL

确定人物
10.

while True:    userIn = int(input('请输入数字 1 , 2, 3, 4, 5, 6:'))    x = userIn    if userIn == 1: aa = random.randint(1, 100) a.small_kill(b) if 10 <= aa < 20:     a.small_kill(b)     print('恭喜你打出了追加效果,棒棒哒!') print('------第{}回合结束------'.format(count))    elif userIn ==2: bb = random.randint(1, 100) b.small_kill(a) if 10 <= bb < 20:     b.small_kill(a)     print('恭喜你打出了追加效果,棒棒哒!')    elif userIn == 3: a.reback() print('------第{}回合结束------'.format(count))    elif userIn == 4: b.reback() print('------第{}回合结束------'.format(count))    elif userIn == 5: ## 大招加上2%的暴击率,直接致死 a.big_kill(b) cc = random.randint(1, 100) if 1 <= cc <= 2:     b.hp = 0     print('恭喜你打出了暴击效果,一招制敌,干饭了干饭了!') print('------第{}回合结束------'.format(count))    elif userIn == 6: b.big_kill(a) dd = random.randint(1, 100) if 1 <= dd <= 2:     a.hp = 0     print('恭喜你打出了暴击效果,一招制敌,干饭了干饭了!') print('------第{}回合结束------'.format(count))    else: print('输入错误,请重新输入')    if a.hp <= 0 or a.lan <= 0: print('------游戏结束------\n恭喜你玩家2获胜,干得漂亮!\n玩家1遗憾败北,这操作下饭下饭!') break    elif b.hp <= 0 or b.lan <= 0: print('------游戏结束------\n恭喜你玩家获胜1,干得漂亮!\n玩家2遗憾败北,这操作下饭下饭!') break    count += 1    print('------第{}回合开始------'.format(count))    cc=random.randint(1,10)    if 1<cc<4: print('----紧急通知,你们的战斗引来了世界和平邪会的不满,给你们血上加霜,每个人血量减10点----') a.hp-=10 b.hp-=10    elif 5<cc<8: print('----请注意,你们的战斗受到了国际红十字邪会的关注,为你们血中送碳,每个人血量加10点----') a.hp += 10 b.hp += 10

这是各种攻击功能的实现,以及用随机数实现暴击,追加,随机等的各种效果。
四.总结:
以上便是我所有的代码,赶紧复制下来和小伙伴玩一下吧,如果它给你带来了快乐,我觉得我就成功了!(哈哈哈)
另外这是小徐冒着四级英语不过,期末挂科的风险连夜写的,如果你喜欢的话,就给我点个关注吧!
有可能你就是我第一个粉丝呢!(渺小卑微)
qq:2511864242(欢迎加我一起学习)
最后祝大家学习快乐,干饭愉快!谢谢你的观看,再见!(bye~)
在这里插入图片描述

这里是文章要用到的所有东西,需要的同学自取一下,直接可以用:用Python写王者荣耀,源码+解析+演示PPT+思路直接拿去用!