python可视化窗口制作一个摇骰子游戏_Python-使用tkinter实现的摇骰子小游戏

1 #!usr/bin/env python

2 #-*- coding: utf-8 -*-

3

4 #author: ***

5 #date: 2020/06/10

6

7 from tkinter import *

8 importtkinter as tk9 importrandom10 importtime11 from threading importThread12

13 root =Tk()14 root.geometry(‘620x660‘)15 root.title(‘摇骰子‘)16 sigpic = PhotoImage(file=‘signature.png‘)17 shake_cup = PhotoImage(file=‘touzi/box.png‘)18 crown = PhotoImage(file=‘touzi/win.png‘)19 readystate = 3

20 playing =False21 used_name =set()22 result_dict =dict()23 remain = 3

24 esv_A =StringVar()25 esv_B =StringVar()26 esv_C =StringVar()27

28 pi_list =list()29 for i in range(1, 7):30 pi = PhotoImage(file=r‘touzi/t%s.png‘ %i)31 pi_list.append(pi)32

33

34 defset_name(cw, ew, nw):35 globalreadystate36 entryV =ew.get()37 ifentryV:38 if entryV inused_name:39 default = nw[‘text‘]40 nw.config(text="名称已存在!")41 cw.config(state=tk.DISABLED)42 font_shake(nw, default)43 cw.config(state=tk.ACTIVE)44 else:45 used_name.add(entryV)46 nw.config(text=entryV)47 ew.config(state=tk.DISABLED)48 cw.config(state=tk.DISABLED)49 readystate -= 1

50 if readystate ==0:51 for i in "ABC":52 eval(‘play_btn_%s.config(state=tk.ACTIVE, text="第一次机会")‘ %i)53

54

55 defthrow_touzi(pw, rw, nw):56 globalplaying57 globalremain58 if pw[‘text‘]=="第一次机会":59 playing =True60 pbStack.remove(pw)61 for widget inpbStack:62 widget.config(state=tk.DISABLED)63 pw.config(state=tk.DISABLED, text=‘第二次机会‘)64 elif pw[‘text‘]=="第二次机会":65 pw.config(state=tk.DISABLED, text=‘第三次机会‘)66 else:67 playing =False68 remain -= 1

69 pw.config(state=tk.DISABLED, text=‘play‘)70 thread = Thread(target=change_img, args=[pw, rw, nw])71 thread.start()72

73

74 defchange_img(pw, rw, nw):75 result_number = random.randint(1, 6)76 ranum_list =list()77 times = 5

78 whiletimes:79 ranum = random.randint(1, 6)80 if ranum not inranum_list:81 ranum_list.append(ranum)82 times = times - 1

83 for i inranum_list:84 time.sleep(0.3)85 throw_label.config(image=pi_list[i-1])86 time.sleep(0.3)87 throw_label.config(image=pi_list[result_number-1])88 time.sleep(0.5)89 if rw[‘text‘] == "结果":90 rw[‘text‘] =str(result_number)91 else:92 rw[‘text‘] = str(rw[‘text‘]) + "+%s" %result_number93 time.sleep(0.5)94 rw[‘text‘] = eval(rw[‘text‘])95 if pw[‘text‘] != "play":96 pw.config(state=tk.ACTIVE)97 if playing ==False:98 result_dict[nw[‘text‘]] = rw[‘text‘]99 for widget inpbStack:100 widget.config(state=tk.ACTIVE)101 if notremain:102 result_list = sorted(result_dict.items(), reverse=True, key=lambda rt: rt[1])103 if result_list[0][1] == result_list[1][1]:104 if result_list[1][1] == result_list[2][1]:105 throw_winner[‘text‘] = ">> 平局 <

106 else:107 winner = result_list[0][0] + "," + result_list[1][0]108 throw_winner[‘text‘] = "Winner: %s" %winner109 else:110 winner =result_list[0][0]111 throw_winner[‘text‘] = "Winner: %s" %winner112 throw_label[‘image‘] =crown113 reset_btn.config(state=tk.ACTIVE, text=‘重新开始‘, relief=‘raised‘)114

115

116 deffont_shake(nw, default):117 nw.config(foreground=‘red‘)118 for i in range(5):119 if i%2 ==0:120 time.sleep(0.05)121 nw.config(anchor=‘n‘)122 else:123 time.sleep(0.05)124 nw.config(anchor=‘s‘)125 root.update()126 nw.config(anchor=‘c‘)127 root.update()128 time.sleep(0.5)129 nw.config(text=default, foreground=‘black‘)130

