前几天编写的程序,有一点小失误,导致大乔的技能没有触发限制了,因此将原来的小程序做了调整。调整的主要方面是:大乔不能将杀流离给出杀的人,其他的人可以随意流离。
class daqiao:
pai=0;
xue=3;
name=0;
def __init__(self,name,pai):
self.name = name+1;#名称
self.pai = pai;#初始化手牌
def get(self):#摸牌
self.pai+=2;
"""
print str(self.name)+": Get 2 codes"
print str(self.name)+": have code "+str(self.pai);
"""
def put(self):#出牌
self.pai-=1;
"""
print str(self.name)+": Out 1 code"
print str(self.name)+": have code "+str(self.pai);
"""
def skill(self,mopaiid,maxid):
if abs(self.name%maxid-1-mopaiid)==1:#是否为距离出杀大乔距离为1的人
if (self.name%maxid-1)>mopaiid:#出杀大乔下家
return self.judge(1)
else:#出杀大乔上家
return self.judge(2)
else:
return self.judge(3)
def judge(self,num):
if self.pai != 0:
self.pai -= 1;
"""
print str(self.name)+": skill put 1"
print str(self.name)+": have code "+str(self.pai);
"""
if num == 1:
return 1;#出杀大乔只可向后流离
elif num == 2:
return -1;#出杀大乔上家只可向前流离
else:
return random.choice([-1,1]);#其他大乔任意
else:
self.xue -= 1;
"""
print str(self.name)+": blood -1"
print str(self.name)+": have blood "+str(self.xue);
"""
return 0;
def Server():
mylist=[];
for i in range(0,8):
mylist.append(daqiao(i,4));#开局
mopaiid=0;
maxid=8;
attack=0;
firstdead=0;
while(1):
if len(mylist)==1:#只剩一个人退出
break;
if mopaiid % maxid == 0:
mopaiid %= maxid;
mylist[mopaiid].get();#摸牌
mylist[mopaiid].put();#出牌
attack=mopaiid+1;
if (attack)%maxid==0:
attack %= maxid;
temp=mylist[attack].skill(mopaiid,maxid);#发动技能并确定流离方向
while temp:
attack+=temp;
if (attack)%maxid==0:
attack %= maxid;
temp=mylist[attack].skill(mopaiid,maxid);
if mylist[mopaiid].pai > mylist[mopaiid].xue:
mylist[mopaiid].pai=mylist[mopaiid].xue;
if mylist[attack].xue == 0:
print str(mylist[attack].name)+":dead"
if maxid==8:
firstdead=mylist[attack].name;
mylist.pop(attack);
maxid -= 1;
mopaiid -= 1;
mopaiid += 1;
print str(mylist[0].name)+":Winer"
return mylist[0].name,firstdead
通过对程序的调整,使得现在谁先死谁后死已经
不能确定了,所以编写了一个循环程序来计算每个角色获胜的概率。
def main():
num=0;
wintemp=0;
faltemp=0;
num=input("Input the while number:")
winlist=[0,0,0,0,0,0,0,0];
fallist=[0,0,0,0,0,0,0,0];
i=num;
while(i):
wintemp,faltemp=Server();
winlist[wintemp-1] += 1;
fallist[faltemp-1] += 1;
i-=1;
for i in range(0,8):
print i+1,"Win:",winlist[i]/float(num);
print "Fal:",fallist[i]/float(num);
通过计算机大量的运算,位于第一位和第二位的角色获胜的概率比其他角色高出接近10倍。第三位的角色死亡概率最高