小白之python开发:童年游戏之水果机

今天,编写的一个童年游戏厅中的一个简单游戏——水果机。类似于大转盘一样,一个选定框随着时间在转盘上循环,玩家点击停止,选定框停下来,所选择的水果为最后的结果。
1.首先导入包

import tkinter
import threading
import time

2.建立基础的游戏界面,这里使用tikinter包的Tk类来帮我们创建对象

root = tkinter.Tk()
root.title('水果机')
root.minsize(300, 300)

3.摆放按钮,总计12种水果选项,由于代码类似就不一一展示了

btm1 = tkinter.Button(root, text="榴莲", bg="red")
btm1.place(x=20, y=20, width=50, height=50)

btm2 = tkinter.Button(root, text="葡萄", bg="pink")
btm2.place(x=90, y=20, width=50, height=50)
...
btm12 = tkinter.Button(root, text="菠萝", bg="pink")
btm12.place(x=20, y=90, width=50, height=50)

4.绘制开始与结束按钮,当用户点击开始时系统调用newtask函数,当用户点击停止时系统调用stop函数

btm13 = tkinter.Button(root, text="开始", bg="pink", command=newtask)
btm13.place(x=90, y=125, width=50, height=50)

btm14 = tkinter.Button(root, text="停止", bg="pink", command=stop)
btm14.place(x=160, y=125, width=50, height=50)

5.编写开始newtask函数,首先调用全局变量isloop和stops,首先每次开始时必须将stops设置为False,这样确保在用户每次点击开始时程序都可以正常做出反应,然后使用threading.Thread创建一个线程来运行run函数,然后使线程开始运行,并且将isloop设置为True

def newtask():
    global isloop
    global stops

    stops = False
    t = threading.Thread(target=run)
    t.start()
    isloop =True

6.编写run函数,这里要对所有的全局变量进行使用,首先执行一个判断,如果用户多次点击按钮式,就会创建线程调用run,那么如果isloop的值为True的话说明,目前已经有一个线程正在执行run函数,那么没必要执行直接返回上级。然后设定一个int值i这里用来跟踪选择框,使用该i值来确定选择框的当前位置,然后进入循环,time设定0.01s的延迟,这样肉眼是无法跟踪的,然后使用for循环来遍历整个水果btn列表,将所有的水果框颜色变为red,然后再将当前位置i的水果框颜色变为green,由于每次循环时i都会自增1所以相当于循环了一次,然后在i到达边界12是设定一个if判断将I的重新归为1,这样就能实现多次循环。最后当stips的值为True低证明用户点击了停止按钮,程序将isloop的值重新归为False然后将此事的i值作为最后的结果存入stopid中结束循环。

def run ():
    global isloop
    global stops
    global stopid
    if isloop == True:
        return
    i = 1
    if isinstance(stopid, int):
        i = stopid
    while True:
        time.sleep(0.01)

        for x in fruit_lists:
            x['bg'] = 'red'
        fruit_lists[i-1]['bg']='green'
        print('当前位置:', i)
        i += 1


        if i > len(fruit_lists):
            i = 0
        if stops == True:
            isloop  = False
            stopid = i
            break

7.编写stop函数,同理如果检测到多次点击结束按键,系统直接返回上级

def stop():
    global stops

    if stops == True:
        return
    stops = True

8.运行画面:
小白之python开发:童年游戏之水果机_第1张图片小白之python开发:童年游戏之水果机_第2张图片

你可能感兴趣的:(个人学习)