131

132 defrestart():133 globalreadystate, used_name, result_dict, remain, pbStack134 throw_label[‘image‘] =shake_cup135 readystate = 3

136 used_name =set()137 result_dict =dict()138 remain = 3

139 pbStack ={play_btn_A, play_btn_B, play_btn_C}140 reset_btn.config(state=tk.DISABLED, relief=‘flat‘, text=‘‘)141 for i in "ABC":142 eval(‘name_%s.config(text="player %s")‘ %(i, i))143 eval(‘entry_%s.config(state=tk.NORMAL)‘ %i)144 eval(‘esv_%s.set("")‘ %i)145 eval(‘confirm_btn_%s.config(state=tk.ACTIVE)‘ %i)146 eval(‘result_%s.config(text="结果")‘ %i)147 throw_winner[‘text‘] = ""

148

149

150 box_frame_A =Frame(root)151 box_frame_A.grid(column=1, ipadx=3)152 name_A = Label(box_frame_A, text=‘player A‘, height=2)153 name_A.pack()154 signature_A = Label(box_frame_A, image=sigpic)155 signature_A.pack()156 play_btn_A = Button(box_frame_A, text=‘play‘, command=lambda: throw_touzi(play_btn_A, result_A, name_A))157 play_btn_A.pack(side=BOTTOM, pady=3)158 result_A = Label(box_frame_A, text=‘结果‘)159 result_A.pack(side=BOTTOM)160 entry_A = Entry(box_frame_A, textvariable=esv_A)161 entry_A.pack(side=LEFT, padx=5)162 confirm_btn_A = Button(box_frame_A, text=‘确定‘, command=lambda: set_name(confirm_btn_A, entry_A, name_A))163 confirm_btn_A.pack(side=LEFT)164

165 center_frame =Frame(root)166 center_frame.grid(row=1, column=1, pady=20)167 throw_label = Label(center_frame, image=shake_cup)168 throw_label.pack()169 throw_winner =Label(center_frame)170 throw_winner.pack()171 reset_btn = Button(center_frame, state=tk.DISABLED, relief=‘flat‘, command=restart)172 reset_btn.pack()173

174 box_frame_B =Frame(root)175 box_frame_B.grid(row=3, padx=10)176 name_B = Label(box_frame_B, text=‘player B‘, height=2)177 name_B.pack()178 signature_B = Label(box_frame_B, image=sigpic)179 signature_B.pack()180 play_btn_B = Button(box_frame_B, text=‘play‘, command=lambda: throw_touzi(play_btn_B, result_B, name_B))181 play_btn_B.pack(side=BOTTOM)182 result_B = Label(box_frame_B, text=‘结果‘)183 result_B.pack(side=BOTTOM)184 entry_B = Entry(box_frame_B, textvariable=esv_B)185 entry_B.pack(side=LEFT, padx=5)186 confirm_btn_B = Button(box_frame_B, text=‘确定‘, command=lambda: set_name(confirm_btn_B, entry_B, name_B))187 confirm_btn_B.pack(side=LEFT)188

189

190 box_frame_C =Frame(root)191 box_frame_C.grid(row=3, column=2, padx=10)192 name_C = Label(box_frame_C, text=‘player C‘, height=2)193 name_C.pack()194 signature_C = Label(box_frame_C, image=sigpic)195 signature_C.pack()196 play_btn_C = Button(box_frame_C, text=‘play‘, command=lambda: throw_touzi(play_btn_C, result_C, name_C))197 play_btn_C.pack(side=BOTTOM)198 result_C = Label(box_frame_C, text=‘结果‘)199 result_C.pack(side=BOTTOM)200 entry_C = Entry(box_frame_C, textvariable=esv_C)201 entry_C.pack(side=LEFT, padx=5)202 confirm_btn_C = Button(box_frame_C, text=‘确定‘, command=lambda: set_name(confirm_btn_C, entry_C, name_C))203 confirm_btn_C.pack(side=LEFT)204

205

206 if __name__ == ‘__main__‘:207 pbStack ={play_btn_A, play_btn_B, play_btn_C}208 for i in "ABC":209 eval(‘play_btn_%s.config(state=tk.DISABLED)‘ %i)210 root.mainloop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值