from random import randint,choice from time import sleep import json print("欢迎来到狼人杀!") try: fs=open("shengli.dat") fs.close() except FileNotFoundError: lll={"l":0, "p":0, "114514":0, "all":0, "jsfs":0, "ch":[], "yy":0 } with open("shengli.dat","w") as f_obj: json.dump(lll,f_obj) else: with open("shengli.dat") as f_obj: lll=json.load(f_obj) print("狼人胜场:",lll["l"]) print("好人胜场:",lll["p"]) print("你死的次数:",lll["114514"]) print("总场次:",lll["all"]) print("识破的狼人数量:",lll["yy"]) if len(lll["ch"])!=0: print("称号:"+",".join(lll["ch"])) sleep(0.3) a=["平民 ","平民","狼人","女巫"]#身份,用列表表示(用元组也行) xing=("王","李","张","刘","徐","冯","袁","邓","韩","杜","朴","金","逄") zhongjian=("既","海","若","树","丽","虎","涵") zuihou=("羽","生","茵","芹","乔","智","丽") disi=("玺","霍","获","岚","吾","乐","空","阵") p1=choice(xing)+choice(zhongjian) p2=choice(xing)+choice(zhongjian)+choice(zuihou) p3=choice(xing)+choice(zhongjian)+choice(zuihou)+choice(disi) wanjianame=[p1,p2,p3] pl=["0","1","2","3"]#玩家 player0=choice(a)#设置玩家身份 ar=a.index(player0) print("等待玩家进入游戏中...") sleep(randint(0,3)) print("玩家1"+"("+p1+")加入游戏") sleep(randint(0,3)) print("玩家2"+"("+p2+")加入游戏") sleep(randint(0,3)) print("玩家3"+"("+p3+")加入游戏") print("玩家已全齐,开始游戏倒计时") timer=3 for i in range(3): print(timer,end=" ") timer-=1 sleep(1) player1=choice(a) ae=a.index(player1) player2=choice(a) ac=a.index(player2) player3=choice(a) ad=a.index(player3) while ae==ar or ae==ac or ae==ad or ad==ac or ad==ar or ac==ar: player1=choice(a) ae=a.index(player1) player2=choice(a) ac=a.index(player2) player3=choice(a) ad=a.index(player3) ap=[player0,player1,player2,player3] langren=ap.index("狼人") nvwu=ap.index("女巫") print("\n你的身份是"+player0) nvwuhuozhe=True nvwuyouduyao=True nvwujiuming=True days=0 ######print(ap) while True: days+=1 print("\t\t\t\t\t\t第"+str(days)+"天~~~~~~~~~~~~~~~") cc=5 if len(pl)==2:#如果在场玩家只剩一个,狼人胜利 print("好人只剩一个,狼人胜利") lll["l"]+=1 break du=5 duyao=5 if nvwuyouduyao==False and nvwujiuming==False: nvwuhuozhe=False c=','.join(pl) print("天黑请闭眼") if a.index(player0)==2: print("狼人请睁眼\n请选择你要杀害的玩家(输入数字"+c+")") cc=int(input()) cd=cc print("狼人请闭眼") else: print("狼人请睁眼\n请选择你要杀害的玩家") sleep(3) cc=randint(0,3) while cc==langren or str(cc) not in pl: cc=randint(0,3) cd=cc print("狼人请闭眼") if nvwuhuozhe: sleep(2) if a.index(player0)==3: print("女巫请睁眼") if nvwujiuming: if cc==0: print("今天晚上,你死了,你是否要进行自救(输入0为否,输入1为是)") ccc=int(input()) if ccc==1: nvwujiuming=False lll["jsfs"]+=1 cc=5 else: print("今天晚上,玩家"+str(cc)+"("+wanjianame[cc-1]+")死了,你是否要救(输入0为否,输入1为是)") ccc=int(input()) if ccc==1: nvwujiuming=False lll["jsfs"]+=1 cc=5 if nvwuyouduyao: print("你有一瓶毒药,你是否要毒?(输入0为否,输入1为是)") duyao=int(input()) if duyao==1: print("要毒谁呢?(输入数字"+c+")") du=int(input()) print("女巫请闭眼") else: print("女巫请睁眼") if nvwujiuming: print("今天晚上,玩家...死了,你是否要救") sleep(3) ccc=randint(0,1) if ccc==1: nvwujiuming=False cc=5 if nvwuyouduyao: print("你有一瓶毒药,你是否要毒?") sleep(3) if ccc==0: duyao=0 else: duyao=randint(0,1) if duyao==1: du=randint(0,3) while du==nvwu or du==cd or str(du) not in pl: du=randint(0,3) print("女巫请闭眼") sleep(2) print("天亮了") if cc==5 and duyao==0: print("昨天没有人死") else: if cc==0 or du==0: print("你死了,已出局") lll["114514"]+=1 break else: if cc!=5: print("昨天晚上玩家"+str(cc)+"("+wanjianame[cc-1]+")死了(狼人杀害)他的身份是:"+ap[cc]) del pl[pl.index(str(cc))] else: print("昨晚狼人没有杀人(女巫拯救)") if duyao==1: print("昨天晚上玩家"+str(du)+"("+wanjianame[du-1]+")死了(女巫毒杀)","他的身份是:"+ap[du]) if ap[du]=="狼人": print("狼人出局,好人胜利") if player0=="女巫": lll["yy"]+=1 lll["p"]+=1 break del pl[pl.index(str(du))] nvwuyouduyao=False if len(pl)==2:#如果在场玩家只剩一个,狼人胜利 print("好人只剩一个,狼人胜利") lll["l"]+=1 break myself,wanjia1,wanjia2,wanjia3=0,0,0,0 c=','.join(pl) print("请你选择要投票的玩家(输入数字"+c+(",投自己将视为弃权)")) aaaaa=int(input()) if aaaaa==1: wanjia1+=1 elif aaaaa==2: wanjia2+=1 elif aaaaa==3: wanjia3+=1 aaaab=aaaaa if "1" in pl: print("请玩家1选择要投票的玩家") while aaaaa==1 or str(aaaaa) not in pl: aaaaa=randint(0,3) if aaaaa==0: myself+=1 elif aaaaa==2: wanjia2+=1 elif aaaaa==3: wanjia3+=1 sleep(3) if aaaaa==0: print("玩家1投给了",aaaaa) else: print("玩家1投给了",aaaaa,"("+wanjianame[aaaaa-1]+")") if "2" in pl: sleep(2) print("请玩家2选择要投票的玩家") while aaaaa==2 or str(aaaaa) not in pl: aaaaa=randint(0,3) if aaaaa==0: myself+=1 elif aaaaa==1: wanjia1+=1 elif aaaaa==3: wanjia3+=1 sleep(3) if aaaaa==0: print("玩家2投给了",aaaaa) else: print("玩家2投给了",aaaaa,"("+wanjianame[aaaaa-1]+")") if "3" in pl: sleep(2) print("请玩家3选择要投票的玩家") while aaaaa==3 or str(aaaaa) not in pl: aaaaa=randint(0,3) if aaaaa==0: myself+=1 elif aaaaa==1: wanjia1+=1 elif aaaaa==2: wanjia2+=1 sleep(3) if aaaaa==0: print("玩家3投给了",aaaaa) else: print("玩家3投给了",aaaaa,"("+wanjianame[aaaaa-1]+")") n=[myself,wanjia1,wanjia2,wanjia3] n.sort(reverse=True) if n[1]==n[0]: print("平票,无人出局") elif n[0]==myself: print("你票数最多,出局") lll["114514"]+=1 break elif n[0]==wanjia1: print("玩家1"+"("+wanjianame[wanjianame.index(p1)]+")票数最多,出局") print("玩家1的身份是"+player1) if a.index(player1)==2: print("狼人出局,好人胜利") if aaaab==1: lll["yy"]+=1 lll["p"]+=1 break elif a.index(player1)==3: nvwuhuozhe=False del pl[pl.index("1")] else: del pl[pl.index("1")] elif n[0]==wanjia2: print("玩家2"+"("+wanjianame[wanjianame.index(p2)]+")票数最多,出局") print("玩家2的身份是"+player2) if a.index(player2)==2: print("狼人出局,好人胜利") if aaaab==2: lll["yy"]+=1 lll["p"]+=1 break elif a.index(player2)==3: nvwuhuozhe=False del pl[pl.index("2")] else: del pl[pl.index("2")] elif n[0]==wanjia3: print("玩家3"+"("+wanjianame[wanjianame.index(p3)]+")票数最多,出局") print("玩家3的身份是"+player3) if a.index(player3)==2: print("狼人出局,好人胜利") if aaaab==3: lll["yy"]+=1 lll["p"]+=1 break elif a.index(player3)==3: nvwuhuozhe=False del pl[pl.index("3")] else: del pl[pl.index("3")] print("你的票数:",myself) if "1" in pl: print("玩家1的票数:",wanjia1) if "2" in pl: print("玩家2的票数:",wanjia2) if "3" in pl: print("玩家3的票数:",wanjia3) if len(pl)==2:#如果在场玩家只剩一个,狼人胜利 print("好人只剩一个,狼人胜利") lll["l"]+=1 break print("玩家1身份:"+player1+"\n玩家2身份:"+player2+"\n玩家3身份:"+player3) lll["all"]+=1 if lll["114514"]/lll["all"]>0.60 and "替罪羊" not in lll["ch"]: print("恭喜获得称号:替罪羊(自己的死亡数占总场数的60%以上)") lll["ch"].append("替罪羊") if lll["114514"]/lll["all"]>0.75 and "究极替罪羊" not in lll["ch"]: print("恭喜获得称号:究极替罪羊(自己的死亡数占总场数的75%以上)") lll["ch"].append("究极替罪羊") if lll["all"]>=15 and "沙场新秀" not in lll["ch"]: print("恭喜获得称号:沙场新秀(总场数超过15场)") lll["ch"].append("沙场新秀") if lll["all"]>=45 and "沙场老兵" not in lll["ch"]: print("恭喜获得称号:沙场老兵(总场数超过45场)") lll["ch"].append("沙场老兵") if lll["all"]>=100 and "沙场战神" not in lll["ch"]: print("恭喜获得称号:沙场战神(总场数超过100场)") lll["ch"].append("沙场战神") if lll["all"]>=500 and "沙场神仙" not in lll["ch"]: print("恭喜获得称号:沙场神仙(总场数超过500场)") lll["ch"].append("沙场神仙") if lll["jsfs"]>=20 and "医者仁心" not in lll["ch"]: print("恭喜获得称号:医者仁心(使用女巫救人超过20人)") lll["ch"].append("医者仁心") if lll["yy"]>=20 and "鹰眼" not in lll["ch"]: print("恭喜获得称号:鹰眼(识破狼人超过20人)") lll["ch"].append("鹰眼") with open("shengli.dat","w") as f_obj: json.dump(lll,f_obj) input("按回车继续")