Python卡牌对决,很好玩

1 篇文章 0 订阅
1 篇文章 0 订阅

随便写了个游戏,分享一下

一、导入所需模块

import random

二、定义卡牌

用字典来定义每张卡牌,数值可以自己修改,下面是一些示例:

card1 = {"名称":"诺兹多姆","攻击力":5000,"防御力":4000,"敏捷":40,"攻击距离":2,"等级":"S"}
card2 = {"名称":"耐萨里奥","攻击力":3000,"防御力":6000,"敏捷":30,"攻击距离":3,"等级":"A"}
card3 = {"名称":"二爷","攻击力":6000,"防御力":4000,"敏捷":60,"攻击距离":4,"等级":"SSS"}
card4 = {"名称":"史蒂夫","攻击力":5000,"防御力":5000,"敏捷":50,"攻击距离":3,"等级":"SS"}
card5 = {"名称":"艾利克斯","攻击力":3000,"防御力":3000,"敏捷":40,"攻击距离":2,"等级":"A"}
card6 = {"名称":"小鬼","攻击力":2000,"防御力":2500,"敏捷":35,"攻击距离":1,"等级":"C"}
card7 = {"名称":"枪手","攻击力":2500,"防御力":5000,"敏捷":50,"攻击距离":5,"等级":"A"}
card8 = {"名称":"剑士","攻击力":1000,"防御力":1000,"敏捷":100,"攻击距离":1,"等级":"B"}
card9 = {"名称": "忍者", "攻击力": 7000, "防御力": 6000, "敏捷": 50,"攻击距离":4,"等级": "SR"}
card10 = {"名称": "橄榄巨尸", "攻击力": 8000, "防御力": 6500, "敏捷": 55,"攻击距离":5,"等级":"SSR"}

三、显示规则

print("""规则:
1、双方初始血量:10000
2、对决之前,双方随机获得3涨卡牌
3、每回合派1张卡牌,对决后,卡牌消失并重抽1张
4、敏捷高的卡先攻击,对方根据自身防御力扣血
5、接着如果攻击距离大于等于对方攻击距离,敏捷低的一方才能进行反击,扣血规则同上
6、血量低于0的一方失败
7、每次攻击时会触发一次魔法泉,有可能什么也没有,也有可能会发生事件
""")

四、定义血量、卡池

# 血量
playerHP = 10000
enemyHP = 10000
# 卡池
cards = [card1,card2,card3,card4,card5,card6,card7,card8,card9,card10]

五、随机抽取卡牌

for i in range(3):
    a = random.randint(0,len(cards) - 1)
    playerCards.append(cards[a])
    a = random.randint(0,len(cards) - 1)
    enemyCards.append(cards[a])

六、主要代码

