Python写“谁是卧底”游戏

谁是卧底是现实中一款特别火的烧脑游戏。今天,我就用Python模拟一下

话不多说,上代码!

(虽然代码质量很低)

import time,random,os

#初始化列表和变量

while True:
    persons=int(input('请输入游玩人数[3人及以上]'))
    undercover=int(input('请输入卧底人数'))
    if persons>=3 and undercover<persons-undercover:
        break
    else:
        print('输入错误,请重新输入')
word=[('苹果','桃子'),('可乐','雪碧'),('空调','风扇'),('Python','C++'),('地铁','高铁')]
iden=[]
iden_dict={}
dictionary={}
iden=['平民']*(persons-undercover)+['卧底']*undercover
state_list=[]
for i in range(persons):
    state_list.append('存活')
vote_state=input('是否要开启匿名投票?[是/否]')

#产生随机子数组

num=len(word)
sn=random.randint(0,num-1)
death=0

#输出身份和随机词

string=input( '按回车键开始随机身份')
for i in range(persons):
    state_list.append('存活')
    identity=random.choice(iden)
    if identity=='卧底':
        randword=word[sn][1]
        print(f'{i+1}号玩家的身份是{identity},随机词是{randword}')
        iden_dict[identity]=i+1
        dictionary[i+1]=identity
        time.sleep(2)
        iden.pop(persons-i-1)
        os.system('cls')
    elif identity=='平民':
        randword=word[sn][0]
        print(f'{i+1}号玩家的身份是{identity},随机词是{randword}')
        iden_dict[identity]=i+1
        dictionary[i+1]=identity
        time.sleep(2)
        iden.pop(0)
        os.system('cls')
    if i<persons-1:
        print('请下一位玩家查看身份' )
        time.sleep(2)
        os.system('cls')

#游戏主循环

while True:
    vote_list=[]
    for i in range(persons-death):
        vote_list.append(0)
    if undercover==0:
        print('平民胜利')
        os.system('pause')
        break
    elif death>=persons-undercover-1:
        b=iden_dict['卧底']
        print(f'卧底胜利,{b}号玩家是卧底')
        os.system('pause')
        break
    number=1
    for i in range(persons):
        print(f'{number}号玩家    {state_list[i]}')
        number+=1

    #讨论必要条件

    for i in range(persons):
        if state_list[i]=='存活':
            print(f'请{i+1}号玩家打出自己随机词的描述')
            string=input()
        else:
            continue
    print('\n')
    print('讨论时间(按下回车停止)')
    a=input()
    print('现在,开始投票')

    #投票

    if vote_state=='是':
        for i in range(persons):
            if state_list[i]=='存活':
                vote=int(input(f'请{i+1}号玩家投票(0表示弃票,1表示1号玩家,2表示2号玩家……)'))
                os.system('cls')
                if vote==0:
                    continue
                elif state_list[vote-1]=='死亡':
                    print('不能投给已死亡玩家,此票无效!')
                    continue
                else:
                    vote_list[vote-1-death]+=1
                    continue
    else:
        for i in range(persons):
            if state_list[i]=='存活':
                vote=int(input(f'请{i+1}号玩家投票(0表示弃票,1表示1号玩家,2表示2号玩家……)'))
                if vote==0:
                    continue
                elif state_list[vote-1]=='死亡':
                    print('不能投给已死亡玩家,此票无效!')
                    continue
                else:
                    vote_list[vote-1-death]+=1
                    continue
    max_value = max(vote_list)
    max_index = vote_list.index(max_value)

    #判断淘汰玩家

    v=sorted(vote_list,reverse=True)
    no_vote=0
    for i in vote_list:
        if i==0:
            no_vote+=1
    if no_vote==persons:
        print('没有玩家被淘汰(弃票)')
        time.sleep(2)
        os.system('cls')
        continue
    elif v[0]==v[1]:
        number=0
        for i in range(persons):
            if state_list[i]=='存活':
                print(f'{number+1}号玩家被投了{vote_list[number]}票')
                time.sleep(1)
                number+=1
            else:
                continue
        print('没有玩家被淘汰(平票)')
        time.sleep(2)
        os.system('cls')
        continue
    else:
        number=0
        for i in range(persons):
            if state_list[i]=='存活':
                print(f'{number+1+death}号玩家被投了{vote_list[number]}票')
                time.sleep(1)
                number+=1
            else:
                continue
        print(f'{max_index+1+death}号玩家被淘汰')
        time.sleep(2)
    state_list.pop(max_index+death)
    state_list.insert(max_index+death,'死亡') 
    if dictionary[max_index+1+death]=='卧底':
        undercover-=1
        print(f'{max_index+1+death}号玩家是卧底(还有{undercover}名卧底)')
    else:
        print(f'{max_index+1+death}号玩家是平民(还有{undercover}名卧底)')
    death+=1
    time.sleep(3)
    os.system('cls')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值