如何根据播放器制作闪烁标签?

时间:2016-04-08 15:45:04

标签: python tkinter

前段时间我在这里发布了一个关于我的Connect 4代码的问题,一些非常好的人帮我解决了这个问题。现在我对我想要对比赛做的一件事感到难过。添加一个闪烁的标签,闪烁在bg =绿色和bg =红色或蓝色之间,具体取决于哪个玩家"捕获"这四个人。这是我的代码,请提前感谢。

我现在最好的猜测是让一个名为flashWinner()的def并让它在每个按钮上运行并根据获胜者闪烁颜色。

from Tkinter import *
from functools import partial
import time

top = Tk()

top.title("Juan's Zany Super Crazy Connect Four!")

turn=1

nextS=[35,36,37,38,39,40,41]

def winFound():
    for f in range(0,7):
        buttonList[0+f].config(state=DISABLED)

def checkWin():
    for h in range (0,4):
        if board[35+h].cget('bg')==board[36+h].cget('bg')==board[37+h].cget('bg')==board[38+h].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[35+h].config(bg='green')
                board[36+h].config(bg='green')
                board[37+h].config(bg='green')
                board[38+h].config(bg='green')
                winFound()
        elif board[28+h].cget('bg')==board[29+h].cget('bg')==board[30+h].cget('bg')==board[31+h].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[28+h].config(bg='green')
                board[29+h].config(bg='green')
                board[30+h].config(bg='green')
                board[31+h].config(bg='green')
                winFound()
        elif board[21+h].cget('bg')==board[22+h].cget('bg')==board[23+h].cget('bg')==board[24+h].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[21+h].config(bg='green')
                board[22+h].config(bg='green')
                board[23+h].config(bg='green')
                board[24+h].config(bg='green')
                winFound()
        elif board[14+h].cget('bg')==board[15+h].cget('bg')==board[16+h].cget('bg')==board[17+h].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[14+h].config(bg='green')
                board[15+h].config(bg='green')
                board[16+h].config(bg='green')
                board[17+h].config(bg='green')
                winFound()
        elif board[7+h].cget('bg')==board[8+h].cget('bg')==board[9+h].cget('bg')==board[10+h].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[7+h].config(bg='green')
                board[8+h].config(bg='green')
                board[9+h].config(bg='green')
                board[10+h].config(bg='green')
                winFound()
        elif board[0+h].cget('bg')==board[1+h].cget('bg')==board[2+h].cget('bg')==board[3+h].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[0+h].config(bg='green')
                board[1+h].config(bg='green')
                board[2+h].config(bg='green')
                board[3+h].config(bg='green')
                winFound()
    for j in range(0,7):
        if board[0+j].cget('bg')==board[7+j].cget('bg')==board[14+j].cget('bg')==board[21+j].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[0+j].config(bg='green')
                board[7+j].config(bg='green')
                board[14+j].config(bg='green')
                board[21+j].config(bg='green')
                winFound()
        elif board[7+j].cget('bg')==board[14+j].cget('bg')==board[21+j].cget('bg')==board[28+j].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[7+j].config(bg='green')
                board[14+j].config(bg='green')
                board[21+j].config(bg='green')
                board[28+j].config(bg='green')
                winFound()
        elif board[14+j].cget('bg')==board[21+j].cget('bg')==board[28+j].cget('bg')==board[35+j].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[14+j].config(bg='green')
                board[21+j].config(bg='green')
                board[28+j].config(bg='green')
                board[35+j].config(bg='green')
                winFound()
    for x in range(0,3):
        if board[35-(7*x)].cget('bg')==board[29-(7*x)].cget('bg')==board[23-(7*x)].cget('bg')==board[17-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[35-(7*x)].config(bg='green')
                board[29-(7*x)].config(bg='green')
                board[23-(7*x)].config(bg='green')
                board[17-(7*x)].config(bg='green')
                winFound()
        elif board[36-(7*x)].cget('bg')==board[30-(7*x)].cget('bg')==board[24-(7*x)].cget('bg')==board[18-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[36-(7*x)].config(bg='green')
                board[30-(7*x)].config(bg='green')
                board[24-(7*x)].config(bg='green')
                board[18-(7*x)].config(bg='green')
                winFound()
        elif board[37-(7*x)].cget('bg')==board[31-(7*x)].cget('bg')==board[25-(7*x)].cget('bg')==board[19-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[37-(7*x)].config(bg='green')
                board[31-(7*x)].config(bg='green')
                board[25-(7*x)].config(bg='green')
                board[19-(7*x)].config(bg='green')
        elif board[38-(7*x)].cget('bg')==board[32-(7*x)].cget('bg')==board[26-(7*x)].cget('bg')==board[20-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[38-(7*x)].config(bg='green')
                board[32-(7*x)].config(bg='green')
                board[26-(7*x)].config(bg='green')
                board[20-(7*x)].config(bg='green')
                winFound()
    for x in range(0,3):
        if board[41-(7*x)].cget('bg')==board[33-(7*x)].cget('bg')==board[25-(7*x)].cget('bg')==board[17-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[41-(7*x)].config(bg='green')
                board[33-(7*x)].config(bg='green')
                board[25-(7*x)].config(bg='green')
                board[17-(7*x)].config(bg='green')
                winFound()
        elif board[40-(7*x)].cget('bg')==board[32-(7*x)].cget('bg')==board[24-(7*x)].cget('bg')==board[16-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[40-(7*x)].config(bg='green')
                board[32-(7*x)].config(bg='green')
                board[24-(7*x)].config(bg='green')
                board[16-(7*x)].config(bg='green')
                winFound()
        elif board[39-(7*x)].cget('bg')==board[31-(7*x)].cget('bg')==board[23-(7*x)].cget('bg')==board[15-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[39-(7*x)].config(bg='green')
                board[31-(7*x)].config(bg='green')
                board[23-(7*x)].config(bg='green')
                board[15-(7*x)].config(bg='green')
                winFound()
        elif board[38-(7*x)].cget('bg')==board[30-(7*x)].cget('bg')==board[22-(7*x)].cget('bg')==board[14-(7*x)].cget('bg')!='grey80':
            for q in range (0,4):
                global turn
                board[38-(7*x)].config(bg='green')
                board[30-(7*x)].config(bg='green')
                board[22-(7*x)].config(bg='green')
                board[14-(7*x)].config(bg='green')
                winFound()  

def buttonStuff(z):
    global turn
    if turn==1:
        board[nextS[z]].config(bg='blue')
        nextS[z]=nextS[z]-7
        turn=turn+1
        if nextS[z]<0:
            buttonList[z].config(state=DISABLED)

    elif turn==2:
        board[nextS[z]].config(bg='red')
        nextS[z]=nextS[z]-7
        turn=turn-1
        if nextS[z]<0:
            buttonList[z].config(state=DISABLED)

    checkWin()

top = Tk()
r=0
count=0
col=0

buttonList = list()
for z in range(7):
    buttonList.append(Button(text=str(z), font='times 48', command=partial(buttonStuff, z)))
    buttonList[-1].grid(row=r,column=col, sticky='NESW')
    count+=1
    col+=1

r=1
col=0
count=0

board = list()
for z in range(42):
        board.append(Label(text='', font='Helvetica 15', bg='grey80'))
        board[-1].grid(row=r,column=col, sticky='NESW', padx=2, pady=2, ipadx=2, ipady=25)
        count+=1
        col+=1
        if count==7:
            r=r+1
            count=0
            col=0


top.mainloop()

1 个答案:

答案 0 :(得分:1)

评论太大了。

这是你可以去的一条路线。使用label = tk.Label(root,....)创建标签,并将其放在任何位置根窗口顶部,底部的任何位置。在窗口小部件上调用grid_forget()以隐藏它,创建您正在考虑的功能,然后调用grid()将其替换为网格。我没有看到你跟踪玩家掩盖代码的方式。在点上阅读有点困难。所以你可以创建一个像players = ('Player 1', 'Player 2')这样的元组,然后在每个回合中切换索引以指向当前玩家。然后你可以参考当前玩家的回合,从而赢得了比赛。然后,您可以在其中创建一个循环label.config(..)来根据条件(玩家赢了)切换颜色,使颜色“闪烁”。

附录:您可以将该代码减少到当前大小的1/10。