Example #1
0
def dado_vale_6(canvas_ops, canvas_tabuleiro):
    global vez, my_canvas, dado
    vez = game_rules.get_vez()
    cores_peca = ["blue", "yellow", "green", "red"]
    canvas_ops.create_rectangle(150, 80, 240, 160, fill=cores_peca[vez])
    dado = 6
    label_img = Label()
    label_img.config(image='')
    label_img.image = PhotoImage(file="dado_6.png")
    a = label_img.image
    label_img.config(image="")
    label_img.image = a
    canvas_ops.create_image(180, 100, image=label_img.image, anchor=NW)

    seis_count = game_rules.get_seis_count()
    if seis_count < 3:
        game_rules.muda_6_count()
        canvas_tabuleiro.bind("<Button-1>", clica)
    else:
        game_rules.seis_tres_vezes_seguidas()
        vez = game_rules.vez_do_proximo()
        draw_canvas.limpa_tabuleiro(canvas_move_peca, root_move_peca)
        draw_canvas.desenha(canvas_move_peca, root_move_peca)

    if game_rules.tem_pecas_no_tabuleiro(vez) == False:
        vez = game_rules.vez_do_proximo()

    else:
        canvas_tabuleiro.bind("<Button-1>", clica)
Example #2
0
def dado_vale_5(canvas_ops, canvas_tabuleiro):
    global vez, my_canvas, root_move_peca, dado
    vez = game_rules.get_vez()
    cores_peca = ["blue", "yellow", "green", "red"]
    canvas_ops.create_rectangle(150, 80, 240, 160, fill=cores_peca[vez])
    dado = 5
    label_img = Label()
    label_img.config(image='')
    label_img.image = PhotoImage(file="dado_5.png")
    a = label_img.image
    label_img.config(image="")
    label_img.image = a
    canvas_ops.create_image(180, 100, image=label_img.image, anchor=NW)

    if dado == 5:
        if game_rules.pode_mover_casa_saida(vez) == True:
            game_rules.tirou_5_no_dado(vez)
            vez = game_rules.vez_do_proximo()
            canvas_tabuleiro = draw_canvas.get_canvas()
            root_move_peca = draw_canvas.get_root()
            draw_canvas.desenha(canvas_tabuleiro, root_move_peca)
        # nao pode mover para casa de saída e nao tem peca no tabuleiro
        # elif game_rules_certo_tlvz.tem_pecas_na_casaInicial(vez) == False:
        elif game_rules.tem_pecas_no_tabuleiro(vez) == False:
            vez = game_rules.vez_do_proximo()
        # nao pode mover para casa de saída, mas tem peça no tabuleiro
        else:
            canvas_tabuleiro.bind("<Button-1>", clica)

    elif game_rules.tem_pecas_no_tabuleiro(vez) == False:
        vez = game_rules.vez_do_proximo()

    else:
        canvas_tabuleiro.bind("<Button-1>", clica)
Example #3
0
def salva_arquivo():
    data = [('Text files', '*.txt'), ('All files', '.*')]
    # file_path tem o caminho do diretorio q vai salvar
    file_name = asksaveasfilename()
    if file_name:
        complete_file_path = file_name + '.txt'

        arq = open(complete_file_path, 'w')
        arq.write(
            "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n" %
            (game_rules.get_vez(), game_rules.get_casas_inicais(),
             game_rules.get_caminhos_coloridos(),
             game_rules.get_caminho_principal(),
             game_rules.get_caminho_principal_bar(),
             game_rules.get_caminho_principal_abrigo(),
             game_rules.get_caminho_vermelho(), game_rules.get_caminho_verde(),
             game_rules.get_caminho_amarelo(), game_rules.get_caminho_azul()))
Example #4
0
def dado_vale_4(canvas_ops, canvas_tabuleiro):
    global vez, my_canvas, dado
    vez = game_rules.get_vez()
    cores_peca = ["blue", "yellow", "green", "red"]
    canvas_ops.create_rectangle(150, 80, 240, 160, fill=cores_peca[vez])
    dado = 4
    label_img = Label()
    label_img.config(image='')
    label_img.image = PhotoImage(file="dado_4.png")
    a = label_img.image
    label_img.config(image="")
    label_img.image = a
    canvas_ops.create_image(180, 100, image=label_img.image, anchor=NW)
    if game_rules.tem_pecas_no_tabuleiro(vez) == False:
        vez = game_rules.vez_do_proximo()
    else:
        canvas_tabuleiro.bind("<Button-1>", clica)
