1

编程新手,stackoverflow 社区的新成员。出于此代码的目的,我一直在阅读此处的主题,有关使用的流程的教程等。

我的项目是关于一个 4 人在线纸牌游戏(tichu),我需要计算实时播放的纸牌(总共 56 张纸牌)。所以我制作了一个显示可用纸牌的窗口(tkinter)。我使用每张卡片的一小部分(12x24 像素)来匹配桌面(玩游戏的地方)。程序扫描屏幕上显示的每张卡片,如果找到,它会替换为 GUI 上较暗的图标。当游戏内显示重置按钮时,GUI 会重置(pyautogui)。这里的问题是扫描和刷新 GUI 真的很慢,并且错过了很多牌(导致下一个玩家移动)。我希望该程序实时多扫描所有 56 张卡的可用性。可能吗?opencv 是解决方案吗?我不知道在我的代码上实现它:/

程序开始运行,等待卡片显示。它只能识别尺寸和分辨率完全相同的卡片。程序在读取“reset.png”图像时停止。

下面是要测试的代码和屏幕截图:

    from Tkinter import *
    from PIL import Image, ImageTk
    import pyautogui

    root = Tk()
    root.title("Available Cards Playing")

    for i in range(4):
        for j in range(14):
            tableCard = 'c%d%d' % (i, j) # building GUI table
            photo = PhotoImage(file='card_table/'+tableCard+'.gif')
            l = Label(image=photo)
            l.image=photo
            l.grid(row=i, column=j, sticky=NSEW)
    root.attributes("-topmost", True) # window always on top
    root.attributes("-toolwindow", 1) # window no minimize
    loop = 0
    while loop < 1: # program is running infinitelly till we close the window
        resetTable = pyautogui.locateCenterOnScreen('cards/reset.png')
        if resetTable is None:
            for i in range(4):
                for j in range(14):
                        sCard = 's%d%d' % (i, j) # 56 cards one-by-one are being scanned
                        checkCard = pyautogui.locateCenterOnScreen('cards/'+sCard+'.png')
                        if type(checkCard) == tuple: # checking if card was founded, then disable it on GUI
                                shadow = PhotoImage(file='card_table/dc%d%d.gif' % (i, j))
                                l = Label(image=shadow)
                                l.image=shadow
                                l.grid(row=i, column=j, sticky=NSEW)
                                root.update()

        elif type(resetTable) == tuple: # if reset button is scanned, GUI resets 
            for i in range(4):
                for j in range(14):
                    #
                    tableCard = 'c%d%d' % (i, j)
                    photo = PhotoImage(file='card_table/' + tableCard + '.gif')
                    l = Label(image=photo)
                    l.image = photo
                    l.grid(row=i, column=j, sticky=NSEW)
                    root.update()
    root.mainloop()

这是您可以用来测试功能的 gui 界面

这是项目的临时链接,带有 .py 和所有图像 (173kb) zip,以便您可以尝试其功​​能

提前谢谢吉奥!

4

0 回答 0