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

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

Python使用tkinter實現搖骰子小游戲功能的代碼

瀏覽:101日期:2022-07-19 08:22:50

TKinter

Python 的 GUI 庫非常多,之所以選擇 Tkinter,一是最為簡單,二是自帶庫,不需下載安裝,隨時使用,跨平臺兼容性非常好,三則是從需求出發的,Python 在實際應用中極少用于開發復雜的桌面應用,畢竟,Python 的各種 GUI 工具包都“一般得很”,不具備優勢。

貼吧看到的一個求助題,大致需求是:3個人搖骰子,每人搖3次,點數之和最大的獲勝,支持玩家名稱輸入。我覺得這個題目挺有意思的,做了個界面程序,歡迎大家交流指正~

#!usr/bin/env python# -*- coding: utf-8 -*-# author: ***# date: 2020/06/10from tkinter import *import tkinter as tkimport randomimport timefrom threading import Threadroot = Tk()root.geometry(’620x660’)root.title(’搖骰子’)sigpic = PhotoImage(file=’signature.png’)shake_cup = PhotoImage(file=’touzi/box.png’)crown = PhotoImage(file=’touzi/win.png’)readystate = 3playing = Falseused_name = set()result_dict = dict()remain = 3esv_A = StringVar()esv_B = StringVar()esv_C = StringVar()pi_list = list()for i in range(1, 7): pi = PhotoImage(file=r’touzi/t%s.png’ % i) pi_list.append(pi)def set_name(cw, ew, nw): global readystate entryV = ew.get() if entryV: if entryV in used_name: default = nw[’text’] nw.config(text='名稱已存在!') cw.config(state=tk.DISABLED) font_shake(nw, default) cw.config(state=tk.ACTIVE) else: used_name.add(entryV) nw.config(text=entryV) ew.config(state=tk.DISABLED) cw.config(state=tk.DISABLED) readystate -= 1 if readystate == 0: for i in 'ABC': eval(’play_btn_%s.config(state=tk.ACTIVE, text='第一次機會')’ % i)def throw_touzi(pw, rw, nw): global playing global remain if pw[’text’]=='第一次機會': playing = True pbStack.remove(pw) for widget in pbStack: widget.config(state=tk.DISABLED) pw.config(state=tk.DISABLED, text=’第二次機會’) elif pw[’text’]=='第二次機會': pw.config(state=tk.DISABLED, text=’第三次機會’) else: playing = False remain -= 1 pw.config(state=tk.DISABLED, text=’play’) thread = Thread(target=change_img, args=[pw, rw, nw]) thread.start()def change_img(pw, rw, nw): result_number = random.randint(1, 6) ranum_list = list() times = 5 while times: ranum = random.randint(1, 6) if ranum not in ranum_list: ranum_list.append(ranum) times = times - 1 for i in ranum_list: time.sleep(0.3) throw_label.config(image=pi_list[i-1]) time.sleep(0.3) throw_label.config(image=pi_list[result_number-1]) time.sleep(0.5) if rw[’text’] == '結果': rw[’text’] = str(result_number) else: rw[’text’] = str(rw[’text’]) + '+%s' % result_number time.sleep(0.5) rw[’text’] = eval(rw[’text’]) if pw[’text’] != 'play': pw.config(state=tk.ACTIVE) if playing == False: result_dict[nw[’text’]] = rw[’text’] for widget in pbStack: widget.config(state=tk.ACTIVE) if not remain: result_list = sorted(result_dict.items(), reverse=True, key=lambda rt: rt[1]) if result_list[0][1] == result_list[1][1]: if result_list[1][1] == result_list[2][1]: throw_winner[’text’] = '>> 平局 <<' else: winner = result_list[0][0] + ', ' + result_list[1][0] throw_winner[’text’] = 'Winner: %s' % winner else: winner = result_list[0][0] throw_winner[’text’] = 'Winner: %s' % winner throw_label[’image’] = crown reset_btn.config(state=tk.ACTIVE, text=’重新開始’, relief=’raised’)def font_shake(nw, default): nw.config(foreground=’red’) for i in range(5): if i%2 == 0: time.sleep(0.05) nw.config(anchor=’n’) else: time.sleep(0.05) nw.config(anchor=’s’) root.update() nw.config(anchor=’c’) root.update() time.sleep(0.5) nw.config(text=default, foreground=’black’)def restart(): global readystate, used_name, result_dict, remain, pbStack throw_label[’image’] = shake_cup readystate = 3 used_name = set() result_dict = dict() remain = 3 pbStack = {play_btn_A, play_btn_B, play_btn_C} reset_btn.config(state=tk.DISABLED, relief=’flat’, text=’’) for i in 'ABC': eval(’name_%s.config(text='player %s')’ % (i, i)) eval(’entry_%s.config(state=tk.NORMAL)’ % i) eval(’esv_%s.set('')’ % i) eval(’confirm_btn_%s.config(state=tk.ACTIVE)’ % i) eval(’result_%s.config(text='結果')’ % i) throw_winner[’text’] = ''box_frame_A = Frame(root)box_frame_A.grid(column=1, ipadx=3)name_A = Label(box_frame_A, text=’player A’, height=2)name_A.pack()signature_A = Label(box_frame_A, image=sigpic)signature_A.pack()play_btn_A = Button(box_frame_A, text=’play’, command=lambda : throw_touzi(play_btn_A, result_A, name_A))play_btn_A.pack(side=BOTTOM, pady=3)result_A = Label(box_frame_A, text=’結果’)result_A.pack(side=BOTTOM)entry_A = Entry(box_frame_A, textvariable=esv_A)entry_A.pack(side=LEFT, padx=5)confirm_btn_A = Button(box_frame_A, text=’確定’, command=lambda : set_name(confirm_btn_A, entry_A, name_A))confirm_btn_A.pack(side=LEFT)center_frame = Frame(root)center_frame.grid(row=1, column=1, pady=20)throw_label = Label(center_frame, image=shake_cup)throw_label.pack()throw_winner = Label(center_frame)throw_winner.pack()reset_btn = Button(center_frame, state=tk.DISABLED, relief=’flat’, command=restart)reset_btn.pack()box_frame_B = Frame(root)box_frame_B.grid(row=3, padx=10)name_B = Label(box_frame_B, text=’player B’, height=2)name_B.pack()signature_B = Label(box_frame_B, image=sigpic)signature_B.pack()play_btn_B = Button(box_frame_B, text=’play’, command=lambda : throw_touzi(play_btn_B, result_B, name_B))play_btn_B.pack(side=BOTTOM)result_B = Label(box_frame_B, text=’結果’)result_B.pack(side=BOTTOM)entry_B = Entry(box_frame_B, textvariable=esv_B)entry_B.pack(side=LEFT, padx=5)confirm_btn_B = Button(box_frame_B, text=’確定’, command=lambda : set_name(confirm_btn_B, entry_B, name_B))confirm_btn_B.pack(side=LEFT)box_frame_C = Frame(root)box_frame_C.grid(row=3, column=2, padx=10)name_C = Label(box_frame_C, text=’player C’, height=2)name_C.pack()signature_C = Label(box_frame_C, image=sigpic)signature_C.pack()play_btn_C = Button(box_frame_C, text=’play’, command=lambda : throw_touzi(play_btn_C, result_C, name_C))play_btn_C.pack(side=BOTTOM)result_C = Label(box_frame_C, text=’結果’)result_C.pack(side=BOTTOM)entry_C = Entry(box_frame_C, textvariable=esv_C)entry_C.pack(side=LEFT, padx=5)confirm_btn_C = Button(box_frame_C, text=’確定’, command=lambda : set_name(confirm_btn_C, entry_C, name_C))confirm_btn_C.pack(side=LEFT)if __name__ == ’__main__’: pbStack = {play_btn_A, play_btn_B, play_btn_C} for i in 'ABC': eval(’play_btn_%s.config(state=tk.DISABLED)’ % i) root.mainloop()

