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

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

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

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

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

import random
number = 8 #在这里我设定了八个角色,大家也可以再创作出自己的角色呦

print('*'*40)
print('\t欢迎来到小徐想玩王者荣耀!')
print('*'*40)
#开局bp
ban_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号召唤师恭喜你选择成功')
        break

if 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 = 1
x = 0

MBG = 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 = MBG
if role1 == 2:
    a = XAG
if role1 == 3:
    a = MHT
if role1 == 4:
    a = ZDX
if role1 == 5:
    a = MBB
if role1 == 6:
    a = NQR
if role1 == 7:
    a = LBW
if role1 == 8:
    a = LYL

if role2 == 1:
    b = MBG
if role2 == 2:
    b = XAG
if role2 == 3:
    b = MHT
if role2 == 4:
    b = ZDX
if role2 == 5:
    b = MBB
if role2 == 6:
    b = NQR
if role2 == 7:
    b = LBW
if 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写王者荣耀,开lou!_第4张图片

你可能感兴趣的:(游戏开发,python,游戏,人工智能)