电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python實現數字華容道

瀏覽:43日期:2022-06-23 09:16:48

制作Python數字華容道(可選擇關卡),供大家參考,具體內容如下

由于比賽需要,我這邊制作了一份數字華容道,內含有3,4,5階的數字華容道,開頭在殼窗口內選擇,運用了隨機數模塊(random)和圖形化用戶界面(tkinter)

下面是程序完整代碼

# coding:utf-8 #'''#============================================================作者:@Qss2021年3月20日起草2021年3月21日完工2021年3月23日一次優化完成2021年3月31日完成二次優化(關卡設計)二次優化待解決漏洞:設計關卡后窗口不能自動顯示,需手動切換2021年4月1日三次優化完成,成功解決二次優化bug#============================================================'''from random import * #導入隨機數模塊from tkinter import * #導入圖形化用戶界面模塊step_number = 0 #設置步數的變量,初始值為0difficulty = int(input(’請輸入數字華容道列數(3/4/5):’))def Button_Click_1(x,y): #按鈕點擊事件函數'''聲明空白按鈕行列號和步數的變量為全局變量'''global row_of_space global col_of_space global step_number'''判斷判斷點擊按鈕旁是否為空白按鈕,是則交換位置'''if abs(x-row_of_space) + abs(y-col_of_space) == 1: step_number += 1 #將步數賦值 label_step_number[’text’] = ’步數:’ + str(step_number) #將步數變量導入label控件 '''交換按鈕位置''' buttons[row_of_space,col_of_space][’text’] = buttons[x,y][’text’] buttons[x,y][’text’] = ’ ’ row_of_space = xcol_of_space = y n = 0 for row in range(3):for col in range(3): '''對比所有按鈕序列是否正確,不正確則跳出函數''' if buttons[row,col][’text’] != numbers[n]: return n += 1 '''所有按鈕判斷完畢贏得游戲勝利''' label_welcomes[’text’] = ’你贏了’def Button_Click_2(x,y): #按鈕點擊事件函數'''聲明空白按鈕行列號和步數的變量為全局變量'''global row_of_space global col_of_space global step_number'''判斷判斷點擊按鈕旁是否為空白按鈕,是則交換位置'''if abs(x-row_of_space) + abs(y-col_of_space) == 1: step_number += 1 #將步數賦值 label_step_number[’text’] = ’步數:’ + str(step_number) #將步數變量導入label控件 '''交換按鈕位置''' buttons[row_of_space,col_of_space][’text’] = buttons[x,y][’text’] buttons[x,y][’text’] = ’ ’ row_of_space = xcol_of_space = y n = 0 for row in range(4):for col in range(4): '''對比所有按鈕序列是否正確,不正確則跳出函數''' if buttons[row,col][’text’] != numbers[n]: return n += 1 '''所有按鈕判斷完畢贏得游戲勝利''' label_welcomes[’text’] = ’你贏了’def Button_Click_3(x,y): #按鈕點擊事件函數'''聲明空白按鈕行列號和步數的變量為全局變量'''global row_of_space global col_of_space global step_number'''判斷判斷點擊按鈕旁是否為空白按鈕,是則交換位置'''if abs(x-row_of_space) + abs(y-col_of_space) == 1: step_number += 1 #將步數賦值 label_step_number[’text’] = ’步數:’ + str(step_number) #將步數變量導入label控件 '''交換按鈕位置''' buttons[row_of_space,col_of_space][’text’] = buttons[x,y][’text’] buttons[x,y][’text’] = ’ ’ row_of_space = xcol_of_space = y n = 0 for row in range(5):for col in range(5): '''對比所有按鈕序列是否正確,不正確則跳出函數''' if buttons[row,col][’text’] != numbers[n]: return n += 1 '''所有按鈕判斷完畢贏得游戲勝利''' label_welcomes[’text’] = ’你贏了’'''創建華容道游戲窗口'''root = Tk() #創建圖形化用戶界面實例root.title(’數字華容道’) #設置窗口標題root.geometry('400x400') #將窗口大小設為高400寬400root.configure(bg = ’black’) #將窗口背景設為黑色root.resizable(width = False,height = False) #設置窗口為不可拉伸'''設置歡迎語的label控件'''label_welcomes = Label(root,text = ’歡迎來到數字華容道’,bg = ’black’,fg = ’red’,font = ('Arial',13)) #設置label控件的屬性label_welcomes.place(x = 20,y = 10,width = 250,height = 40) #設置label控件位置'''設置顯示操作方式的label控件'''label_operation = Label(root,text = ’單擊數字’,bg = ’black’,fg = ’white’,font = ('Arial',10))label_operation.place(x = 3,y = 40,width = 50,height = 30)label_operation_2 = Label(root,text = ’移動方塊’,bg = ’black’,fg = ’white’,font = ('Arial',10))label_operation_2.place(x = 3,y = 60,width = 50,height = 30)'''設置顯示步數的label控件'''label_step_number = Label(root,text = ’步數:’ + str(step_number),bg = ’black’,fg = ’yellow’,font = ('Arial',10))label_step_number.place(x = 3,y = 20,width = 50,height = 30)if difficulty == 3: root.attributes('-topmost', True) row_of_space = 0 #存放空白按鈕的行號 col_of_space = 0 #存放空白按鈕的列號 buttons = {} #存放數字按鈕的數組 numbers = [’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’ ’] #所有數字文本的列表 shuffle(numbers) #打亂數字列表中的數字順序 '''制造數字華容道方陣''' for row in range(3): for col in range(3): '''創建數字按鈕,并將行列號傳入該按鈕的點擊事件函數''' button = Button(root,command = lambda x = row,y = col:Button_Click_1(x,y),bg = ’black’,fg = ’green’,font = ('Arial',35)) buttons[row,col] = button #將按鈕導入數組 button[’text’] = numbers.pop() #設置按鈕上的文本 button.place(x = 60 + col * 60,y = 60 + row * 60,width = 50,height = 50) #設置數字按鈕大小 if button[’text’] == ’ ’:#判斷是否為空白按鈕,如果是,則記錄到空白按鈕行列號變量row_of_space = rowcol_of_space = col numbers = [’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’ ’] #還原數字列表 root.mainloop() #顯示窗口elif difficulty == 4: root.attributes('-topmost', True) row_of_space = 0 #存放空白按鈕的行號 col_of_space = 0 #存放空白按鈕的列號 buttons = {} #存放數字按鈕的數組 numbers = [’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’10’,’11’,’12’,’13’,’14’,’15’,’ ’] #所有數字文本的列表 shuffle(numbers) #打亂數字列表中的數字順序 '''制造數字華容道方陣''' for row in range(4): for col in range(4): '''創建數字按鈕,并將行列號傳入該按鈕的點擊事件函數''' button = Button(root,command = lambda x = row,y = col:Button_Click_2(x,y),bg = ’black’,fg = ’green’,font = ('Arial',35)) buttons[row,col] = button #將按鈕導入數組 button[’text’] = numbers.pop() #設置按鈕上的文本 button.place(x = 60 + col * 60,y = 60 + row * 60,width = 50,height = 50) #設置數字按鈕大小 if button[’text’] == ’ ’:#判斷是否為空白按鈕,如果是,則記錄到空白按鈕行列號變量row_of_space = rowcol_of_space = col numbers = [’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’10’,’11’,’12’,’13’,’14’,’15’,’ ’] #還原數字列表 root.mainloop() #顯示窗口elif difficulty == 5: root.attributes('-topmost', True) row_of_space = 0 #存放空白按鈕的行號 col_of_space = 0 #存放空白按鈕的列號 buttons = {} #存放數字按鈕的數組 numbers = [’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’10’,’11’,’12’,’13’,’14’,’15’,’16’,’17’,’18’,’19’,’20’,’21’,’22’,’23’,’24’,’ ’] #所有數字文本的列表 shuffle(numbers) #打亂數字列表中的數字順序 for row in range(5): for col in range(5): '''創建數字按鈕,并將行列號傳入該按鈕的點擊事件函數''' button = Button(root,command = lambda x = row,y = col:Button_Click_3(x,y),bg = ’black’,fg = ’green’,font = ('Arial',35)) buttons[row,col] = button #將按鈕導入數組 button[’text’] = numbers.pop() #設置按鈕上的文本 button.place(x = 60 + col * 60,y = 60 + row * 60,width = 50,height = 50) #設置數字按鈕大小 if button[’text’] == ’ ’:#判斷是否為空白按鈕,如果是,則記錄到空白按鈕行列號變量row_of_space = rowcol_of_space = col numbers = [’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,’10’,’11’,’12’,’13’,’14’,’15’,’16’,’17’,’18’,’19’,’20’,’21’,’22’,’23’,’24’,’ ’] #還原數字列表 root.mainloop() #顯示窗口else: print(’未完成此類關卡’)

