天天看點

Python版"狼人殺":帶你解密卧底代碼

前言

随之而起的各大狼人殺APP,則利用線上更高效的陌生人組局和多樣的休閑場景,将社交做到了極緻。以假面科技研發的首款狼人殺APP為例,其遊戲模式隻是APP中為社互動動服務的敲門磚,使用者基本都是在快速體驗狼人殺遊戲後,将遊戲關系沉澱為社交關系展開互撩。

這種通過狼人殺來APP實作社交目的的現象,在貼吧中尤為壯觀。打開狼人殺APP貼吧,首頁清一色公會招人、加好友處cp之類帶有社交目的性的文章,也有不少回帖互動,說明狼人殺已成為使用者進行社交的平台。

本節為大家解密一下一個最簡單的"狼人殺" 代碼,隻需要3個以上就可以玩。

大緻分為幾個階段:

1.配置設定平民詞語和卧底詞語

2.玩家依次發言

3.根據發言投票認為誰是卧底

4.得到票數最多的玩家出局

5.出局玩家剛好是卧底則平民勝利

6.如果出局玩家是平民則被冤死并繼續第2步

7.當剩下的平民隻有1個時卧底勝利。

Python版"狼人殺":帶你解密卧底代碼

特殊情況是,出現兩名或以上的玩家票數相同,則相同票數的玩家重新發言,然後全體針對這幾個玩家投票。

下面來看下代碼吧

#!/usr/local/bin/python3

import random
from spyword import spyword
 
num=int(input('請輸入玩家數(至少為3)
'))
#卧底玩家
spy=random.randint(0,num-1)
 
#随機産生詞語 定義詞語清單 計算玩家票數的清單 統計死亡玩家的清單
list_rand=spyword.popitem()
word=[]
cnt=[]
dead=[]
 
#給三個清單指派
for i in range(0,num):
    word.append('a')
    cnt.append(0)
    dead.append(num+2)
 
#給玩家詞語 其中print是調試用的,sanmeVote是出現相同票數的标志,spyWin是卧底勝利的判決條件
for i in range(0,num):
    if (i==spy):
        word[i]=str(list_rand[1])
    else:
        word[i]=str(list_rand[0])
    print (word[i])
sameVote=0
spyWin=0
#遊戲開始
for x in range(0,num-1):
    for k in range(0,num):
        if ((k not in dead) & (sameVote==0)):
            print ('%d号玩家發言時間'%(k+1))
    print ('發言環節結束')
        
    #将各位玩家的票數置0
    for j in range(0,num):
        if (j not in dead):
            cnt[j]=0
    
    for j in range(0,num):
        if (j not in dead):
            vote2p=int(input('請%d号玩家投票'%(j+1)))-1
            cnt[vote2p]=cnt[vote2p]+1
            sameVote=0
 
    for y in range(0,num):
        if((cnt[y]==max(cnt)) & (y!=cnt.index(max(cnt)))):
            print ('不止一位玩家得到最高票數,請這些玩家重新發言')
            sameVote=1
    
    if (sameVote==0):
        dead[x]=cnt.index(max(cnt))
        if (dead[x]==spy):
            print ('卧底得到最多票數,遊戲結束')
            spyWin=1
            break
        print ('%d号玩家被冤死!'%(dead[x]+1))
        
#遊戲結束
if(spyWin==0):
    print ('隻剩兩名玩家,卧底勝利!')
    ```
有一行代碼是
``
from spyword import spyword
           

這裡spyword是我自己定義的卧底詞字典,運作時把這個檔案放在python的工作目錄下,就可以讓python程式調用該字典了。要檢視python工作目錄,你需要運作python後輸入

>>> import os
>>> os.getcwd()
           

當然你也可以更改python工作目錄。

小編推薦一個學python的學習qun 740322234

無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙内有開發工具,很多幹貨和技術資料分享!

Python版"狼人殺":帶你解密卧底代碼

程式設計思想

輸入玩家數量num,玩家數量為0-num-1,然後定義包含num元素的三個清單:單詞清單、玩家投票清單、死亡玩家清單。清單的下标從0到num-1,随機生成區域中的數字x,表示X的玩家是卧底,然後配置設定卧底詞和便民詞。請注意,當提示卧底或被錯誤殺死的玩家時,将列印資訊時的時間下标添加到1,例如,0的下标表示實際上是1号的玩家。在生活中,很少有人習慣于說他們是“第0個人”,除了程式員。

在遊戲的每一輪中,擁有最多票數的玩家将被淘汰(同樣的票數将被重新說出),退出的玩家将被列入死亡玩家名單。然後開始下一輪。

是以,如果有num玩家,遊戲最多結束幾輪?答案是num-2,因為隻有兩個玩家的遊戲結束了。也就是說,上面的過程需要循環num-2次。

總結

Python是一種簡潔、高效、易于了解的進階動态程式設計語言,許多人也把它稱為“膠水語言”。在接收大型項目時,通常使用Python來編寫主架構,然後在一些特定的子產品中使用Java/JS/C++來實作特定的需求。掌握python并不難。通過本節中提到的這個遊戲,我希望您能找到Python的樂趣,并快速找到Python程式設計的訣竅。

素材來源于網絡,侵删