while playerHP >= 0 or enemyHP >= 0:
    print("我方卡牌:\n{0}\n{1}\n{2}".format(playerCards[0],playerCards[1],playerCards[2]))
    user = input("排第几张卡牌出战:")
    userC = playerCards[int(user) - 1]
    print("我方派出了:{}".format(userC["名称"]))
    enemy = random.randint(0,len(enemyCards) - 1)
    enemyC = enemyCards[enemy]
    print("敌方派出了:{0}".format(enemyC["名称"]))

    if userC["敏捷"] > enemyC["敏捷"]:
        print("我方发起攻击!")
        playerHurt = userC["攻击力"] - enemyC["防御力"]
        if playerHurt < 0:
            playerHurt = 0
        else:
            enemyHP -= playerHurt
        if enemyHP <= 0:
            print("对决结束,敌方剩余血量为0,我方获胜!")
            break
        else:
            print("我方造成伤害:{0},敌方剩余血量:{1}".format(str(playerHurt),str(enemyHP)))
            playerCards.pop(int(user) - 1)
            playerCards.append(cards[random.randint(0,len(cards) - 1)])
        if enemyC["攻击距离"] >= userC["攻击距离"]:
            print("敌方发起反击!")
            enemyHurt = enemyC["攻击力"] - userC["防御力"]
            if enemyHurt < 0:
                enemyHurt = 0
            else:
                playerHP -= enemyHurt
            if enemyHP <= 0:
                print("对决结束,我方剩余血量为0,敌方获胜!")
                break
            else:
                print("敌方造成伤害:{0},我方剩余血量:{1}".format(str(enemyHurt),str(playerHP)))
                enemyCards.pop(int(enemy))
                enemyCards.append(cards[random.randint(0,len(cards) - 1)])
    elif userC["敏捷"] < enemyC["敏捷"]:
        print("敌方发起攻击!")
        enemyHurt = enemyC["攻击力"] - userC["防御力"]
        if enemyHurt < 0:
            enemyHurt = 0
        else:
            playerHP -= enemyHurt
        if playerHP <= 0:
            print("对决结束,我方剩余血量为0,敌方获胜!")
            break
        else:
            print("敌方造成伤害:{0},我方剩余血量:{1}".format(str(enemyHurt),str(playerHP)))
            enemyCards.pop(int(enemy))
            enemyCards.append(cards[random.randint(0,len(cards) - 1)])
        if userC["攻击距离"] >= enemyC["攻击距离"]:
            print("我方发起反击!")
            playerHurt = userC["攻击力"] - enemyC["防御力"]
            if playerHurt < 0:
                playerHurt = 0
            else:
                enemyHP -= playerHurt
            if enemyHP <= 0:
                print("对决结束,敌方剩余血量为0,我方获胜!")
                break
            else:
                print("我方造成伤害:{0},敌方剩余血量:{1}".format(str(playerHurt),str(enemyHP)))
                playerCards.pop(int(user) - 1)
                playerCards.append(cards[random.randint(0,len(cards) - 1)])
    else:
        print("对方跑的太快,追不上!")
        playerCards.pop(int(user) - 1)
        playerCards.append(cards[random.randint(0, len(cards) - 1)])
    spring = random.randint(1,100)
    if spring <= 50:
        print("魔法泉发动")
        magic = random.randint(1,100)
        if magic <= 30:
            print("攻击力低于3000的卡牌获得 泰坦祝福")
            for i in cards:
                if i["攻击力"] <= 3000:
                    i["攻击力"] += 1000
        elif magic > 30 and magic <= 60:
            print("攻击力高于6000的卡牌获得 混沌侵蚀")
            for i in cards:
                if i["攻击力"] >= 6000:
                    i["攻击力"] -= 1000
        elif magic > 60 and magic <= 95:
            print("攻击力低于3000的卡牌获得 肉盾之挡")
            for i in cards:
                if i["攻击力"] <= 3000:
                    i["防御力"] += 1500
        else:
            print("所有卡牌全属性数值×2")
            for i in cards:
                i["攻击力"] *= 2
                i["防御力"] *= 2
                i["敏捷"] *= 2
                i["攻击距离"] *= 2
    else:
        print("魔法泉很安静")

好了,关于怎样用Python做卡牌对决就到这里,最后送上完整代码

完整代码

import random
print("-- -- -- --卡牌对决-- -- -- --")
card1 = {"名称":"诺兹多姆","攻击力":5000,"防御力":4000,"敏捷":40,"攻击距离":2,"等级":"S"}
card2 = {"名称":"耐萨里奥","攻击力":3000,"防御力":6000,"敏捷":30,"攻击距离":3,"等级":"A"}
card3 = {"名称":"二爷","攻击力":6000,"防御力":4000,"敏捷":60,"攻击距离":4,"等级":"SSS"}
card4 = {"名称":"史蒂夫","攻击力":5000,"防御力":5000,"敏捷":50,"攻击距离":3,"等级":"SS"}
card5 = {"名称":"艾利克斯","攻击力":3000,"防御力":3000,"敏捷":40,"攻击距离":2,"等级":"A"}
card6 = {"名称":"小鬼","攻击力":2000,"防御力":2500,"敏捷":35,"攻击距离":1,"等级":"C"}
card7 = {"名称":"枪手","攻击力":2500,"防御力":5000,"敏捷":50,"攻击距离":5,"等级":"A"}
card8 = {"名称":"剑士","攻击力":1000,"防御力":1000,"敏捷":100,"攻击距离":1,"等级":"B"}
card9 = {"名称": "忍者", "攻击力": 7000, "防御力": 6000, "敏捷": 50,"攻击距离":4,"等级": "SR"}
card10 = {"名称": "橄榄巨尸", "攻击力": 8000, "防御力": 6500, "敏捷": 55,"攻击距离":5,"等级": "SSR"}
print("""规则:
1、双方初始血量:10000
2、对决之前,双方随机获得3涨卡牌
3、每回合派1张卡牌,对决后,卡牌消失并重抽1张
4、敏捷高的卡先攻击,对方根据自身防御力扣血
5、接着如果攻击距离大于等于对方攻击距离,敏捷低的一方才能进行反击,扣血规则同上
6、血量低于0的一方失败
7、每次攻击时会触发一次魔法泉,有可能什么也没有,也有可能会发生事件
""")

