濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道

39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道

熱門標(biāo)簽:淮安呼叫中心外呼系統(tǒng)如何 京華圖書館地圖標(biāo)注 看懂地圖標(biāo)注方法 蘇州人工外呼系統(tǒng)軟件 佛山通用400電話申請(qǐng) 打印谷歌地圖標(biāo)注 電話外呼系統(tǒng)招商代理 廣東旅游地圖標(biāo)注 電話機(jī)器人貸款詐騙

原以為用Python編寫“數(shù)字華容道”游戲可能需要很多代碼,完成后發(fā)現(xiàn)只用了39條語(yǔ)句,可見Python的強(qiáng)大。

編程的思路如下,使用9個(gè)tkinter庫(kù)的Button按鈕,按3行3列排列,每個(gè)按鈕的標(biāo)題是1到8和空白中的一個(gè),初始標(biāo)題所顯示的數(shù)字和空白隨機(jī)排列。當(dāng)一個(gè)按鈕被單擊后,調(diào)用事件函數(shù),該函數(shù)有兩個(gè)參數(shù),該按鈕的所在位置的行列號(hào)。在函數(shù)中首先判斷該按鈕(行號(hào)為x,列號(hào)為y)是否和標(biāo)題為空白的按鈕(行號(hào)為x0,列號(hào)為y0)相鄰,相鄰條件是(x-x0)絕對(duì)值+(y-y0)絕對(duì)值=1,如相鄰則兩個(gè)按鈕的標(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 ']每一項(xiàng)值逐一比較。下邊是所有代碼。應(yīng)再加一重玩按鈕,單擊該按鈕實(shí)現(xiàn)標(biāo)題所顯示的數(shù)字和空白隨機(jī)重新排列。改成4行4列或5行5列的數(shù)字華容道也是不困難的。

import random
from tkinter import Tk,Button,Label
def btnClick(x,y):       #所有按鈕的事件函數(shù),有兩個(gè)參數(shù),被點(diǎn)擊按鈕所在位置行列號(hào)
    global row_of_space  #說明變量是全局變量,即變量在主程序中定義的,必加否則報(bào)錯(cuò)
    global col_of_space  #在函數(shù)內(nèi)為變量賦值,默認(rèn)是局部變量,這兩個(gè)變量是空白按鈕的行列號(hào)  
    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']=' '  #如相鄰,被點(diǎn)擊按鈕和空白按鈕交換標(biāo)題
        row_of_space=x            #現(xiàn)在被點(diǎn)擊按鈕標(biāo)題變?yōu)榭瞻祝辛斜槐4?
        col_of_space=y
        n=0   #按第1、2、3行順序,每行從左到右所有按鈕標(biāo)題和列表numbers每一項(xiàng)值逐一比較
        for row in range(3):
            for col in range(3):
                if buttons[row,col]['text']!=numbers[n]:  #有1項(xiàng)不等,表示排列不正確退出
                    return
                n+=1
        label['text']='你贏了' #到這里,說明排列正確,玩家贏了,修改Label標(biāo)題
root = Tk()  #初始化窗口
root.title('數(shù)字華容道') #窗口標(biāo)題
root.geometry("300x250+200+20") #窗口寬300,高=300,窗口左上點(diǎn)離屏幕左邊界200,離屏幕上邊界距離20。
root.resizable(width=False,height=False) #設(shè)置窗口是否可變,寬不可變,高不可變,默認(rèn)為True
label=Label(root,text='單擊數(shù)字移動(dòng)方塊',fg='red',font=("Arial",15))
label.place(x=20,y=10,width=250,height=40)
row_of_space=0  #保存標(biāo)題空白按鈕的行號(hào)
col_of_space=0  #保存標(biāo)題空白按鈕的行號(hà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ù)實(shí)現(xiàn)多個(gè)參數(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最后一項(xiàng)作為按鈕標(biāo)題并將列表最后1項(xiàng)刪除
        button.place(x=60+col*60,y=60+row*60,width=50,height=50)
        if button['text']==' ':         #記住空白按鈕所在位置的行列號(hào)
            row_of_space=row
            col_of_space=col
numbers=list('12345678 ')
root.mainloop() #進(jìn)入循環(huán),運(yùn)行窗口

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 淺析Python 條件控制語(yǔ)句
  • Python基礎(chǔ)之條件控制操作示例【if語(yǔ)句】
  • python基礎(chǔ)詳解之if循環(huán)語(yǔ)句
  • python基礎(chǔ)之while循環(huán)語(yǔ)句的使用
  • 在python代碼中加入環(huán)境變量的語(yǔ)句操作
  • Python使用sql語(yǔ)句對(duì)mysql數(shù)據(jù)庫(kù)多條件模糊查詢的思路詳解
  • Python基礎(chǔ)教程之循環(huán)語(yǔ)句(for、while和嵌套循環(huán))
  • 解決python mysql insert語(yǔ)句的問題
  • python自動(dòng)生成sql語(yǔ)句的腳本
  • Python基礎(chǔ)學(xué)習(xí)之條件控制語(yǔ)句小結(jié)

標(biāo)簽:江蘇 呼和浩特 駐馬店 股票 湖州 衡水 中山 畢節(jié)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道》,本文關(guān)鍵詞  39條,Python,語(yǔ)句,實(shí)現(xiàn),數(shù)字,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    永登县| 德化县| 南陵县| 四川省| 秦安县| 嵊州市| 教育| 芒康县| 姚安县| 东方市| 崇明县| 昭平县| 大兴区| 大丰市| 盐池县| 海盐县| 泾阳县| 交城县| 临澧县| 娱乐| 苏尼特左旗| 苗栗市| 外汇| 太保市| 西宁市| 噶尔县| 白银市| 吉木萨尔县| 四子王旗| 山东省| 会昌县| 苍南县| 嫩江县| 晋城| 荔波县| 乌拉特后旗| 行唐县| 白山市| 安庆市| 横峰县| 织金县|