Example #5
0
def click_joga_dado(canvas_ops,
                    canvas_tabuleiro,
                    houve_captura=False,
                    peca_chegou_na_casa_final=False):
    global vez, my_canvas, dado, seis_count, dado_button, esperando_jogada

    dado_button = draw_canvas.get_dado_button()
    salvar_jogo_button = draw_canvas.get_salvar_jogo_button()
    canvas_move_peca = draw_canvas.get_canvas()
    root_move_peca = draw_canvas.get_root()

    dado = game_rules.joga_dado()

    # BLOQUEIA O BOTÃO DE LANÇAR O DADO ATE MEXER UMA PEÇA
    vez = game_rules.get_vez()
    if game_rules.tem_pecas_no_tabuleiro(vez):
        dado_button["state"] = DISABLED
        salvar_jogo_button["state"] = DISABLED

    vez = game_rules.get_vez()

    # desenha cor de fundo do dado
    cores_peca = ["blue", "yellow", "green", "red"]
    canvas_ops.create_rectangle(150, 80, 240, 160, fill=cores_peca[vez])

    dado = game_rules.joga_dado()

    # se houve captura a pessoa joga de novo com 6 no dado
    if houve_captura == True or peca_chegou_na_casa_final == True:
        dado = 6
        houve_captura == False
        game_rules.muda_houve_captura_para_falso()
        canvas_tabuleiro.bind("<Button-1>", clica)

    if dado != 5:
        esperando_jogada = True

    label_img = Label()
    label_img.config(image='')

    if dado == 1:
        label_img.image = PhotoImage(file="dado_1.png")
    elif dado == 2:
        label_img.image = PhotoImage(file="dado_2.png")
    elif dado == 3:
        label_img.image = PhotoImage(file="dado_3.png")
    elif dado == 4:
        label_img.image = PhotoImage(file="dado_4.png")
    elif dado == 5:
        label_img.image = PhotoImage(file="dado_5.png")
    else:
        label_img.image = PhotoImage(file="dado_6.png")

    a = label_img.image
    label_img.config(image="")
    label_img.image = a
    canvas_ops.create_image(180, 100, image=label_img.image, anchor=NW)

    # se tirou 6 no dado
    seis_count = game_rules.get_seis_count()
    if dado == 6:
        if seis_count < 3:
            seis_count += 1
            canvas_tabuleiro.bind("<Button-1>", clica)
        else:
            game_rules.seis_tres_vezes_seguidas()
            vez = game_rules.vez_do_proximo()
            draw_canvas.limpa_tabuleiro(canvas_move_peca, root_move_peca)
            draw_canvas.desenha(canvas_move_peca, root_move_peca)

    # se dado for 5 mover peca pra casa de saida
    if dado == 5:
        # pode mover para casa de saida
        if game_rules.pode_mover_casa_saida(vez) == True:
            game_rules.tirou_5_no_dado(vez)
            vez = game_rules.vez_do_proximo()

            root_move_peca = draw_canvas.get_root()

            dado_button["state"] = NORMAL  # ativo o botao do dado novamente

            draw_canvas.desenha(canvas_tabuleiro, root_move_peca)

        # nao pode mover para casa de saída e nao tem peca no tabuleiro
        elif game_rules.tem_pecas_no_tabuleiro(vez) == False:
            vez = game_rules.vez_do_proximo()

        # nao pode mover para casa de saída, mas tem peça no tabuleiro
        else:
            canvas_tabuleiro.bind("<Button-1>", clica)

    # TIROU UM NUMERO DIFERENTE DE 5 E NÃO TEM PEÇAS NO TABULEIRO PARA MOVER
    elif game_rules.tem_pecas_no_tabuleiro(vez) == False:
        vez = game_rules.vez_do_proximo()

    else:
        canvas_tabuleiro.bind("<Button-1>", clica)