# 血量
playerHP = 10000
enemyHP = 10000
# 卡池
cards = [card1,card2,card3,card4,card5,card6,card7,card8,card9,card10]
# 抽取卡牌
playerCards = []
enemyCards = []
for i in range(3):
    a = random.randint(0,len(cards) - 1)
    playerCards.append(cards[a])
    a = random.randint(0,len(cards) - 1)
    enemyCards.append(cards[a])
while playerHP >= 0 or enemyHP >= 0:
    print("我方卡牌:\n{0}\n{1}\n{2}".format(playerCards[0],playerCards[1],playerCards[2]))
    user = input("排第几张卡牌出战:")
    userC = playerCards[int(user) - 1]
    print("我方派出了:{}".format(userC["名称"]))
    enemy = random.randint(0,len(enemyCards) - 1)
    enemyC = enemyCards[enemy]
    print("敌方派出了:{0}".format(enemyC["名称"]))

    if userC["敏捷"] > enemyC["敏捷"]:
        print("我方发起攻击!")
        playerHurt = userC["攻击力"] - enemyC["防御力"]
        if playerHurt < 0:
            playerHurt = 0
        else:
            enemyHP -= playerHurt
        if enemyHP <= 0:
            print("对决结束,敌方剩余血量为0,我方获胜!")
            break
        else:
            print("我方造成伤害:{0},敌方剩余血量:{1}".format(str(playerHurt),str(enemyHP)))
            playerCards.pop(int(user) - 1)
            playerCards.append(cards[random.randint(0,len(cards) - 1)])
        if enemyC["攻击距离"] >= userC["攻击距离"]:
            print("敌方发起反击!")
            enemyHurt = enemyC["攻击力"] - userC["防御力"]
            if enemyHurt < 0:
                enemyHurt = 0
            else:
                playerHP -= enemyHurt
            if enemyHP <= 0:
                print("对决结束,我方剩余血量为0,敌方获胜!")
                break
            else:
                print("敌方造成伤害:{0},我方剩余血量:{1}".format(str(enemyHurt),str(playerHP)))
                enemyCards.pop(int(enemy))
                enemyCards.append(cards[random.randint(0,len(cards) - 1)])
    elif userC["敏捷"] < enemyC["敏捷"]:
        print("敌方发起攻击!")
        enemyHurt = enemyC["攻击力"] - userC["防御力"]
        if enemyHurt < 0:
            enemyHurt = 0
        else:
            playerHP -= enemyHurt
        if playerHP <= 0:
            print("对决结束,我方剩余血量为0,敌方获胜!")
            break
        else:
            print("敌方造成伤害:{0},我方剩余血量:{1}".format(str(enemyHurt),str(playerHP)))
            enemyCards.pop(int(enemy))
            enemyCards.append(cards[random.randint(0,len(cards) - 1)])
        if userC["攻击距离"] >= enemyC["攻击距离"]:
            print("我方发起反击!")
            playerHurt = userC["攻击力"] - enemyC["防御力"]
            if playerHurt < 0:
                playerHurt = 0
            else:
                enemyHP -= playerHurt
            if enemyHP <= 0:
                print("对决结束,敌方剩余血量为0,我方获胜!")
                break
            else:
                print("我方造成伤害:{0},敌方剩余血量:{1}".format(str(playerHurt),str(enemyHP)))
                playerCards.pop(int(user) - 1)
                playerCards.append(cards[random.randint(0,len(cards) - 1)])
    else:
        print("对方跑的太快,追不上!")
        playerCards.pop(int(user) - 1)
        playerCards.append(cards[random.randint(0, len(cards) - 1)])
    spring = random.randint(1,100)
    if spring <= 50:
        print("魔法泉发动")
        magic = random.randint(1,100)
        if magic <= 30:
            print("攻击力低于3000的卡牌获得 泰坦祝福")
            for i in cards:
                if i["攻击力"] <= 3000:
                    i["攻击力"] += 1000
        elif magic > 30 and magic <= 60:
            print("攻击力高于6000的卡牌获得 混沌侵蚀")
            for i in cards:
                if i["攻击力"] >= 6000:
                    i["攻击力"] -= 1000
        elif magic > 60 and magic <= 95:
            print("攻击力低于3000的卡牌获得 肉盾之挡")
            for i in cards:
                if i["攻击力"] <= 3000:
                    i["防御力"] += 1500
        else:
            print("所有卡牌全属性数值×2")
            for i in cards:
                i["攻击力"] *= 2
                i["防御力"] *= 2
                i["敏捷"] *= 2
                i["攻击距离"] *= 2
    else:
        print("魔法泉很安静")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值