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