随便写了个游戏,分享一下
一、导入所需模块
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("魔法泉很安静")