本代码可直接拿来使用,由于学业原因没有充足的时间去完成这个代码,本人学习代码不久,变量命名和代码化简什么的还有待提高,不喜勿喷
请在使用前确保已安装threading、time和tqdm库
如有错误欢迎指正import threading
import time
from tqdm import tqdm, trange
import random
def timeprint0():
print(format(' 33[1;31m===============作者:明月吾风==============',))
def timeprint1():
print(format('该代码仅供学习使用,不得用于商业','=^29'))
def timeprint2():
print(format('该游戏为文字游戏,尚未进行游戏开发','=^28'))
def timeprint3():
print(format('如有错误欢迎指出','=^35'))
def timeprint4():
print('='*41)
print('='*41)
def startaddcard():
global myallcard,yourallcard,myhandcard,yourhandcard,turn
if turn == 1:
position = random.randint(0,len(myallcard)-1)
myhandcard.append(myallcard[position])
print('你抽了一张:{}'.format(myallcard[position].name))
del myallcard[position]
return turn,myallcard,myhandcard
else:
position = random.randint(0,len(yourallcard)-1)
yourhandcard.append(yourallcard[position])
del yourallcard[position]
return turn,yourallcard,yourhandcard
def start4card():
global myallcard,yourallcard,myhandcard,yourhandcard
while len(myhandcard)<4 or len(yourhandcard) < 4:
startaddcard()
turnover()
print('决斗开始!')
return myallcard,yourallcard,myhandcard,yourhandcard
def addacard():
global myallcard,yourallcard,myhandcard,yourhandcard,turn
if turn == 1:
print('我方的抽卡阶段')
time.sleep(0.5)
print('我:我的回合,抽卡!')
time.sleep(1)
position = random.randint(0,len(myallcard)-1)
myhandcard.append(myallcard[position])
print('你抽了一张:{}'.format(myallcard[position].name))
del myallcard[position]
return turn,myallcard,myhandcard
else:
print('对方的抽卡阶段')
time.sleep(0.5)
print('对方:我的回合,抽卡!')
time.sleep(1)
position = random.randint(0,len(yourallcard)-1)
yourhandcard.append(yourallcard[position])
del yourallcard[position]
return turn,yourallcard,yourhandcard
def addtwocard():
global myusemagic,cancelopportunity,yourdeadcard,mydeadcard,myhandcard,yourhandcard,myallcard,yourallcard,turn,cancelopportunity
x = True
if (add2card in myhandcard or add2card in myusemagic) and len(myallcard)>=2 and turn == 1:
print('我:从手卡中,发动魔法,强欲之壶!')
time.sleep(0.8)
if blackcancelmagic(x) == True:
mydeadcard.append(add2card)
try:
myhandcard.remove(add2card)
except:
myusemagic.remove(add2card)
position = random.randint(0,len(myallcard)-1)
myhandcard.append(myallcard[position])
position = random.randint(0,len(myallcard)-1)
myhandcard.append(myallcard[position])
else:
mydeadcard.append(add2card)
elif (add2card in myhandcard or add2card in myusemagic) and len(myallcard)==1 and turn ==1:
print('我:从手卡中,发动魔法,强欲之壶!')
mydeadcard.append(add2card)
try:
myhandcard.remove(add2card)
except:
myusemagic.remove(add2card)
position = random.randint(0,len(myallcard)-1)
myhandcard.append(myallcard[position])
elif add2card in yourhandcard and len(yourallcard)>=2 and turn == 2:
x = True
print('对方:从手卡中,发动魔法,强欲之壶!')
if xyzcancelmagic(x) == True:
yourdeadcard.append(add2card)
yourhandcard.remove(add2card)
position = random.randint(0,len(yourallcard)-1)
yourhandcard.append(yourallcard[position])
position = random.randint(0,len(yourallcard)-1)
yourhandcard.append(yourallcard[position])
else:
yourdeadcard.append(add2card)
elif add2card in yourhandcard and len(yourallcard)==2:
x = True
print('对方:从手卡中,发动魔法,强欲之壶!')
if xyzcancelmagic(x) == True:
yourdeadcard.append(add2card)
yourhandcard.remove(add2card)
position = random.randint(0,len(yourallcard)-1)
yourhandcard.append(myallcard[position])
else:
yourdeadcard.append(add2card)
def turnover():
global turn
if turn == 1:
turn = 2
elif turn == 2:
turn = 1
def throwcard():
global myhandcard,yourhandcard,turn,yourdeadcard,mydeadcard
if len(myhandcard)>6 and turn==1:
print('我方的结束阶段')
time.sleep(0.5)
print('请丢弃%d张牌'%(len(myhandcard)-6))
while len(myhandcard)>6:
position = int(input('请输入序列号:'))
print('你丢弃了一张:{}'.format(myhandcard[position-1].name))
mydeadcard.append(myhandcard[position-1])
del myhandcard[position-1]
return myhandcard,mydeadcard
if len(yourhandcard)>6 and turn==2:
print('对方的结束阶段')
time.sleep(0.5)
while len(yourhandcard)>6:
yourdeadcard.append(yourhandcard[0])
print('对方丢弃了一张:',yourhandcard[0].name)
del yourhandcard[0]
return yourhandcard,yourdeadcard
def callmonster():
global myusemonster,yourusemonster,myhandcard,yourhandcard,allcard,turn,mydeadcard,yourdeadcard
callopportunity = 1
if turn == 1:
choose = input('你所要召唤的怪兽为:')
for i in allcard:
if i in myhandcard and callopportunity == 1:
if choose == i.name:
if i.level!=None and i.level <= 4 and callopportunity == 1:
myusemonster.append(i)
myhandcard.remove(i)
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'atk':
print(i.name,i.attraction)
print('我:我以攻击姿态通常召唤一只怪兽!')
elif chooseoccasion == 'def':
print('我:我覆盖一张卡片!')
i.occasion = 0
return i.occasion
callopportunity = 0
elif i.level!=None and i.level<=6 and i.level>=5 and callopportunity == 1:
choose1 = input('选择场上一只怪兽献祭:')
for j in myusemonster:
if choose1 == j.name:
mydeadcard.append(j)
myusemonster.remove(j)
myusemonster.append(i)
myhandcard.remove(i)
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'atk':
print(i.name,i.attraction)
print('我:我以攻击姿态解放召唤一只怪兽!')
elif chooseoccasion == 'def':
print('我:我覆盖一张卡片!')
i.occasion = 0
return i.occasion
callopportunity = 0
else:
None
elif i.level!=None and i.level>=7 and callopportunity == 1:
choose1 = input('选择场上两只怪兽献祭:第一只:')
choose2 = input('第二只:')
for j in myusemonster:
for k in myusemonster:
if choose1 == j.name and choose2 == k.name:
mydeadcard.append(j)
mydeadcard.append(k)
myusemonster.remove(j)
myusemonster.remove(k)
myusemonster.append(i)
myhandcard.remove(i)
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'atk':
print(i.name,i.attraction)
print('我:我以攻击姿态解放召唤一只怪兽!')
if i == blueeyes:
time.sleep(1)
print('我的骄傲!我的灵魂!')
time.sleep(1)
print('出来吧!青眼白龙!')
time.sleep(1)
elif chooseoccasion == 'def':
print('我:我覆盖一张卡片!')
i.occasion = 0
return i.occasion
callopportunity = 0
else:
None
else:
None
elif turn == 2:
for i in allcard:
if i in yourhandcard and callopportunity == 1:
if i.level!=None and i.level <= 4:
yourusemonster.append(i)
yourhandcard.remove(i)
print('对方:我通常召唤一只怪兽!')
callopportunity = 0
elif i.level!=None and i.level<=6 and i.level>=5 and callopportunity == 1:
for j in yourusemonster:
if j.level <=4:
yourdeadcard.append(j)
yourusemonster.remove(j)
yourusemonster.append(i)
yourhandcard.remove(i)
print('对方:我解放召唤一只怪兽!')
if i == blackmagiciangirl:
time.sleep(1)
print('最伟大的魔术师有一个他最得意的弟子!')
time.sleep(1)
print('出来吧!黑魔术少女!')
time.sleep(1)
callopportunity = 0
callopportunity = 0
else:
None
elif i.level!=None and len(yourusemonster)>=2 and i.level>=7 and callopportunity == 1:
for j in yourusemonster:
for k in yourusemonster:
if j != k and j.level<=6 and k.level<=6:
yourdeadcard.append(j)
youedeadcard.append(k)
yourusemonster.remove(j)
yourusemonster.remove(k)
yourusemonster.append(i)
yourhandcard.remove(i)
print('对方:我解放召唤一只怪兽!')
if i == blackmagiciangirl:
time.sleep(1)
print('这是我最强的王牌,我最忠诚的仆人!')
time.sleep(1)
print('出来吧!黑魔术师!')
time.sleep(1)
callopportunity = 0
else:
None
else:
None
def setupacard():
global myhandcard,myusemagic,yourhandcard,yourusemagic,turn
if turn == 1:
if len(myusemagic)<3:
for i in myhandcard:
if i.attraction == None:
choose = input('是否覆盖魔法陷阱卡‘{}’y/Y:'.format(i.name))
if choose == 'y' or choose == 'Y':
myusemagic.append(i)
myhandcard.remove(i)
print(i.name)
print('我:我覆盖一张卡片!')
else:
None
elif turn == 2 :
for oi in allcard:
if oi in yourhandcard and oi.attraction == None and len(yourusemagic)<3:
if oi == powerstrength:
yourhandcard.remove(oi)
yourusemagic.append(oi)
print('对方:我覆盖一张卡片!')
while len(yourhandcard)>=6 and len(yourusemagic)<2:
yourhandcard.remove(oi)
yourusemagic.append(oi)
print('对方:我覆盖一张卡片!')
return myhandcard,myusemagic,yourhandcard,yourusemagic,turn
def monsterkongkiki():
global myusemonster,yourusemonster,mylife,yourlife,mydeadcard,yourdeadcard,turn,count
mymonsteratk = []
mymonsterdef = []
mymonstername = []
mymonstername2 = []
yourmonsteratk = []
yourmonstername = []
if turn == 1 and count==True:
for i in myusemonster:
if i.name=='真青眼究极龙':
atkopportunitytriple = 1
count = 2
while 1==1:
if count==0:
break
if atkopportunitytriple ==1:
choose = input('指定攻击对象为(停止攻击直接回车):')
x = True
if hannoi(x)==False:
break
try:
if choose == '':
break
elif choose == '玩家' and len(yourusemonster)==0:
print('直接攻击!')
time.sleep(1)
yourlife = yourlife - i.attraction
print('对方受到了%d的生命值伤害'%i.attraction)
atkopportunitytriple-=1
elif choose != '玩家' and len(yourusemonster) >0:
for oi in yourusemonster:
if oi.name == choose and atkopportunitytriple>=1:
if oi.occasion == 1 and i.attraction > oi.attraction:
yourlife = yourlife - i.attraction + oi.attraction
print('对方受到了%d的生命值伤害'%(i.attraction - oi.attraction))
yourdeadcard.append(oi)
yourusemonster.remove(oi)
atkopportunitytriple-=1
elif oi.occasion == 1 and i.attraction == oi.attraction:
yourdeadcard.append(oi)
mydeadcard.append(i)
myusemonster.remove(i)
yourusemonster.remove(oi)
elif oi.occasion == 1 and i.attraction < oi.attraction:
mylife = mylife + i.attraction - oi.attraction
mydeadcard.append(i)
myusemonster.remove(i)
print('我方受到了%d的生命值伤害'%(oi.attraction - i.attraction))
elif oi.occasion == 0:
print(oi.name, oi.defendence)
if i.attraction > oi.defendence:
yourusemonster.remove(oi)
atkopportunitytriple-=1
elif i.attraction == oi.defendence:
atkopportunitytriple-=1
oi.occasion == -1
elif i.attraction < oi.defendence:
mylife = mylife + i.attraction - oi.defendence
print('我方受到了%d的生命值伤害'%(oi.defendence - i.attraction))
atkopportunitytriple-=1
oi.occasion == -1
elif oi.occasion == -1:
if i.attraction > oi.defendence:
yourusemonster.remove(oi)
atkopportunitytriple-=1
elif i.attraction == oi.defendence:
atkopportunitytriple-=1
elif i.attraction < oi.defendence:
mylife = mylife + i.attraction - oi.defendence
print('我方受到了%d的生命值伤害'%(oi.defendence - i.attraction))
atkopportunitytriple-=1
except:
None
elif atkopportunitytriple == 0 and count!=0 and len(myblendmonster)>0:
choose = input("是否发动‘真青眼究极龙’的效果?Y/y(其它取消):")
if choose == 'Y' or choose == 'y':
if count != 0:
if count == 2:
print('我:我发动‘真青眼究极龙’的效果!')
time.sleep(0.8)
print('我:通过送墓额外卡组的一只怪兽,‘真青眼究极龙’一回合可以做三次攻击!')
print('我:真青眼究极龙攻击,究极爆裂!')
elif count == 1:
print('我:真青眼究极龙攻击,究极爆裂!')
removeblendmonsterposition = random.randint(0,len(myblendcard)-1)
print('{}被送去了墓地'.format(myblendcard[removeblendmonsterposition].name))
mydeadcard.append(myblendcard[removeblendmonsterposition])
myblendcard.remove(myblendcard[removeblendmonsterposition])
count-=1
atkopportunitytriple+=1
else:
break
if i.name=='青眼双爆裂龙':
atkopportunitydouble,playatk = 2,1
while atkopportunitydouble!=0 or yourlife>0:
if (playatk == 0 and len(yourusemonster)==0):
break
choose = input('指定攻击对象为(停止攻击直接回车):')
x = True
if hannoi(x)==False:
break
try:
if choose == '':
break
if choose == '玩家' and len(yourusemonster)==0:
playatk = 0
print('直接攻击!')
time.sleep(1)
yourlife = yourlife - i.attraction
print('对方受到了%d的生命值伤害'%i.attraction)
elif choose != '玩家' and len(yourusemonster) >0:
for oi in yourusemonster:
if oi.name == choose and atkopportunitydouble>=1:
if oi.occasion == 1 and i.attraction > oi.attraction:
yourlife = yourlife - i.attraction + oi.attraction
print('对方受到了%d的生命值伤害'%(i.attraction - oi.attraction))
yourdeadcard.append(oi)
yourusemonster.remove(oi)
atkopportunitydouble-=1
elif oi.occasion == 1 and i.attraction == oi.attraction:
yourdeadcard.append(oi)
mydeadcard.append(i)
yourusemonster.remove(oi)
elif oi.occasion == 1 and i.attraction < oi.attraction:
mylife = mylife + i.attraction - oi.attraction
print('我方受到了%d的生命值伤害'%(oi.attraction - i.attraction))
elif oi.occasion == 0:
print(oi.name, oi.defendence)
if i.attraction > oi.defendence:
yourusemonster.remove(oi)
atkopportunitydouble-=1
elif i.attraction == oi.defendence:
atkopportunitydouble-=1
oi.occasion == -1
elif i.attraction < oi.defendence:
mylife = mylife + i.attraction - oi.defendence
print('我方受到了%d的生命值伤害'%(oi.defendence - i.attraction))
atkopportunitydouble-=1
oi.occasion == -1
elif oi.occasion == -1:
if i.attraction > oi.defendence:
yourusemonster.remove(oi)
atkopportunitydouble-=1
elif i.attraction == oi.defendence:
atkopportunitydouble-=1
elif i.attraction < oi.defendence:
mylife = mylife + i.attraction - oi.defendence
print('我方受到了%d的生命值伤害'%(oi.defendence - i.attraction))
atkopportunitydouble-=1
except:
None
else:
if i.occasion == 1:
position = myusemonster.index(i)
exec('atkopportunity%s = 1'%position)
eval('%s'%position)
choose = input('指定攻击对象为:')
x = True
try:
if hannoi(x)==False:
None
else:
if choose != '玩家' and len(yourusemonster) >0:
for oi in yourusemonster:
if oi.name == choose and 'atkopportunity%s >= 1'%position:
if oi.occasion == 1 and i.attraction > oi.attraction:
yourlife = yourlife - i.attraction + oi.attraction
print('对方受到了%d的生命值伤害'%(i.attraction - oi.attraction))
yourdeadcard.append(oi)
yourusemonster.remove(oi)
exec('atkopportunity%s -= 1'%position)
elif oi.occasion == 1 and i.attraction == oi.attraction:
yourdeadcard.append(oi)
mydeadcard.append(i)
yourusemonster.remove(oi)
myusemonster.remove(i)
elif oi.occasion == 1 and i.attraction < oi.attraction:
mylife = mylife + i.attraction - oi.attraction
print('我方受到了%d的生命值伤害'%(oi.attraction - i.attraction))
mydeadcard.append(i)
myusemonster.remove(i)
break
elif oi.occasion == 0:
print(oi.name, oi.defendence)
if i.attraction > oi.defendence:
yourusemonster.remove(oi)
exec('atkopportunity%s -= 1'%position)
elif i.attraction == oi.defendence:
exec('atkopportunity%s -= 1'%position)
oi.occasion == -1
elif i.attraction < oi.defendence:
mylife = mylife + i.attraction - oi.defendence
print('我方受到了%d的生命值伤害'%(oi.defendence - i.attraction))
exec('atkopportunity%s -= 1'%position)
oi.occasion == -1
elif oi.occasion == -1:
if i.attraction > oi.defendence:
yourusemonster.remove(oi)
exec('atkopportunity%s -= 1'%position)
elif i.attraction == oi.defendence:
exec('atkopportunity%s -= 1'%position)
elif i.attraction < oi.defendence:
mylife = mylife + i.attraction - oi.defendence
print('我方受到了%d的生命值伤害'%(oi.defendence - i.attraction))
exec('atkopportunity%s -= 1'%position)
elif choose == '玩家' and len(yourusemonster) == 0:
print('直接攻击!')
time.sleep(1)
yourlife = yourlife - i.attraction
print('对方受到了%d的生命值伤害'%i.attraction)
break
except:
None
if turn == 2 and count==True:
for i in myusemonster:
if i.occasion == 1:
mymonsteratk.append(i.attraction)
mymonstername.append(i)
elif i.occasion == -1:
mymonsterdef.append(i.defendence)
mymonstername2.append(i)
for oi in yourusemonster:
yourmonsteratk.append(oi.attraction)
yourmonstername.append(oi)
positionoi = yourusemonster.index(oi)
exec('atkopportunity%s = 1'%positionoi)
eval('%s'%positionoi)
print('对方:进入战斗阶段!')
x = True
if hannoi(x)==False:
break
try:
if max(yourmonsteratk) > max(mymonsteratk):
changeoccasion(x=2)
positioni = mymonsteratk.index(max(mymonsteratk))
positionoi = yourmonsteratk.index(max(yourmonsteratk))
print('对方用{}攻击我方的{}'.format(yourmonstername[positionoi].name,mymonstername[positioni].name))
time.sleep(1)
if defenddooruse()=='Y' or 'y':
mymonsteratk.remove(max(mymonsteratk))
mydeadcard.append(mymonstername[positioni])
myusemonster.remove(mymonstername[positioni])
else:
mylife = mylife - max(yourmonsteratk) + max(mymonsteratk)
print('我方受到了%d的生命值伤害'%(max(yourmonsteratk) -max(mymonsteratk)))
exec('atkopportunity%s = 0'%positionoi)
yourmonsteratk.remove(max(yourmonsteratk))
del yourmonstername[positionoi]
mymonsteratk.remove(max(mymonsteratk))
mydeadcard.append(mymonstername[positioni])
myusemonster.remove(mymonstername[positioni])
del mymonstername[positioni]
except:
None
try:
if max(yourmonsteratk) < max(mymonsteratk):
changeoccasion(x=1)
except:
None
try:
if max(yourmonsteratk) > max(mymonsterdef):
changeoccasion(x=2)
positioni = mymonsterdef.index(max(mymonsterdef))
positionoi = yourmonsteratk.index(max(yourmonsteratk))
print('对方用{}攻击我方的{}'.format(yourmonstername[positionoi].name,mymonstername2[positioni].name))
time.sleep(1)
if yourmonstername[positionoi] == yourusemonster[positionoi].name:
exec('atkopportunity%s = 0'%positionoi)
yourmonsteratk.remove(max(yourmonsteratk))
del yourmonstername[positionoi]
mymonsterdef.remove(max(mymonsterdef))
for i in myusemonster:
if i == mymonstername2[positioni]:
mydeadcard.append(i)
myusemonster.remove(i)
break
del mymonstername2[positioni]
except:
None
try:
if len(myusemonster)==0 and oi.occasion==1:
if 'atkopportunity%s == 1'%positionoi:
print('直接攻击!')
time.sleep(1)
if defenddooruse()=='y' or defenddooruse()=='Y':
None
else:
mylife = mylife - oi.attraction
print('我方受到了%d的生命值伤害'%oi.attraction)
else:
for oi in yourusemonster:
if oi.occasion == 1 and oi.attraction>=1500:
for i in myusemonster:
if i.occasion == 0:
print('对方用{}攻击我方的{}'.format(oi.name,i.name))
i.occasion =-1
print(i.name, i.defendence)
if oi.attraction>i.defendence:
mydeadcard.append(i)
myusemonster.remove(i)
else:
yourlife = yourlife + oi.attraction - i.defendence
if oi.attraction0:
mymonsteratk = []
mymonsterdef = []
mymonstername = []
mymonstername2 = []
for i in myusemonster:
if i.occasion==1:
mymonsteratk.append(i.attraction)
mymonstername.append(i)
if i.occasion == -1:
mymonsterdef.append(i.defendence)
mymonstername2.append(i)
time.sleep(0.5)
x = True
print('对方:从手卡,发动魔法,千把刀!')
try:
if xyzcancelmagic(x)==True:
if len(mymonsteratk)>0 and max(mymonsteratk)>1400:
print('我方{}被破坏'.format(mymonstername[mymonsteratk.index(max(mymonsteratk))].name))
mydeadcard.append(mymonstername[mymonsteratk.index(max(mymonsteratk))])
myusemonster.remove(mymonstername[mymonsteratk.index(max(mymonsteratk))])
elif len(mymonsterdef)>0 and max(mymonsteratk)<=1500:
print('我方{}被破坏'.format(mymonstername2[mymonsterdef.index(max(mymonsterdef))].name))
mydeadcard.append(mymonstername2[mymonsterdef.index(max(mymonsterdef))])
myusemonster.remove(mymonstername2[mymonsterdef.index(max(mymonsterdef))])
else:
position = random.randint(0,len(myusemonster)-1)
print('我方{}被破坏'.format(myusemonster[position].name))
mydeadcard.append(myusemonster[position])
myusemonster.remove(myusemonster[position])
except:
None
finally:
yourdeadcard.append(blackknite)
try:
yourhandcard.remove(blackknite)
except:
yourusemagic.remove(blackknite)
def black_magic():
global myusemagic,yourhandcard,yourdeadcard,mydeadcard,myusemonster,cancelopportunity
time.sleep(0.5)
x = True
if len(myusemagic)>=2:
print('对方:从手卡,发动魔法,黑·魔·导!')
if xyzcancelmagic(x) == True:
for i in myusemagic:
print('我方{}被破坏'.format(i.name))
mydeadcard.append(i)
myusemagic.remove(i)
try:
yourhandcard.remove(blackmagic)
except:
yourusemagic.remove(blackmagic)
finally:
yourdeadcard.append(blackmagic)
def sizhesusheng():
global cancelopportunity,myhandcard,yourhandcard,yourdeadcard,yourusemonster,mydeadcard,myusemonster,turn
if (bringtolife in myusemagic or bringtolife in myhandcard) and turn == 1:
print("我:从手卡,发动魔法‘死者苏生’!")
x = True
time.sleep(0.8)
if blackcancelmagic(x) == True:
choose = input('选择要复活的怪兽:')
for oi in yourdeadcard:
if oi.name == choose and oi.attraction>0 and oi.dead == 1:
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'atk':
print('我:我特殊召唤一只怪兽!')
print(oi.name,oi.attraction)
oi.occasion=1
elif chooseoccasion == 'def':
print('我:我特殊召唤一只怪兽!')
print(oi.name,oi.attraction)
oi.occasion = -1
myusemonster.append(oi)
yourdeadcard.remove(oi)
mydeadcard.append(bringtolife)
for i in mydeadcard:
if i.name == choose and i.attraction>0 and i.dead ==1:
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'atk':
print('我:我特殊召唤一只怪兽!')
print(i.name,i.attraction)
i.occasion=1
elif chooseoccasion == 'def':
print('我:我特殊召唤一只怪兽!')
print(i.name,i.attraction)
i.occasion = -1
myusemonster.append(i)
mydeadcard.remove(i)
try:
myhandcard.remove(bringtolife)
except:
myusemagic.remove(bringtolife)
finally:
mydeadcard.append(bringtolife)
if (bringtolife in yourusemagic or bringtolife in yourhandcard) and turn == 2:
deadmonsteratk = []
deadmonstername = []
for i in mydeadcard:
if i.attraction != None and i.dead == 1:
deadmonsteratk.append(i.attraction)
deadmonstername.append(i)
for oi in yourdeadcard:
if oi.attraction != None and oi.dead ==1:
deadmonsteratk.append(oi.attraction)
deadmonstername.append(oi)
try:
if bringtolife in yourusemagic:
print("对方:发动盖卡,发动魔法‘死者苏生’!")
if bringtolife in yourhandcard:
print("对方:从手卡,发动魔法‘死者苏生’!")
time.sleep(0.5)
x=True
if xyzcancelmagic(x) == True:
if max(deadmonsteratk)>1500:
print('对方:我特殊召唤一只怪兽!')
yourusemonster.append(deadmonstername[deadmonsteratk.index(max(deadmonsteratk))])
yourdeadcard.append(bringtolife)
deadmonstername[deadmonsteratk.index(max(deadmonsteratk))].occasion = 1
if deadmonstername[deadmonsteratk.index(max(deadmonsteratk))] in yourdeadcard:
yourdeadcard.remove(deadmonstername[deadmonsteratk.index(max(deadmonsteratk))])
else:
mydeadcard.remove(deadmonstername[deadmonsteratk.index(max(deadmonsteratk))])
print(max(deadmonsteratk),deadmonstername[deadmonsteratk.index(max(deadmonsteratk))].name)
try:
yourhandcard.remove(bringtolife)
except:
yourusemagic.remove(bringtolife)
finally:
yourhandcard.remove(bringtolife)
return deadmonstername[deadmonsteratk.index(max(deadmonsteratk))].occasion,myhandcard,yourhandcard,yourdeadcard,yourusemonster,mydeadcard,myusemonster,turn
except:
None
def blendmonster():
global myblendcard,yourblendcard,myhandcard,yourhandcard,yourdeadcard,yourusemonster,mydeadcard,myusemonster,turn,myusemagic,yourusemagic
if (blend in myhandcard or blend in myusemagic) and turn ==1:
print('我:现在你能体会到我们之间的差距了吧,发动融合!')
x = True
time.sleep(0.8)
if blackcancelmagic(x) == True:
choose = input('想要融合的怪兽为:')
if '青眼双爆裂龙' == choose:
callblueeyesdouble()
if '真青眼究极龙'== choose:
callblueeyestriple()
if 'XYZ-首领龙炮' == choose:
callxyzaddup()
else:
try:
myhandcard.remove(blend)
except:
myusemagic.remove(blend)
finally:
mydeadcard.append(blend)
if (blend in yourhandcard or blend in yourusemagic) and turn == 2:
print('对方:现在该轮到我使用魔法卡了吧,发动融合!')
x = True
if xyzcancelmagic(x)==True:
callblackmagiciandouble()
else:
mydeadcard.append(blend)
try:
yourusemagic.remove(blend)
except:
yourhandcard.remove(blend)
def callblueeyesdouble():
count = 0
blueeyeslist = myusemonster+myhandcard
while blueeyes in blueeyeslist:
count+=1
blueeyeslist.remove(blueeyes)
if count>=2:
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'def':
blueeyesdouble.occasion = -1
print('我:我融合召唤一只怪兽!')
else:
blueeyesdouble.occasion = 1
print('我:我以攻击姿态融合召唤一只怪兽!')
try:
if count==2 or count==3:
myusemonster.append(blueeyesdouble)
myblendcard.remove(blueeyesdouble)
mydeadcard.append(blend)
try:
myusemagic.remove(blend)
except:
myhandcard.remove(blend)
count=0
while count<2:
try:
myhandcard.remove(blueeyes)
mydeadcard.append(blueeyes)
count+=1
except:
None
try:
myusemonster.remove(blueeyes)
mydeadcard.append(blueeyes)
count+=1
except:
None
except:
print('程序有点错误,请联系管理员修复')
def callblueeyestriple():
count = 0
blueeyeslist = myusemonster+myhandcard
while blueeyes in blueeyeslist:
count+=1
blueeyeslist.remove(blueeyes)
if count==3:
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'def':
blueeyesdouble.occasion = -1
print('我:我融合召唤一只怪兽!')
else:
blueeyesdouble.occasion = 1
print('我:我以攻击姿态融合召唤一只怪兽!')
try:
while blueeyestriple not in myusemonster:
try:
myhandcard.remove(blueeyes)
count-=1
except:
myusemonster.remove(blueeyes)
count-=1
if count == 0:
myusemonster.append(blueeyestriple)
mydeadcard.append(blend)
myblendcard.remove(blueeyestriple)
try:
myusemagic.remove(blend)
except:
myhandcard.remove(blend)
finally:
mydeadcard.append(blend)
except:
print('程序有点错误')
def callxyzaddup():
kanonlist=myhandcard+myusemonster
if xkanon in kanonlist and ykanon in kanonlist and zkanon in kanonlist:
chooseoccasion = input('选择攻击或防御状态:atk(攻击)/def(防御)')
if chooseoccasion == 'def':
blueeyesdouble.occasion = -1
print('我:我融合召唤一只怪兽!')
else:
blueeyesdouble.occasion = 1
print('我:我以攻击姿态融合召唤一只怪兽!')
try:
try:
myhandcard.remove(xkanon)
except:
myusemonster.remove(xkanon)
try:
myhandcard.remove(ykanon)
except:
myusemonster.remove(ykanon)
try:
myhandcard.remove(zkanon)
except:
myusemonster.remove(zkanon)
mydeadcard.append(xkanon)
mydeadcard.append(ykanon)
mydeadcard.append(zkanon)
myusemonster.append(xyzaddup)
myblendcard.remove(xyzaddup)
try:
myusemagic.remove(blend)
except:
myhandcard.remove(blend)
finally:
mydeadcard.append(blend)
except:
print('程序有点错误')
def xyzcancelmagic(x):
global yourlife,myusemonster,cancelopportunity
if xyzaddup in myusemonster and cancelopportunity==1:
choose = input("是否发动'XYZ-首领龙炮'的效果?y/Y(其它取消)")
if choose == 'Y' or choose == 'y':
print("我:这个瞬间,我发动'XYZ-首领龙炮'的效果")
time.sleep(0.8)
print("我:一回合一次,无效你的魔法卡并给你造成500点伤害!")
x = False
yourlife-=500
print('对方受到了500点伤害')
cancelopportunity-=1
else:
x = True
return x
def callblackmagiciandouble():
blacklist = yourusemonster+yourhandcard
if blackmagician in blacklist and blackmagiciangirl in blacklist:
try:
yourusemonster.remove(blackmagician)
except:
yourhandcard.remove(blackmagician)
finally:
yourdeadcard.append(blackmagician)
try:
yourusemonster.remove(blackmagiciangirl)
except:
yourhandcard.remove(blackmagiciangirl)
finally:
yourdeadcard.append(blackmagiciangirl)
yourusemonster.append(blackmagiciandouble)
yourblendcard.remove(blackmagiciandouble)
yourdeadcard.append(blend)
try:
yourhandcard.remove(blend)
except:
yourusemagic.remove(blend)
def blackcancelmagic(x):
global cancelopportunity
if blackmagiciandouble in yourusemonster and cancelopportunity==1:
print("对方:这个瞬间,我发动'黑魔术师徒'的效果")
time.sleep(0.8)
print("对方:一回合一次,无效你的魔法卡!")
x = False
cancelopportunity-=1
return x
def blackaddcard():
global addopportunity,yourallcard,yourhandcard
if blackmagiciandouble in yourusemonster and cancelopportunity==1:
yourmagiclist = []
for oi in yourallcard:
if oi.ethnic == '魔法卡':
yourmagiclist.append(oi)
if len(yourmagiclist)>0:
print("对方:这个瞬间,我发动'黑魔术师徒'的效果")
time.sleep(0.8)
print("对方:一回合一次,从卡组中加入一张魔法卡!")
addmagiccard = random.randint(0,len(yourmagiclist)-1)
for oi in yourallcard:
if oi == yourmagiclist[addmagiccard]:
yourhandcard.append(oi)
yourallcard.remove(oi)
print('对方从卡组把一张魔法卡加入手卡')
else:
None
def magiccallblack():
global yourusemonster,yourallcard,yourlife,yourusemagic,yourhandcard,yourdeadcard,myusemonster
mymonsteratk = []
for i in myusemonster:
mymonsteratk.append(i.attraction)
if (blackbreadth in yourhandcard or blackbreadth in yourusemagic) and blackmagician in yourallcard:
print('对方:发动魔法,‘黑魔术的幕布’!')
time.sleep(0.8)
x=True
if xyzcancelmagic(x)==True:
print('对方:支付一半生命值,特殊召唤‘黑魔术师’!')
easycalldef()
def hannoi(x):
global yourusemonster,yourusemagic,yourdeadcard,myusemonster,yourlife,myusemagic,mydeadcard,turn
mymonsteratk=[i.attraction for i in myusemonster if i.occasion==1]
yourmonsteratk=[oi.attraction for oi in yourusemonster if oi.occasion==1]
if powerstrength in myusemagic and turn == 2:
choose = input('是否发动‘汉诺伊的崇高力量’y/Y')
if choose == 'y' or choose == 'Y':
print('我:这个瞬间,发动盖卡,‘汉诺伊的崇高力量’!')
time.sleep(0.8)
print('我:破坏你场上所有攻击表示的怪兽!')
x = False
for oi in yourusemonster:
if oi.occasion==1:
yourusemonster.remove(oi)
yourdeadcard.append(oi)
myusemagic.remove(powerstrength)
mydeadcard.append(powerstrength)
print('{}被送入墓地'.format(oi.name))
if powerstrength in yourusemagic and turn==1:
try:
if max(yourmonsteratk)=2 or any([i for i in mymonsteratk if i>=3000]):
x = False
easymagicdef()
if any([i for i in mymonsteratk if i>=yourlife]):
try:
easymagicdef()
x = False
except:
None
else:
easymagicdef()
x = False
return x
def defenddooruse():
global myallcard,myusemagic
if defenddoor in myusemagic:
choose = input('是否发动‘反击之门’的效果‘Y/y’:')
if choose == 'y' or choose == 'Y':
print('我:这个瞬间,我发动盖卡‘反击之门’!')
time.sleep(0.8)
print('我:抵挡一次伤害,然后我要从卡组抽一张卡!')
time.sleep(0.8)
position = random.randint(0,len(myallcard)-1)
myhandcard.append(myallcard[position])
print('你抽了一张:{}'.format(myallcard[position].name))
del myallcard[position]
myusemagic.remove(defenddoor)
mydeadcard.append(defenddoor)
else:
choose = ''
return choose
def magiccallblackmagiciangirl():
if (blackmagician in yourusemonster or blackmagiciandouble in yourusemonster) and (courtesyvalue in yourhandcard or courtesyvalue in yourusemagic) and blackmagiciangirl in yourallcard:
if courtesyvalue in yourhandcard:
print('对方:从手卡,发动魔法‘贤者的宝石’!')
if courtesyvalue in yourusemagic:
print('对方:打开盖卡,发动魔法‘贤者的宝石’!')
time.sleep(0.8)
print('对方:‘黑魔术师’在场时发动这个魔法,可以从卡组中特殊召唤‘黑魔术少女’!')
yourallcard.remove(blackmagiciangirl)
yourusemonster.append(blackmagiciangirl)
yourdeadcard.append(courtesyvalue)
try:
yourhandcard.remove(courtesyvalue)
except:
yourusemagic.remove(courtesyvalue)
#函数定义区@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
def easycalldef():
global yourusemonster,yourallcard,yourlife,yourusemagic,yourhandcard,yourdeadcard
yourusemonster.append(blackmagician)
yourallcard.remove(blackmagician)
yourdeadcard.append(blackbreadth)
try:
yourhandcard.remove(blackbreadth)
except:
yourusemagic.remove(blackbreadth)
yourlife = yourlife//2
def easymagicdef():
if powerstrength in yourusemagic:
print('对方:我就是在等这个时候,发动盖卡‘汉诺伊的崇高力量’!')
time.sleep(0.8)
print('对方:你的攻击预示了你的失败,破坏你所有攻击表示的怪兽!')
yourusemagic.remove(powerstrength)
yourdeadcard.append(powerstrength)
for i in myusemonster:
if i.occasion==1:
myusemonster.remove(i)
mydeadcard.append(i)
print('{}被送入墓地'.format(i.name))
#辅助函数定义区@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# print(format('加载中....','=^30'))
# for i in trange(100):
# time.sleep(0.05)
# print(format('加载成功!','=^30'))
# timer0,timer1,timer2,timer3,timer4 = threading.Timer(2,timeprint0),threading.Timer(4,timeprint1),threading.Timer(6,timeprint2),threading.Timer(8,timeprint3),threading.Timer(10,timeprint4)
#开局打印区@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@22
# timer0.start()
# timer1.start()
# timer2.start()
# timer3.start()
# timer4.start()
# time.sleep(13)
# startgame = input('开始游戏请输入‘y/Y’:')
#游戏主体区################################################################################################3
class yougioh:
def __init__(self,name,level,defendence,attraction,ethnic,special,skill,occasion,dead):
self.name = name
self.level = level
self.defendence = defendence
self.attraction = attraction
self.ethnic = ethnic
self.special = special
self.skill = skill
self.occasion = occasion
self.dead = dead
blueeyes = yougioh('青眼白龙',8,3000,3000,'怪兽卡','龙族,光属性,通常怪兽','以高攻击力高防御力著称',1,1)
dragonmirror = yougioh('龙之镜',None,None,None,'魔法卡','通常魔法','可以将墓地存在的符合融合条件的卡除外进行融合',None,1)
dragontemple = yougioh('龙之陵庙',None,None,None,'魔法卡','通常魔法','可以将卡组的怪兽卡送入墓地,如果送入的怪兽卡为通常怪兽则可以再送墓一张怪兽卡',None,1)
blend = yougioh('融合',None,None,None,'魔法卡','通常魔法','可以将手上和场上的可以进行融合的卡进行融合',None,1)
bringtolife = yougioh('死者苏生',None,None,None,'魔法卡','通常魔法','可以把我方或对方的一张怪兽卡复活到我方',None,1)
add2card = yougioh('强欲之壶',None,None,None,'魔法卡','通常魔法','可以抽两张卡',None,1)
powerstrength = yougioh('汉诺伊的崇高力量',None,None,None,'陷阱卡','通常陷阱','对方的怪兽进行攻击时把对方所有攻击表示的怪兽全部破坏',None,1)
defenddoor = yougioh('反击之门',None,None,None,'陷阱卡','通常陷阱','我方受到伤害时可以抵消一次伤害并抽一张卡',None,1)
xkanon = yougioh('X-首领加农',4,1600,1800,'怪兽卡','机器族,光属性,通常怪兽','以X变形形态变化',1,1)
ykanon = yougioh('Y-首领加农',4,1600,1600,'怪兽卡','机器族,光属性,通常怪兽','以Y变形形态变化',1,1)
zkanon = yougioh('Z-首领加农',4,1400,1600,'怪兽卡','机器族,光属性,通常怪兽','以Z变形形态变化',1,1)
destroyloop = yougioh('破坏轮',None,None,None,'陷阱卡','通常陷阱','对方怪兽攻击时可以破坏该怪兽,但是双方要受到该怪兽的攻击力的数值伤害',None,1)
blackmagician = yougioh('黑魔术师',7,2500,2500,'怪兽卡','魔法师族,暗属性,通常怪兽','世上最强的魔法师',1,1)
blackmagic = yougioh('黑魔导',None,None,None,'魔法卡','通常魔法','当场上存在黑魔术师时,破坏对方所有的魔法陷阱卡',None,1)
blackknite = yougioh('千把刀',None,None,None,'魔法卡','通常魔法','当场上存在黑魔术师时,破坏对方的一张卡',None,1)
blackmagiciangirl = yougioh('黑魔术少女',6,1800,2000,'怪兽卡','魔法师族,暗属性,通常怪兽','世上最强的魔法师的徒弟',1,1)
skygift = yougioh('天空的宝牌',None,None,None,'魔法卡','通常魔法','将双方的手牌补至6张',None,1)
blackbreadth = yougioh('黑魔术的幕布',None,None,None,'魔法卡','通常魔法','可以从卡组或手牌特殊召唤黑魔术师',None,1)
courtesyvalue = yougioh('贤者的宝石',None,None,None,'魔法卡','通常魔法','当场上存在黑魔术师时,可以从卡组特殊召唤黑魔术少女',None,1)
magicalblend = yougioh('魔术化融合',None,None,None,'魔法卡','通常魔法','可以从卡组里选择融合素材送入墓地进行魔法师族怪兽的融合',None,1)
kulipo = yougioh('栗子球',1,200,200,'怪兽卡','魔法师族,暗属性,通常怪兽','栗子球在手卡上时,将要受到伤害时可以丢弃此卡免疫该伤害',1,1)
blueeyesdouble = yougioh('青眼双爆裂龙',8,2500,3000,'怪兽卡','龙族,光属性,融合怪兽','青眼白龙X2 此卡只能通过融合召唤特殊召唤,青眼双爆裂龙一回合能做对怪兽进行两次攻击,且不会被战斗破坏',1,0)
blueeyestriple = yougioh('真青眼究极龙',12,4000,4500,'怪兽卡','龙族,光属性,融合怪兽','青眼白龙X3 此卡只能通过融合召唤特殊召唤,青眼究极龙可以把额外卡组的一只融合怪兽送去墓地,增加一次攻击机会,一回合最多只能攻击三次',1,0)
xyzaddup = yougioh('XYZ-首领龙炮',10,2300,2800,'怪兽卡','机械族,光属性,融合怪兽','X-首领加农+Y-首领加农+Z-首领加农 此卡只能通过融合召唤特殊召唤,一回合一次,每当对方发动魔法陷阱卡时能无效一次,并且给予对方500点伤害',1,0)
blackmagiciandouble = yougioh('黑魔术师徒',10,2800,3000,'怪兽卡','魔术师族,暗属性,融合怪兽',"黑魔术师+黑魔术少女 此卡只能通过融合召唤特殊召唤,一回合一次,可以随机将一张魔法卡加入手牌,此卡在场上也被视为'黑魔术师'",1,0)
allcard = {blackmagician,blackmagic,blackknite,blackmagiciangirl,blend,bringtolife,powerstrength,skygift,blackbreadth,courtesyvalue,magicalblend,kulipo,blueeyes,dragonmirror,dragontemple,blend,bringtolife,add2card,powerstrength,defenddoor,xkanon,ykanon,zkanon,destroyloop}
myhandcard = []
yourhandcard = []
# myallcard = [blend,blend,defenddoor,defenddoor,powerstrength,xkanon,ykanon,zkanon]
# yourallcard = [blackmagician,blackmagician,blend,powerstrength,courtesyvalue,bringtolife,blackmagiciangirl,blackmagiciangirl,blackknite,blackbreadth]
myallcard = [blueeyes,blueeyes,blueeyes,dragonmirror,dragontemple,dragontemple,dragontemple,blend,blend,blend,bringtolife,add2card,powerstrength,defenddoor,defenddoor,defenddoor,xkanon,ykanon,zkanon,destroyloop]
yourallcard = [blackmagician,blackmagician,blackmagic,blackknite,blackknite,blackmagiciangirl,blackmagiciangirl,blend,blend,bringtolife,powerstrength,skygift,blackbreadth,blackbreadth,courtesyvalue,courtesyvalue,magicalblend,magicalblend,magicalblend,add2card,kulipo]
mydeadcard = []
yourdeadcard = []
myusemonster = []
yourusemonster = []
myusemagic =[]
yourusemagic = []
myallmagic = [dragonmirror,dragontemple,blend,bringtolife,add2card,powerstrength,defenddoor,destroyloop]
myblendcard = [blueeyesdouble,blueeyestriple,blueeyesdouble,xyzaddup,xyzaddup]
yourblendcard = [blackmagiciandouble,blackmagiciandouble,blackmagiciandouble]
yourothercard = []
mylife,yourlife,demage,count = 4000,4000,0,False
tossresult = random.randint(1,2)
if tossresult == 1:
print('你为先手')
turn = 1
else:
print('你为后手')
turn = 2
start4card()
time.sleep(1)
while mylife>0 and yourlife>0:
if len(myallcard)==0 and turn ==1:
print('你输了,因为卡组没有牌可抽了')
break
if len(yourallcard)==0 and turn ==2:
print('你赢了,因为对手没有牌可抽了')
break
addacard()
time.sleep(0.5)
if turn ==2:
cancelopportunity,addopportunity = 1,1
addtwocard()
for i in yourusemonster:
print('场上:',i.name)
for i in yourhandcard:
print('手牌:',i.name)
magiccallblack()
magiccallblackmagiciangirl()
blendmonster()
blackaddcard()
if bringtolife in yourhandcard and len(yourusemonster)<=2:
sizhesusheng()
callmonster()
blackmasha()
setupacard()
monsterkongkiki()
elif turn == 1:
cancelopportunity=1
addtwocard()
for i in myusemonster:
print('场上:',i.name)
for i in myhandcard:
print('手牌:',i.name)
if bringtolife in myhandcard and len(myusemonster)<=2:
sizhesusheng()
if blend in myhandcard or blend in myusemagic:
blendmonster()
for i in myhandcard:
if i.occasion == None and len(myusemagic)<3:
print('{}可以覆盖'.format(i.name))
setupacard()
callmonster()
changeoccasion(x=0)
for i in myusemonster:
if i.occasion == 1:
print('{}可以进行攻击'.format(i.name))
choose = input('攻击:1,取消:其他 ')
if choose == '1':
monsterkongkiki()
else:
None
throwcard()
print(len(myusemagic),len(yourusemagic))
for i in yourdeadcard:
print('墓地:',i.name)
for i in mydeadcard:
print('墓地:',i.name)
turnover()
if count==False:
count=True
if mylife<=0:
print('你输了,因为你的生命值归零了')
if yourlife<=0:
print('你赢了,因为对手生命值归零了')



