1. 程式人生 > >python趣味入門——寫幾個常玩的遊戲

python趣味入門——寫幾個常玩的遊戲

文件介紹

利用python寫“猜數字”,“猜詞語”,“誰是臥底”這三個遊戲,從而快速掌握python程式設計的入門知識,包括python語法/列表/元組/字典/流程控制/庫函式等等。

環境引數

linux平臺,python 3.4。需要在linux中把python 3.4編譯一下,這樣編寫python程式時儲存為.py格式的檔案並新增執行許可權再終端執行即可(原理跟shell指令碼相同),非常方便。

ps:貼出來的python程式程式碼在windows中也相容,只不過執行方式不是命令列,而是要通過python軟體。python軟體可以上官網下載安裝點選開啟連結  ,在學習的時候,可以直接在python軟體上面輸入python語句即可列印結果,也就是說python無需編譯即可執行,很多人也稱之為“指令碼”語言。

設計實現

猜數字

很多人在聚餐時都玩過猜數字遊戲,由某人隨機出一個指定範圍內的數,然後其他人一個一個猜,猜的過程中區間不斷縮小,直到猜中為止。

這裡的猜數字遊戲就是用程式來代替那個出數字的人,程式演算法設計為:

1.輸入數字區間--->2.系統產生區間內的隨機數--->3.玩家輸入自己猜的數字--->4.比較玩家猜的與答案的高低並提示--->5.未猜中則回到3,猜中則提示猜次數

程式碼很少,如下所示:

#!/usr/local/bin/python3

import random

bot=int(input('Set range bottom\n'))
top=int(input('Set range top\n'))
rand=random.randint(bot,top)
print ('Random number in ['+str(bot)+','+str(top)+'] generated!')
num=int(input('###Guess the number###\n'))
cnt=1
while (num!=rand):
	if (num<rand):
		print('*_* Lower than the answer')
	else:
		print('T_T Higher than the answer')
	num=int(input('###Guess the number###\n'))
	cnt=cnt+1
print('^_^ You get the answer with [%d] times'%cnt)
第一行是要讓linux系統知道這是python3程式,random是產生隨機數的庫函式,要注意的是python對格式要求很嚴格,因為它不用通過{}而是通過縮排量判斷流程。
通過這個可以掌握基本的語法和編寫規則了,下面再試試有點難度的,用到片語和迴圈控制等知識。

猜詞語

電視節目中的”你來比劃我來猜“大家應該都看過,而且很多人也玩過,規則就是一個人看詞語比劃相應動作和說一些提示,另一個人看不到詞語要通過比劃的動作猜出來,猜的過程中主持人判斷是否符合規則。

某一組玩家猜詞語的演算法設計為:

1.開始計時--->2.猜詞語--->3.答對則正確數加1並回到2,要跳過或犯規了則直接回到2,超時了直接跳到3--->3.迴圈10次後或時間結束後統計答對的題數

有num組玩家就進行以上流程的num次迴圈,當然也要準備x組詞語,因為每組玩家猜的詞語是不同的。

程式碼量不大,如下所示:

#!/usr/local/bin/python3

import time
num = int(input('有多少組玩家\n'))
guessWord = []
correct = []
#定義列表,num+10是不想讓guessWord下標不合法
for i in range(0,num+10):
	guessWord.append(0)
	correct.append(0)
wordNum=10
guessWord[0] = ['打情罵俏','海綿寶寶','嬌媚','金雞獨立','狼吞虎嚥','睡眼朦朧','鶴立雞群','手舞足蹈','卓別林','穿越火線']
guessWord[1] = ['眉飛色舞','英雄聯盟','扭秧歌','偷看美女','大搖大擺','回眸一笑','市場營銷','大眼瞪小眼','自戀','處女座']
guessWord[2] = ['狗急跳牆','捧腹大笑','目不轉睛','愁眉苦臉','左顧右盼','宮保雞丁','升國旗','暗戀','臭襪子','趁火打劫']

flag='n'

for i in range(0,num):
	start = time.time()
	for k in range(0,wordNum):
		#顯示詞語
		print (('%d.%s')%(k+1,guessWord[i][k]))
	
		flag = input('請答題,答對請輸入y,跳過請輸入任意鍵')
		end = time.time()
		sec = end-start
		#統計用時
		if (110<=sec<=120):
			print ('還有10秒鐘')
		if (sec>=120):
			print ('時間到!遊戲結束')
			break
		
		if (flag=='y'):
			correct[i]=correct[i]+1
			continue
		else:
			continue
	str_temp=('第%d組答對數目:%d') % (i+1,correct[i])	
	print (str_temp)
	
其實詞語可以做成從獨立的檔案中讀入的方式,這樣方便更新和管理,下面就介紹一種用“字典”的方式來獲得“誰是臥底”的臥底詞。

誰是臥底

誰是臥底也是深受很多人喜歡的遊戲,起碼要三人以上才能玩,大致分為幾個階段:1.分配平民詞語和臥底詞語--->2.玩家依次發言--->3.根據發言投票認為誰是臥底--->4.得到票數最多的玩家出局--->5.出局玩家剛好是臥底則平民勝利,如果出局玩家是平民則被冤死並繼續第2步,當剩下的平民只有1個時臥底勝利。

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

程式設計思想:輸入玩家數num,玩家編號為0~num-1,然後定義三個含有num個元素的列表:詞語列表,計算玩家票數的列表,死亡玩家的列表。列表下標從0~num-1,隨機產生該區間的數x,代表x號玩家是臥底,然後分配臥底詞和平民詞。注意,提示幾號玩家是臥底或冤死的時候,要將列印資訊時候的下標加1,比如下標數0代表的其實是1號玩家。在生活中,沒多少人會習慣說自己是“第0個人”這種說法吧,除了程式設計師- -;

在每輪遊戲中,依次進行發言,投票,票數最多的玩家出局(出現相同票數則重新發言),出局玩家歸入死亡玩家列表。然後開始下一輪。

那麼,如果有num位玩家,則最多有多少輪遊戲結束?因為進行到只有2位玩家遊戲就結束了,所以答案是num-2輪!也就是說上述流程要迴圈num-2次。

程式設計思想定了就可以敲程式碼了,程式程式碼如下:

#!/usr/local/bin/python3

import random
from spyword import spyword

num=int(input('請輸入玩家數(至少為3)\n'))
#臥底玩家
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是一門簡潔高效,通俗易懂的高階動態程式語言;很多人也稱之為“膠水語言”,在接到大專案時往往用python寫好主體框架,然後在一些特定模組再用java/js/C++之類的語言實現特定需求。掌握python並不難,通過這篇部落格講到的三個小遊戲,希望您能發現python的樂趣,快速找到python程式設計的竅門。