下面是程序運行結果

三階華容道加勝利

python實現數字華容道

python實現數字華容道

四階華容道加勝利

python實現數字華容道

python實現數字華容道

五階就不傳了,都一樣

接下來說一下代碼原理

首先看下這一段

def Button_Click_1(x,y): #按鈕點擊事件函數'''聲明空白按鈕行列號和步數的變量為全局變量'''global row_of_space global col_of_space global step_number'''判斷判斷點擊按鈕旁是否為空白按鈕,是則交換位置'''if abs(x-row_of_space) + abs(y-col_of_space) == 1: step_number += 1 #將步數賦值 label_step_number[’text’] = ’步數:’ + str(step_number) #將步數變量導入label控件 '''交換按鈕位置''' buttons[row_of_space,col_of_space][’text’] = buttons[x,y][’text’] buttons[x,y][’text’] = ’ ’ row_of_space = xcol_of_space = y n = 0 for row in range(3):for col in range(3): '''對比所有按鈕序列是否正確,不正確則跳出函數''' if buttons[row,col][’text’] != numbers[n]: return n += 1 '''所有按鈕判斷完畢贏得游戲勝利''' label_welcomes[’text’] = ’你贏了’

這段是自定義了三個按鈕的點擊事件函數,不過三個都差不多,就是range后面的數字換了(應對不同的階級)。這個函數在注釋上已經寫明了,是判斷點擊按鈕旁是否有空白按鈕的,有則交換位置。后面運用循環嵌套對比序列中的數字和矩陣上的是否一一對應,不對應就跳出循環,對應則判定為贏得游戲。