Example #6
0
def desenha_1a_vez(my_canvas, root):
    global dado, img, vez, W, H, canvas_move_peca, root_move_peca, coordenadas_caminho_principal, coordenadas_caminhos_coloridos, cores_peca, canvas_opcoes, dado_button, salvar_jogo_button

    caminho_principal = game_rules.get_caminho_principal()

    canvas_move_peca = my_canvas
    root_move_peca = root

    casas_iniciais = game_rules.get_casas_inicais()
    caminhos_coloridos = game_rules.get_caminhos_coloridos()
    caminho_principal_abrigos = game_rules.get_caminho_principal_abrigo()
    caminho_principal_bar = game_rules.get_caminho_principal_bar()
    vez = game_rules.get_vez()

    # Variáveis
    W = 600  # x
    H = 600  # y

    coordenadas_caminho_principal = [
        [13.5 * W // 15, 8.5 * H // 15], [12.5 * W // 15, 8.5 * H // 15], [11.5 * W // 15, 8.5 * H // 15],
        [10.5 * W // 15, 8.5 * H // 15], [9.5 * W // 15, 8.5 * H // 15],  # 0 - 5

        [8.5 * W // 15, 9.5 * H // 15], [8.5 * W // 15, 10.5 * H // 15], [8.5 * W // 15, 11.5 * H // 15],
        [8.5 * W // 15, 12.5 * H // 15], [8.5 * W // 15, 13.5 * H // 15], [8.5 * W // 15, 14.5 * H // 15],  # 5  - 10

        [7.5 * W // 15, 14.5 * H // 15],  # 11

        [6.5 * W // 15, 14.5 * H // 15], [6.5 * W // 15, 13.5 * H // 15], [6.5 * W // 15, 12.5 * H // 15],
        [6.5 * W // 15, 11.5 * H // 15], [6.5 * W // 15, 10.5 * H // 15], [6.5 * W // 15, 9.5 * H // 15],  # 12 - 17

        [5.5 * W // 15, 8.5 * H // 15], [4.5 * W // 15, 8.5 * H // 15], [3.5 * W // 15, 8.5 * H // 15],
        [2.5 * W // 15, 8.5 * H // 15], [1.5 * W // 15, 8.5 * H // 15], [0.5 * W // 15, 8.5 * H // 15],  # 18 - 22

        [0.5 * W // 15, 7.5 * H // 15],  # 24

        [0.5 * W // 15, 6.5 * H // 15], [1.5 * W // 15, 6.5 * H // 15], [2.5 * W // 15, 6.5 * H // 15],
        [3.5 * W // 15, 6.5 * H // 15], [4.5 * W // 15, 6.5 * H // 15], [5.5 * W // 15, 6.5 * H // 15],
        [6.5 * W // 15, 5.5 * H // 15], [6.5 * W // 15, 4.5 * H // 15], [6.5 * W // 15, 3.5 * H // 15],
        [6.5 * W // 15, 2.5 * H // 15], [6.5 * W // 15, 1.5 * H // 15], [6.5 * W // 15, 0.5 * H // 15],
        [7.5 * W // 15, 0.5 * H // 15],
        [8.5 * W // 15, 0.5 * H // 15], [8.5 * W // 15, 1.5 * H // 15], [8.5 * W // 15, 2.5 * H // 15],
        [8.5 * W // 15, 3.5 * H // 15], [8.5 * W // 15, 4.5 * H // 15], [8.5 * W // 15, 5.5 * H // 15],
        [9.5 * W // 15, 6.5 * H // 15], [10.5 * W // 15, 6.5 * H // 15], [11.5 * W // 15, 6.5 * H // 15],
        [12.5 * W // 15, 6.5 * H // 15], [13.5 * W // 15, 6.5 * H // 15], [14.5 * W // 15, 6.5 * H // 15],
        [14.5 * W // 15, 7.5 * H // 15],
        [14.5 * W // 15, 8.5 * H // 15]
    ]

    coordenadas_casas_iniciais = [
        [  # AMARELO
            [10.5 * W // 15, 1.5 * H // 15], [13.5 * W // 15, 1.5 * H // 15], [10.5 * W // 15, 4.5 * H // 15],
            [13.5 * W // 15, 4.5 * H // 15]
        ],
        [  # VERDE
            [1.5 * W // 15, 1.5 * H // 15], [4.5 * W // 15, 1.5 * H // 15], [1.5 * W // 15, 4.5 * H // 15],
            [4.5 * W // 15, 4.5 * H // 15]
        ],
        [  # VERMELHO
            [1.5 * W // 15, 10.5 * H // 15], [4.5 * W // 15, 10.5 * H // 15], [1.5 * W // 15, 13.5 * H // 15],
            [4.5 * W // 15, 13.5 * H // 15]
        ],
        [  # AZUL
            [10.5 * W // 15, 10.5 * H // 15], [13.5 * W // 15, 10.5 * H // 15], [10.5 * W // 15, 13.5 * H // 15],
            [13.5 * W // 15, 13.5 * H // 15]
        ]
    ]

    coordenadas_caminhos_coloridos = [
        [  # VERMELHO
            [13.5 * W // 15, 7.5 * H // 15], [12.5 * W // 15, 7.5 * H // 15], [11.5 * W // 15, 7.5 * H // 15],
            [10.5 * W // 15, 7.5 * H // 15], [9.5 * W // 15, 7.5 * H // 15], [8.5 * W // 15, 7.5 * H // 15]
        ],
        [  # VERDE
            [7.5 * W // 15, 1.5 * H // 15], [7.5 * W // 15, 2.5 * H // 15], [7.5 * W // 15, 3.5 * H // 15],
            [7.5 * W // 15, 4.5 * H // 15], [7.5 * W // 15, 5.5 * H // 15], [7.5 * W // 15, 6.5 * H // 15]
        ],
        [  # AMARELO
            [1.5 * W // 15, 7.5 * H // 15], [2.5 * W // 15, 7.5 * H // 15], [3.5 * W // 15, 7.5 * H // 15],
            [4.5 * W // 15, 7.5 * H // 15], [5.5 * W // 15, 7.5 * H // 15], [6.5 * W // 15, 7.5 * H // 15]
        ],
        [  # AZUL
            [7.5 * W // 15, 13.5 * H // 15], [7.5 * W // 15, 12.5 * H // 15], [7.5 * W // 15, 11.5 * H // 15],
            [7.5 * W // 15, 10.5 * H // 15], [7.5 * W // 15, 9.5 * H // 15], [7.5 * W // 15, 8.5 * H // 15]
        ]
    ]

    coordenadas_casa_final = [
        [7.5 * W // 15, 8.5 * H // 15],  # VERDE
        [6.5 * W // 15, 7.5 * H // 15],  # AMARELO
        [7.5 * W // 15, 6.5 * H // 15],  # AZUL
        [8.5 * W // 15, 7.5 * H // 15],  # VERMELHO
    ]

    coordenadas_abrigos = [
        [8.5 * W // 15, 13.5 * H // 15],  # LADO DO VERMELHO
        [1.5 * W // 15, 8.5 * H // 15],  # LADO DO VERDE
        [6.5 * W // 15, 1.5 * H // 15],  # LADO DO AMARELO
        [13.5 * W // 15, 6.5 * H // 15],  # LADO DO VERDE
    ]

    # colors = ["blue", "green", "red", "yellow"]  # lista de cores em ordem alfabetica ingles
    colors = ["red", "yellow", "green", "blue"]  # lista de cores em ordem alfabetica ingles

    cores_peca = ["blue", "yellow", "green", "red"]
    white_distance = W // 16  # para os quadrados brancos dentro dos cantos coloridos

    # Corredores com cor (1o quadrado isolado colorido, depois retangulo colorido)
    my_canvas.create_rectangle(13 * W // 15, 8 * H // 15, 14 * W // 15, 9 * H // 15, fill=colors[0])
    my_canvas.create_rectangle(9 * W // 15, 7 * H // 15, 14 * W // 15, 8 * H // 15, fill=colors[0])
    my_canvas.create_rectangle(W // 15, 6 * H // 15, 2 * W // 15, 7 * H // 15, fill=colors[1])
    my_canvas.create_rectangle(W // 15, 7 * H // 15, 6 * W // 15, 8 * H // 15, fill=colors[1])
    my_canvas.create_rectangle(6 * W // 15, 13 * H // 15, 7 * W // 15, 14 * H // 15, fill=colors[2])
    my_canvas.create_rectangle(7 * W // 15, 14 * H // 15, 8 * W // 15, 9 * H // 15, fill=colors[2])
    my_canvas.create_rectangle(8 * W // 15, 1 * H // 15, 9 * W // 15, 2 * H // 15, fill=colors[3])
    my_canvas.create_rectangle(7 * W // 15, 1 * H // 15, 8 * W // 15, 6 * H // 15, fill=colors[3])

    # Triangulos brancos nas casas de saida
    my_canvas.create_polygon(8.2 * W // 15, 1.2 * H // 15, 8.5 * W // 15, 1.8 * H // 15, 8.8 * W // 15, 1.2 * H // 15,
                             fill="white")
    my_canvas.create_polygon(1.2 * W // 15, 6.2 * H // 15, 1.8 * W // 15, 6.5 * H // 15, 1.2 * W // 15, 6.8 * H // 15,
                             fill="white")
    my_canvas.create_polygon(13.8 * W // 15, 8.2 * H // 15, 13.2 * W // 15, 8.5 * H // 15, 13.8 * W // 15,
                             8.8 * H // 15,
                             fill="white")
    my_canvas.create_polygon(6.2 * W // 15, 13.8 * H // 15, 6.5 * W // 15, 13.2 * H // 15, 6.8 * W // 15,
                             13.8 * H // 15,
                             fill="white")

    # Corredores sem cor
    for i in range(1, 15):
        my_canvas.create_line(i * (W // 15), 0, i * (W // 15), H, fill="black")  # retas verticais
        my_canvas.create_line(0, i * (H // 15), W, i * (H // 15), fill="black")  # retas horizontais

    # Azul Corner (canto superior direito)
    my_canvas.create_rectangle(9 * W // 15, 9 * H // 15, W, H, fill=colors[0])
    my_canvas.create_rectangle(9 * W // 15 + white_distance, 9 * H // 15 + white_distance, W - white_distance,
                               H - white_distance, fill="white")

    # Verde Corner (canto inferior esquerdo)
    my_canvas.create_rectangle(0, 0, 6 * W // 15, 6 * H // 15, fill=colors[1])
    my_canvas.create_rectangle(0 + white_distance, 0 + white_distance, 6 * W // 15 - white_distance,
                               6 * H // 15 - white_distance,
                               fill="white")

    # Vermelho Corner (canto inferior direito)
    my_canvas.create_rectangle(0, 9 * W // 15, 6 * W // 15, H, fill=colors[2])
    my_canvas.create_rectangle(0 + white_distance, 9 * W // 15 + white_distance, 6 * W // 15 - white_distance,
                               H - white_distance,
                               fill="white")

    # Amarelo Corner (canto superior esquerdo)
    my_canvas.create_rectangle(9 * W // 15, 0, W, 6 * H // 15, fill=colors[3])
    my_canvas.create_rectangle(9 * W // 15 + white_distance, 0 + white_distance, W - white_distance,
                               6 * H // 15 - white_distance,
                               fill="white")

    # Abrigos
    # Quadrados especias (cinzas)
    my_canvas.create_rectangle(1 * W // 15, 8 * H // 15, 2 * W // 15, 9 * H // 15, fill="gray")
    my_canvas.create_rectangle(8 * W // 15, 13 * H // 15, 9 * W // 15, 14 * H // 15, fill="gray")
    my_canvas.create_rectangle(13 * W // 15, 6 * H // 15, 14 * W // 15, 7 * H // 15, fill="gray")
    my_canvas.create_rectangle(6 * W // 15, 1 * H // 15, 7 * W // 15, 2 * H // 15, fill="gray")

    # Centro colorido (4 triangulos)
    my_canvas.create_polygon(9 * W // 15, 6 * H // 15, 9 * W // 15, 9 * H // 15, W // 2, H // 2, fill=colors[0])
    my_canvas.create_polygon(6 * W // 15, 6 * H // 15, 6 * W // 15, 9 * H // 15, W // 2, H // 2, fill=colors[1])
    my_canvas.create_polygon(6 * W // 15, 9 * H // 15, 9 * W // 15, 9 * H // 15, W // 2, H // 2, fill=colors[2])
    my_canvas.create_polygon(6 * W // 15, 6 * H // 15, 9 * W // 15, 6 * H // 15, W // 2, H // 2, fill=colors[3])

    # DESENHA PEÇAS NO CAMINHO PRINCIPAL
    # percorer caminho_principal e ver se tem peca
    for index, quadrado in enumerate(caminho_principal):
        if quadrado != 0 and quadrado != -100:
            x_centro_peca = coordenadas_caminho_principal[index][0]
            y_centro_peca = coordenadas_caminho_principal[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[quadrado])

    # DESENHA PEÇAS NAS CASAS INICIAIS
    for casa_inicial in casas_iniciais:
        for index_peca, quadrado in enumerate(casa_inicial):
            if quadrado < 0 and quadrado != -100:
                x_centro_peca = coordenadas_casas_iniciais[quadrado][index_peca][0]
                y_centro_peca = coordenadas_casas_iniciais[quadrado][index_peca][1]
                create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[quadrado])

    # DESENHA PEÇAS NAS RETAS FINAIS
    for reta_final in caminhos_coloridos:
        for index_peca, quadrado in enumerate(reta_final[:5]):
            if quadrado < 0:
                x_centro_peca = coordenadas_caminhos_coloridos[quadrado + 1][index_peca][0]
                y_centro_peca = coordenadas_caminhos_coloridos[quadrado + 1][index_peca][1]
                create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[quadrado])

    # DESENHA ABRIGOS
    for index, abrigo in enumerate(caminho_principal_abrigos):
        # caso a 1a posicao do abrigo esteja vazia e a 2a ocupada
        if abrigo[0][0] == 0 and abrigo[0][1] != 0:
            cor_da_peca = abrigo[0][1]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_da_peca])

        # caso a 2a posicao do abrigo esteja vazia e a 1a ocupada
        elif abrigo[0][0] != 0 and abrigo[0][1] == 0:
            cor_da_peca = abrigo[0][0]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_da_peca])

        # caso as 2 posicoes dos abrigos estejam ocupadas
        elif abrigo[0][0] != 0 and abrigo[0][1] != 0:
            # desenha peça 1
            cor_da_peca_1 = abrigo[0][0]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_da_peca_1])

            # desenha peça 2
            cor_da_peca_2 = abrigo[0][1]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30 - 5, my_canvas, cores_peca[cor_da_peca_2])

    # DESENHA BARREIRAS
    if caminho_principal_bar:  # caso a lista não esteja vazia (ou seja, existem barreiras no tabuleiro)
        for barreira in caminho_principal_bar:
            posicao_barreira = barreira[1]
            cor_barreira = barreira[0]
            x_centro_peca = coordenadas_caminho_principal[posicao_barreira][0]
            y_centro_peca = coordenadas_caminho_principal[posicao_barreira][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_barreira])
            create_circle(x_centro_peca, y_centro_peca, W // 30 - 2, my_canvas, "white")
            create_circle(x_centro_peca, y_centro_peca, W // 30 - 5, my_canvas, cores_peca[cor_barreira])

    # DESENHA PEÇA CASA FINAL
    for index, reta_final in enumerate(caminhos_coloridos):
        if reta_final[-1]:  # se tem peca na casa final
            x_texto_final = coordenadas_casa_final[index][0]
            y_texto_final = coordenadas_casa_final[index][1]
            numero_pecas_casa_final = len(reta_final[-1])
            my_canvas.create_text(x_texto_final, y_texto_final, text=numero_pecas_casa_final,
                                  font="Times 20 italic bold")

    # CANVAS DE OPÇÕES
    canvas_opcoes = Canvas(height=200)
    canvas_opcoes.pack(side=RIGHT)
    canvas_opcoes.create_text(200, 20, text="À JOGAR:")

    # BOTÕES
    dado_button = Button(root, text="Lançar Dado", activeforeground="cyan", activebackground="dark cyan")
    dado_button["command"] = partial(event_handler.click_joga_dado,
                                     canvas_ops=canvas_opcoes,
                                     canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    dado_button.place(x=762, y=400)

    novo_jogo_button = Button(root, text="Novo Jogo", activeforeground="cyan", activebackground="dark cyan",
                              command=event_handler.click_novo_jogo)
    novo_jogo_button.place(x=762, y=30)

    carregar_jogo_button = Button(root, text="Carregar Jogo", activeforeground="cyan", activebackground="dark cyan",
                                  command=event_handler.carrega_arquivo)
    carregar_jogo_button.place(x=762, y=80)

    salvar_jogo_button = Button(root, text="Salvar", activeforeground="cyan", activebackground="dark cyan",
                                command=event_handler.salva_arquivo
                                )
    salvar_jogo_button.place(x=762, y=130)

    # BOTÕES PARA ESOLHER O VALOR DO DADO
    um_no_dado = Button(root, text="Dado=1", activeforeground="cyan", activebackground="dark cyan")
    um_no_dado["command"] = partial(event_handler.dado_vale_1,
                                    canvas_ops=canvas_opcoes,
                                    canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    um_no_dado.place(x=720, y=460)

    dois_no_dado = Button(root, text="Dado=2", activeforeground="cyan", activebackground="dark cyan")
    dois_no_dado["command"] = partial(event_handler.dado_vale_2,
                                      canvas_ops=canvas_opcoes,
                                      canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    dois_no_dado.place(x=720, y=500)

    tres_no_dado = Button(root, text="Dado=3", activeforeground="cyan", activebackground="dark cyan")
    tres_no_dado["command"] = partial(event_handler.dado_vale_3,
                                      canvas_ops=canvas_opcoes,
                                      canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    tres_no_dado.place(x=720, y=540)

    quatro_no_dado = Button(root, text="Dado=4", activeforeground="cyan", activebackground="dark cyan")
    quatro_no_dado["command"] = partial(event_handler.dado_vale_4,
                                        canvas_ops=canvas_opcoes,
                                        canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    quatro_no_dado.place(x=820, y=460)

    cinco_no_dado = Button(root, text="Dado=5", activeforeground="cyan", activebackground="dark cyan")
    cinco_no_dado["command"] = partial(event_handler.dado_vale_5,
                                       canvas_ops=canvas_opcoes,
                                       canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    cinco_no_dado.place(x=820, y=500)

    seis_no_dado = Button(root, text="Dado=6", activeforeground="cyan", activebackground="dark cyan")
    seis_no_dado["command"] = partial(event_handler.dado_vale_6,
                                      canvas_ops=canvas_opcoes,
                                      canvas_tabuleiro=my_canvas)  # maneira de passar parametros (canvas_ops no caso) no evento do click
    seis_no_dado.place(x=820, y=540)
Example #7
0
def desenha(my_canvas, root):
    global dado, img, vez, W, H, canvas_move_peca, root_move_peca, coordenadas_caminho_principal, coordenadas_caminhos_coloridos, cores_peca, canvas_opcoes

    caminho_principal = game_rules.get_caminho_principal()

    canvas_move_peca = my_canvas
    root_move_peca = root

    casas_iniciais = game_rules.get_casas_inicais()
    caminhos_coloridos = game_rules.get_caminhos_coloridos()
    caminho_principal_abrigos = game_rules.get_caminho_principal_abrigo()
    caminho_principal_bar = game_rules.get_caminho_principal_bar()
    vez = game_rules.get_vez()

    # Variáveis
    W = 600  # x
    H = 600  # y

    coordenadas_caminho_principal = [
        [13.5 * W // 15, 8.5 * H // 15], [12.5 * W // 15, 8.5 * H // 15], [11.5 * W // 15, 8.5 * H // 15],
        [10.5 * W // 15, 8.5 * H // 15], [9.5 * W // 15, 8.5 * H // 15],  # 0 - 5

        [8.5 * W // 15, 9.5 * H // 15], [8.5 * W // 15, 10.5 * H // 15], [8.5 * W // 15, 11.5 * H // 15],
        [8.5 * W // 15, 12.5 * H // 15], [8.5 * W // 15, 13.5 * H // 15], [8.5 * W // 15, 14.5 * H // 15],  # 5  - 10

        [7.5 * W // 15, 14.5 * H // 15],  # 11

        [6.5 * W // 15, 14.5 * H // 15], [6.5 * W // 15, 13.5 * H // 15], [6.5 * W // 15, 12.5 * H // 15],
        [6.5 * W // 15, 11.5 * H // 15], [6.5 * W // 15, 10.5 * H // 15], [6.5 * W // 15, 9.5 * H // 15],  # 12 - 17

        [5.5 * W // 15, 8.5 * H // 15], [4.5 * W // 15, 8.5 * H // 15], [3.5 * W // 15, 8.5 * H // 15],
        [2.5 * W // 15, 8.5 * H // 15], [1.5 * W // 15, 8.5 * H // 15], [0.5 * W // 15, 8.5 * H // 15],  # 18 - 22

        [0.5 * W // 15, 7.5 * H // 15],  # 24

        [0.5 * W // 15, 6.5 * H // 15], [1.5 * W // 15, 6.5 * H // 15], [2.5 * W // 15, 6.5 * H // 15],
        [3.5 * W // 15, 6.5 * H // 15], [4.5 * W // 15, 6.5 * H // 15], [5.5 * W // 15, 6.5 * H // 15],
        [6.5 * W // 15, 5.5 * H // 15], [6.5 * W // 15, 4.5 * H // 15], [6.5 * W // 15, 3.5 * H // 15],
        [6.5 * W // 15, 2.5 * H // 15], [6.5 * W // 15, 1.5 * H // 15], [6.5 * W // 15, 0.5 * H // 15],
        [7.5 * W // 15, 0.5 * H // 15],
        [8.5 * W // 15, 0.5 * H // 15], [8.5 * W // 15, 1.5 * H // 15], [8.5 * W // 15, 2.5 * H // 15],
        [8.5 * W // 15, 3.5 * H // 15], [8.5 * W // 15, 4.5 * H // 15], [8.5 * W // 15, 5.5 * H // 15],
        [9.5 * W // 15, 6.5 * H // 15], [10.5 * W // 15, 6.5 * H // 15], [11.5 * W // 15, 6.5 * H // 15],
        [12.5 * W // 15, 6.5 * H // 15], [13.5 * W // 15, 6.5 * H // 15], [14.5 * W // 15, 6.5 * H // 15],
        [14.5 * W // 15, 7.5 * H // 15],
        [14.5 * W // 15, 8.5 * H // 15]
    ]

    coordenadas_casas_iniciais = [
        [  # AMARELO
            [10.5 * W // 15, 1.5 * H // 15], [13.5 * W // 15, 1.5 * H // 15], [10.5 * W // 15, 4.5 * H // 15],
            [13.5 * W // 15, 4.5 * H // 15]
        ],
        [  # VERDE
            [1.5 * W // 15, 1.5 * H // 15], [4.5 * W // 15, 1.5 * H // 15], [1.5 * W // 15, 4.5 * H // 15],
            [4.5 * W // 15, 4.5 * H // 15]
        ],
        [  # VERMELHO
            [1.5 * W // 15, 10.5 * H // 15], [4.5 * W // 15, 10.5 * H // 15], [1.5 * W // 15, 13.5 * H // 15],
            [4.5 * W // 15, 13.5 * H // 15]
        ],
        [  # AZUL
            [10.5 * W // 15, 10.5 * H // 15], [13.5 * W // 15, 10.5 * H // 15], [10.5 * W // 15, 13.5 * H // 15],
            [13.5 * W // 15, 13.5 * H // 15]
        ]
    ]

    coordenadas_caminhos_coloridos = [
        [  # VERMELHO
            [13.5 * W // 15, 7.5 * H // 15], [12.5 * W // 15, 7.5 * H // 15], [11.5 * W // 15, 7.5 * H // 15],
            [10.5 * W // 15, 7.5 * H // 15], [9.5 * W // 15, 7.5 * H // 15], [8.5 * W // 15, 7.5 * H // 15]
        ],
        [  # VERDE
            [7.5 * W // 15, 1.5 * H // 15], [7.5 * W // 15, 2.5 * H // 15], [7.5 * W // 15, 3.5 * H // 15],
            [7.5 * W // 15, 4.5 * H // 15], [7.5 * W // 15, 5.5 * H // 15], [7.5 * W // 15, 6.5 * H // 15]
        ],
        [  # AMARELO
            [1.5 * W // 15, 7.5 * H // 15], [2.5 * W // 15, 7.5 * H // 15], [3.5 * W // 15, 7.5 * H // 15],
            [4.5 * W // 15, 7.5 * H // 15], [5.5 * W // 15, 7.5 * H // 15], [6.5 * W // 15, 7.5 * H // 15]
        ],
        [  # AZUL
            [7.5 * W // 15, 13.5 * H // 15], [7.5 * W // 15, 12.5 * H // 15], [7.5 * W // 15, 11.5 * H // 15],
            [7.5 * W // 15, 10.5 * H // 15], [7.5 * W // 15, 9.5 * H // 15], [7.5 * W // 15, 8.5 * H // 15]
        ]
    ]

    coordenadas_casa_final = [
        [7.5 * W // 15, 8.5 * H // 15],  # VERDE
        [6.5 * W // 15, 7.5 * H // 15],  # AMARELO
        [7.5 * W // 15, 6.5 * H // 15],  # AZUL
        [8.5 * W // 15, 7.5 * H // 15],  # VERMELHO
    ]

    coordenadas_abrigos = [
        [8.5 * W // 15, 13.5 * H // 15],  # LADO DO VERMELHO
        [1.5 * W // 15, 8.5 * H // 15],  # LADO DO VERDE
        [6.5 * W // 15, 1.5 * H // 15],  # LADO DO AMARELO
        [13.5 * W // 15, 6.5 * H // 15],  # LADO DO VERDE
    ]

    colors = ["red", "yellow", "green", "blue"]  # lista de cores em ordem alfabetica ingles

    cores_peca = ["blue", "yellow", "green", "red"]
    white_distance = W // 16  # para os quadrados brancos dentro dos cantos coloridos

    # Corredores com cor (1o quadrado isolado colorido, depois retangulo colorido)
    my_canvas.create_rectangle(13 * W // 15, 8 * H // 15, 14 * W // 15, 9 * H // 15, fill=colors[0])
    my_canvas.create_rectangle(9 * W // 15, 7 * H // 15, 14 * W // 15, 8 * H // 15, fill=colors[0])
    my_canvas.create_rectangle(W // 15, 6 * H // 15, 2 * W // 15, 7 * H // 15, fill=colors[1])
    my_canvas.create_rectangle(W // 15, 7 * H // 15, 6 * W // 15, 8 * H // 15, fill=colors[1])
    my_canvas.create_rectangle(6 * W // 15, 13 * H // 15, 7 * W // 15, 14 * H // 15, fill=colors[2])
    my_canvas.create_rectangle(7 * W // 15, 14 * H // 15, 8 * W // 15, 9 * H // 15, fill=colors[2])
    my_canvas.create_rectangle(8 * W // 15, 1 * H // 15, 9 * W // 15, 2 * H // 15, fill=colors[3])
    my_canvas.create_rectangle(7 * W // 15, 1 * H // 15, 8 * W // 15, 6 * H // 15, fill=colors[3])

    # Triangulos brancos nas casas de saida
    my_canvas.create_polygon(8.2 * W // 15, 1.2 * H // 15, 8.5 * W // 15, 1.8 * H // 15, 8.8 * W // 15, 1.2 * H // 15,
                             fill="white")
    my_canvas.create_polygon(1.2 * W // 15, 6.2 * H // 15, 1.8 * W // 15, 6.5 * H // 15, 1.2 * W // 15, 6.8 * H // 15,
                             fill="white")
    my_canvas.create_polygon(13.8 * W // 15, 8.2 * H // 15, 13.2 * W // 15, 8.5 * H // 15, 13.8 * W // 15,
                             8.8 * H // 15,
                             fill="white")
    my_canvas.create_polygon(6.2 * W // 15, 13.8 * H // 15, 6.5 * W // 15, 13.2 * H // 15, 6.8 * W // 15,
                             13.8 * H // 15,
                             fill="white")

    # Corredores sem cor
    for i in range(1, 15):
        my_canvas.create_line(i * (W // 15), 0, i * (W // 15), H, fill="black")  # retas verticais
        my_canvas.create_line(0, i * (H // 15), W, i * (H // 15), fill="black")  # retas horizontais

    # Azul Corner (canto superior direito)
    my_canvas.create_rectangle(9 * W // 15, 9 * H // 15, W, H, fill=colors[0])
    my_canvas.create_rectangle(9 * W // 15 + white_distance, 9 * H // 15 + white_distance, W - white_distance,
                               H - white_distance, fill="white")

    # Verde Corner (canto inferior esquerdo)
    my_canvas.create_rectangle(0, 0, 6 * W // 15, 6 * H // 15, fill=colors[1])
    my_canvas.create_rectangle(0 + white_distance, 0 + white_distance, 6 * W // 15 - white_distance,
                               6 * H // 15 - white_distance,
                               fill="white")

    # Vermelho Corner (canto inferior direito)
    my_canvas.create_rectangle(0, 9 * W // 15, 6 * W // 15, H, fill=colors[2])
    my_canvas.create_rectangle(0 + white_distance, 9 * W // 15 + white_distance, 6 * W // 15 - white_distance,
                               H - white_distance,
                               fill="white")

    # Amarelo Corner (canto superior esquerdo)
    my_canvas.create_rectangle(9 * W // 15, 0, W, 6 * H // 15, fill=colors[3])
    my_canvas.create_rectangle(9 * W // 15 + white_distance, 0 + white_distance, W - white_distance,
                               6 * H // 15 - white_distance,
                               fill="white")

    # Abrigos
    # Quadrados especias (cinzas)
    my_canvas.create_rectangle(1 * W // 15, 8 * H // 15, 2 * W // 15, 9 * H // 15, fill="gray")
    my_canvas.create_rectangle(8 * W // 15, 13 * H // 15, 9 * W // 15, 14 * H // 15, fill="gray")
    my_canvas.create_rectangle(13 * W // 15, 6 * H // 15, 14 * W // 15, 7 * H // 15, fill="gray")
    my_canvas.create_rectangle(6 * W // 15, 1 * H // 15, 7 * W // 15, 2 * H // 15, fill="gray")

    # Centro colorido (4 triangulos)
    my_canvas.create_polygon(9 * W // 15, 6 * H // 15, 9 * W // 15, 9 * H // 15, W // 2, H // 2, fill=colors[0])
    my_canvas.create_polygon(6 * W // 15, 6 * H // 15, 6 * W // 15, 9 * H // 15, W // 2, H // 2, fill=colors[1])
    my_canvas.create_polygon(6 * W // 15, 9 * H // 15, 9 * W // 15, 9 * H // 15, W // 2, H // 2, fill=colors[2])
    my_canvas.create_polygon(6 * W // 15, 6 * H // 15, 9 * W // 15, 6 * H // 15, W // 2, H // 2, fill=colors[3])

    # DESENHA PEÇAS NO CAMINHO PRINCIPAL
    # percorer caminho_principal e ver se tem peca
    for index, quadrado in enumerate(caminho_principal):
        if quadrado != 0 and quadrado != -100:
            x_centro_peca = coordenadas_caminho_principal[index][0]
            y_centro_peca = coordenadas_caminho_principal[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[quadrado])

    # DESENHA PEÇAS NAS CASAS INICIAIS
    for casa_inicial in casas_iniciais:
        for index_peca, quadrado in enumerate(casa_inicial):
            if quadrado < 0 and quadrado != -100:
                x_centro_peca = coordenadas_casas_iniciais[quadrado][index_peca][0]
                y_centro_peca = coordenadas_casas_iniciais[quadrado][index_peca][1]
                create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[quadrado])

    # DESENHA PEÇAS NAS RETAS FINAIS
    for reta_final in caminhos_coloridos:
        for index_peca, quadrado in enumerate(reta_final[:5]):
            if quadrado < 0:
                x_centro_peca = coordenadas_caminhos_coloridos[quadrado + 1][index_peca][0]
                y_centro_peca = coordenadas_caminhos_coloridos[quadrado + 1][index_peca][1]
                create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[quadrado])

    # DESENHA ABRIGOS
    for index, abrigo in enumerate(caminho_principal_abrigos):
        # caso a 1a posicao do abrigo esteja vazia e a 2a ocupada
        if abrigo[0][0] == 0 and abrigo[0][1] != 0:
            cor_da_peca = abrigo[0][1]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_da_peca])

        # caso a 2a posicao do abrigo esteja vazia e a 1a ocupada
        elif abrigo[0][0] != 0 and abrigo[0][1] == 0:
            cor_da_peca = abrigo[0][0]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_da_peca])

        # caso as 2 posicoes dos abrigos estejam ocupadas
        elif abrigo[0][0] != 0 and abrigo[0][1] != 0:
            # desenha peça 1
            cor_da_peca_1 = abrigo[0][0]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_da_peca_1])

            # desenha peça 2
            cor_da_peca_2 = abrigo[0][1]
            x_centro_peca = coordenadas_abrigos[index][0]
            y_centro_peca = coordenadas_abrigos[index][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30 - 5, my_canvas, cores_peca[cor_da_peca_2])

    # DESENHA BARREIRAS
    if caminho_principal_bar:  # caso a lista não esteja vazia (ou seja, existem barreiras no tabuleiro)
        for barreira in caminho_principal_bar:
            posicao_barreira = barreira[1]
            cor_barreira = barreira[0]
            x_centro_peca = coordenadas_caminho_principal[posicao_barreira][0]
            y_centro_peca = coordenadas_caminho_principal[posicao_barreira][1]
            create_circle(x_centro_peca, y_centro_peca, W // 30, my_canvas, cores_peca[cor_barreira])
            create_circle(x_centro_peca, y_centro_peca, W // 30 - 2, my_canvas, "white")
            create_circle(x_centro_peca, y_centro_peca, W // 30 - 5, my_canvas, cores_peca[cor_barreira])

    # DESENHA PEÇA CASA FINAL
    for index, reta_final in enumerate(caminhos_coloridos):
        if reta_final[-1]:  # se tem peca na casa final
            x_texto_final = coordenadas_casa_final[index][0]
            y_texto_final = coordenadas_casa_final[index][1]
            numero_pecas_casa_final = len(reta_final[-1])
            my_canvas.create_text(x_texto_final, y_texto_final, text=numero_pecas_casa_final,
                                  font="Times 20 italic bold")

    # desabilita o botao do dado qnd o jogo acaba
    if game_rules.jogo_acabou() == True:
        dado_button["state"] = DISABLED

    # se houve captura a pessoa anda 6 com alguma peca
    if game_rules.get_houve_captura_na_jogada() == True:
        event_handler.click_joga_dado(canvas_opcoes, my_canvas, houve_captura=True)

    # se peca chegou na casa final
    if game_rules.get_chegou_peca_na_casa_final() == True:
        event_handler.click_joga_dado(canvas_opcoes, my_canvas, peca_chegou_na_casa_final=True)