簡體   English   中英

Tkinter 兩人游戲組織碼

[英]Organising code for Tkinter Two-Player Game

我正在嘗試制作一個兩人游戲,人們輪流采取行動。 我覺得我必須手動更改主 window 以使兩者具有相同的內容和小部件。 我如何讓自己的事情變得更簡單? 如何更輕松地在兩個 windows 之間切換?

from tkinter import *

root = Tk()
root.title('Game')
    
def win1():
    global board
    top2.withdraw()
    top1.deiconify()
    board=top1

def win2():
    top1.withdraw()
    top2.deiconify()
    board=top2
    
top1 = Toplevel()
board = top1
top1.title('Player 1')
top1.withdraw()
buttonp1 = Button(top1, text="Switch to Player 2", command=win2)
buttonp1.grid(row=15, column=0, columnspan=10)


top2 = Toplevel()
board = top2
top2.title('Player 2')
top2.withdraw()
buttonp2 = Button(top2,text="Switch to Player 1", command=win1)
buttonp2.grid(row=15, column=0, columnspan=10)

choice = Button(text="Submit Weapons Choices", command=win1)
choice.grid()
#After this button is pressed, win1 is opened, and the switching from window to window begins.

top_array = [top1, top2]

# When generating the board, I would use "for top in top_array", then run a function which generates widgets. I want the board to start off with the exact same layout.

我遇到的問題涉及以后無法在代碼中更改文本變量,因為它是在 function 中生成的:

top_array = [top1, top2]

def init(board):
    txt = StringVar(board)
    txt.set("\nClick anywhere to begin\n")
    label = Label(board, textvariable=txt)
    label.grid(row = 11, column = 0, columnspan=10)
    
for top in top_array:
    init(top)

我使用了 class 使兩個 windows 以相同的內容開始,但有不同的標題等和一個數組,以便我可以在兩者之間切換

class Player:
    def __init__(self, board, tag, name):
        self.board = board
        self.tag = tag
        self.name = name

p = Player(root,"","")
board1 = Toplevel()
board2 = Toplevel()
gamemode = [Player(board1, "Switch to Player 2", "Player 1"), Player(board2, "Switch to Player 1", "Player 2")]

def switch():
    global pnum
    pnum +=1
    pnum %= 2
    gamemode[pnum].board.withdraw()
    gamemode[((pnum+1)%2)].board.deiconify()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM