39條Python語句實現(xiàn)數(shù)字華容道
原以為用Python編寫“數(shù)字華容道”游戲可能需要很多代碼,完成后發(fā)現(xiàn)只用了39條語句,可見Python的強(qiáng)大。
編程的思路如下,使用9個tkinter庫的Button按鈕,按3行3列排列,每個按鈕的標(biāo)題是1到8和空白中的一個,初始標(biāo)題所顯示的數(shù)字和空白隨機(jī)排列。當(dāng)一個按鈕被單擊后,調(diào)用事件函數(shù),該函數(shù)有兩個參數(shù),該按鈕的所在位置的行列號。在函數(shù)中首先判斷該按鈕(行號為x,列號為y)是否和標(biāo)題為空白的按鈕(行號為x0,列號為y0)相鄰,相鄰條件是(x-x0)絕對值+(y-y0)絕對值=1,如相鄰則兩個按鈕的標(biāo)題交換,就像標(biāo)題不為空白的按鈕移到標(biāo)題為空白的按鈕位置。然后檢查所有按鈕標(biāo)題是否第1行為1、2、3,第2行為4、5、6,第3行為7、8、空白排列。檢查方法是按第1、2、3行順序,每行從左到右所有按鈕標(biāo)題和列表list['12345678 ']每一項值逐一比較。下邊是所有代碼。應(yīng)再加一重玩按鈕,單擊該按鈕實現(xiàn)標(biāo)題所顯示的數(shù)字和空白隨機(jī)重新排列。改成4行4列或5行5列的數(shù)字華容道也是不困難的。
import random from tkinter import Tk,Button,Label def btnClick(x,y): #所有按鈕的事件函數(shù),有兩個參數(shù),被點擊按鈕所在位置行列號 global row_of_space #說明變量是全局變量,即變量在主程序中定義的,必加否則報錯 global col_of_space #在函數(shù)內(nèi)為變量賦值,默認(rèn)是局部變量,這兩個變量是空白按鈕的行列號 if abs(x-row_of_space)+abs(y-col_of_space)==1: #判斷被單擊按鈕是否和空白按鈕相鄰 buttons[row_of_space,col_of_space]['text']=buttons[x,y]['text'] buttons[x,y]['text']=' ' #如相鄰,被點擊按鈕和空白按鈕交換標(biāo)題 row_of_space=x #現(xiàn)在被點擊按鈕標(biāo)題變?yōu)榭瞻祝辛斜槐4? col_of_space=y n=0 #按第1、2、3行順序,每行從左到右所有按鈕標(biāo)題和列表numbers每一項值逐一比較 for row in range(3): for col in range(3): if buttons[row,col]['text']!=numbers[n]: #有1項不等,表示排列不正確退出 return n+=1 label['text']='你贏了' #到這里,說明排列正確,玩家贏了,修改Label標(biāo)題 root = Tk() #初始化窗口 root.title('數(shù)字華容道') #窗口標(biāo)題 root.geometry("300x250+200+20") #窗口寬300,高=300,窗口左上點離屏幕左邊界200,離屏幕上邊界距離20。 root.resizable(width=False,height=False) #設(shè)置窗口是否可變,寬不可變,高不可變,默認(rèn)為True label=Label(root,text='單擊數(shù)字移動方塊',fg='red',font=("Arial",15)) label.place(x=20,y=10,width=250,height=40) row_of_space=0 #保存標(biāo)題空白按鈕的行號 col_of_space=0 #保存標(biāo)題空白按鈕的行號 buttons={} #字典 numbers=list('12345678 ') #列表,所有按鈕標(biāo)題可顯示的數(shù)字1到8和空白 random.shuffle(numbers) #使列表數(shù)字和空白隨機(jī)排列 for row in range(3): #row=行,0,1,2 for col in range(3): #col=列,0,1,2,參見博文:python3.8的tkinter按鈕事件函數(shù)實現(xiàn)多個參數(shù) button=Button(root,command=lambda x=row,y=col:btnClick(x,y),fg='red',font=("Arial",35)) buttons[row,col]=button button['text']=numbers.pop() #將列表numbers最后一項作為按鈕標(biāo)題并將列表最后1項刪除 button.place(x=60+col*60,y=60+row*60,width=50,height=50) if button['text']==' ': #記住空白按鈕所在位置的行列號 row_of_space=row col_of_space=col numbers=list('12345678 ') root.mainloop() #進(jìn)入循環(huán),運行窗口
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 淺析Python 條件控制語句
- Python基礎(chǔ)之條件控制操作示例【if語句】
- python基礎(chǔ)詳解之if循環(huán)語句
- python基礎(chǔ)之while循環(huán)語句的使用
- 在python代碼中加入環(huán)境變量的語句操作
- Python使用sql語句對mysql數(shù)據(jù)庫多條件模糊查詢的思路詳解
- Python基礎(chǔ)教程之循環(huán)語句(for、while和嵌套循環(huán))
- 解決python mysql insert語句的問題
- python自動生成sql語句的腳本
- Python基礎(chǔ)學(xué)習(xí)之條件控制語句小結(jié)
相關(guān)文章
python+unittest+requests實現(xiàn)接口自動化的方法
這篇文章主要介紹了python+unittest+requests實現(xiàn)接口自動化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-11-11解決python調(diào)用自己文件函數(shù)/執(zhí)行函數(shù)找不到包問題
這篇文章主要介紹了解決python調(diào)用自己文件函數(shù)/執(zhí)行函數(shù)找不到包問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python PyQt5實現(xiàn)的簡易計算器功能示例
這篇文章主要介紹了Python PyQt5實現(xiàn)的簡易計算器功能,涉及Python PyQt5事件響應(yīng)及數(shù)學(xué)運算等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08關(guān)于python與opc ua Expert endpoint連接的問題
這篇文章主要介紹了關(guān)于python與opc ua Expert endpoint連接的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02python 百度aip實現(xiàn)文字識別的實現(xiàn)示例
百度aip將圖片或掃描件中的文字識別成可編輯的文本,本文主要介紹了python 百度aip實現(xiàn)文字識別,具有一定的參考價值,感興趣的可以了解一下2021-08-08python中關(guān)于property的最詳細(xì)使用方法
這篇文章主要介紹了python中關(guān)于property的最詳細(xì)使用方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04