'''創建華容道游戲窗口'''root = Tk() #創建圖形化用戶界面實例root.title(’數字華容道’) #設置窗口標題root.geometry('400x400') #將窗口大小設為高300寬300root.configure(bg = ’black’) #將窗口背景設為黑色root.resizable(width = False,height = False) #設置窗口為不可拉伸'''設置歡迎語的label控件'''label_welcomes = Label(root,text = ’歡迎來到數字華容道’,bg = ’black’,fg = ’red’,font = ('Arial',13)) #設置label控件的屬性label_welcomes.place(x = 20,y = 10,width = 250,height = 40) #設置label控件位置'''設置顯示操作方式的label控件'''label_operation = Label(root,text = ’單擊數字’,bg = ’black’,fg = ’white’,font = ('Arial',10))label_operation.place(x = 3,y = 40,width = 50,height = 30)label_operation_2 = Label(root,text = ’移動方塊’,bg = ’black’,fg = ’white’,font = ('Arial',10))label_operation_2.place(x = 3,y = 60,width = 50,height = 30)'''設置顯示步數的label控件'''label_step_number = Label(root,text = ’步數:’ + str(step_number),bg = ’black’,fg = ’yellow’,font = ('Arial',10))label_step_number.place(x = 3,y = 20,width = 50,height = 30)

這一段創建了圖形化用戶界面,具體每行代碼做什么用的注釋上我都標清楚了。

接著說一下,由于時間有限,只做了在殼窗口內選擇幾階級數字華容道的版本。是用輸入數字來判定的。其他的都是些簡單玩意,比如說按鈕創建,調用函數和循環嵌套,代碼的注釋上都寫了一些大概意思,有點tkinter基礎的應該都能看懂,不會的可以問我。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 石栏杆_青石栏杆_汉白玉栏杆_花岗岩栏杆 - 【石雕之乡】点石石雕石材厂 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 油漆辅料厂家_阴阳脚线_艺术漆厂家_内外墙涂料施工_乳胶漆专用防霉腻子粉_轻质粉刷石膏-魔法涂涂 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 | 除甲醛公司-甲醛检测治理-杭州创绿家环保科技有限公司-室内空气净化十大品牌 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 上海律师咨询_上海法律在线咨询免费_找对口律师上策法网-策法网 广东高华家具-公寓床|学生宿舍双层铁床厂家【质保十年】 | 首页 - 军军小站|张军博客| 东莞螺杆空压机_永磁变频空压机_节能空压机_空压机工厂批发_深圳螺杆空压机_广州螺杆空压机_东莞空压机_空压机批发_东莞空压机工厂批发_东莞市文颖设备科技有限公司 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 自动检重秤-动态称重机-重量分选秤-苏州金钻称重设备系统开发有限公司 | 河北码上网络科技|邯郸小程序开发|邯郸微信开发|邯郸网站建设 | 不锈钢轴流风机,不锈钢电机-许昌光维防爆电机有限公司(原许昌光维特种电机技术有限公司) | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 定制异形重型钢格栅板/钢格板_定做踏步板/排水沟盖板_钢格栅板批发厂家-河北圣墨金属制品有限公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 办公室家具公司_办公家具品牌厂家_森拉堡办公家具【官网】 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 济南拼接屏_山东液晶拼接屏_济南LED显示屏—维康国际官网 | 渗透仪-直剪仪-三轴仪|苏州昱创百科 | 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 地埋式垃圾站厂家【佳星环保】小区压缩垃圾中转站转运站 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 鲁网 - 山东省重点新闻网站,山东第一财经门户 | 湖南教师资格网-湖南教师资格证考试网 | 体检车_移动CT车_CT检查车_CT车_深圳市艾克瑞电气有限公司移动CT体检车厂家-深圳市艾克瑞电气有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | CNC机加工-数控加工-精密零件加工-ISO认证厂家-鑫创盟 | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 |