程序界面截圖:

1.初始界面

Python使用tkinter實現搖骰子小游戲功能的代碼

2.就緒界面

Python使用tkinter實現搖骰子小游戲功能的代碼

3.結果界面

Python使用tkinter實現搖骰子小游戲功能的代碼

總結

到此這篇關于Python使用tkinter實現搖骰子小游戲功能的代碼的文章就介紹到這了,更多相關Python實現搖骰子小游戲內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 香蕉筛|直线|等厚|弧形|振动筛|香蕉筛厂家-洛阳隆中重工 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 山东柳店新能源科技有限公司 | 钛板_钛管_钛棒_钛盘管-无锡市盛钛科技有限公司 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 查分易-成绩发送平台官网 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 注塑机-压铸机-塑料注塑机-卧式注塑机-高速注塑机-单缸注塑机厂家-广东联升精密智能装备科技有限公司 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 山东艾德实业有限公司| 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 361°官方网站 | 环氧树脂地坪漆_济宁市新天地漆业有限公司 | 缝纫客| 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 广州展台特装搭建商|特装展位设计搭建|展会特装搭建|特装展台制作设计|展览特装公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 氟塑料磁力泵-不锈钢离心泵-耐腐蚀化工泵厂家「皖金泵阀」 | 垃圾清运公司_环卫保洁公司_市政道路保洁公司-华富环境 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 耐压仪-高压耐压仪|徐吉电气 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 创客匠人-让IP变现不走弯路| 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 400电话_400电话申请_866元/年_【400电话官方业务办理】-俏号网 3dmax渲染-效果图渲染-影视动画渲染-北京快渲科技有限公司 | 电动卫生级调节阀,电动防爆球阀,电动软密封蝶阀,气动高压球阀,气动对夹蝶阀,气动V型调节球阀-上海川沪阀门有限公司 |