python解决三国杀头脑风暴(8人 大乔)后续
来源:互联网 发布:python学习资料 编辑:程序博客网 时间:2024/05/01 12:52
前几天编写的程序,有一点小失误,导致大乔的技能没有触发限制了,因此将原来的小程序做了调整。调整的主要方面是:大乔不能将杀流离给出杀的人,其他的人可以随意流离。
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倍。第三位的角色死亡概率最高
- python解决三国杀头脑风暴(8人 大乔)后续
- python解决三国杀头脑风暴(8人 大乔)
- 十大思想实验(思维风暴)
- 《诺曼底大风暴》观后感
- 解决广播风暴
- 轻松解决网络广播风暴
- 三国十大谋士排行榜
- 安装Python及后续
- python+linux后续
- 头脑风暴(一)
- 头脑风暴(二)
- Unity3D大风暴之入门篇(海量教学视频版)
- 小软件Gnutella掀起因特网大风暴
- 公司将有一场大风暴?
- 烧脑的sql语句(头脑风暴)
- 【物志】--三国(258)
- 三国
- 三国
- linux学习笔记2
- 二位指针和二位数组理解
- android控件摆动摇动晃动效果实现
- 使用VS2010时遇到的一些小问题的解决方案
- 谈谈如何学习Linux操作系统
- python解决三国杀头脑风暴(8人 大乔)后续
- 截图 区域找图
- MediaScanner与音乐信息扫描
- Kernel Space - User Space Interfaces
- 安装SQL2005提示“SQL Server 2005 COM+ 目录要求”警告 解决方法
- android 系统重启关机流程分析
- 按行读取文件
- 凯立德car 3.0 夏季版 升级过程(备忘)
- linux性能分析