Пример #1
0
def cor_da_peca_na_posicao_clicada_igual_a_vez(pos_peca, vez):
    caminho_prin = game_rules.get_caminho_principal()
    lista_abrigos = game_rules.get_caminho_principal_abrigo()
    # caso nao seja abrigo

    if caminho_prin[pos_peca] != 0 and caminho_prin[pos_peca] != -100:
        if caminho_prin[pos_peca] == vez:
            return True
    # caso seja abrigo
    elif caminho_prin[pos_peca] == -100:
        mapea_pos_abrigo_index_lista_abrigos = {9: 0, 22: 1, 35: 2, 48: 3}
        for peca in lista_abrigos[
                mapea_pos_abrigo_index_lista_abrigos[pos_peca]][0]:
            if peca == vez:
                return True
    return False
Пример #2
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()))
Пример #3
0
def tem_peca_na_posicao(pos_peca):
    caminho_prin = game_rules.get_caminho_principal()
    lista_abrigos = game_rules.get_caminho_principal_abrigo()
    # verifica casa normal
    if caminho_prin[pos_peca] != 0 and caminho_prin[pos_peca] != -100:
        return True

    elif caminho_prin[pos_peca] == -100:
        mapea_pos_abrigo_index_lista_abrigos = {9: 0, 22: 1, 35: 2, 48: 3}
        for index, abrigo in enumerate(lista_abrigos):
            if abrigo[1] == pos_peca:
                for peca in lista_abrigos[
                        mapea_pos_abrigo_index_lista_abrigos[pos_peca]][0]:
                    if peca != 0:
                        return True

    return False
Пример #4
0
def clica(e):
    global dado, canvas_move_peca, root_move_peca, cores_peca, vez, seis_count, esperando_jogada, dado_button

    caminho_prin = game_rules.get_caminho_principal()
    pos_peca = calcula_posicao_tabuleiro(e.x, e.y)
    seis_count = game_rules.get_seis_count()
    canvas_move_peca = draw_canvas.get_canvas()
    root_move_peca = draw_canvas.get_root()
    if type(pos_peca) is not tuple:  # se for tupla, peca está na casa final
        if pos_peca != None and tem_peca_na_posicao(pos_peca) == True:
            if cor_da_peca_na_posicao_clicada_igual_a_vez(
                    pos_peca, vez) == True:  # so pode mexer peca da cor da vez
                game_rules.move_peca(vez=vez,
                                     dado=dado,
                                     pos_atual_caminho_principal=pos_peca)

                # verifica o que fica na casa que a peca saiu
                tipo_de_casa = qual_tipo_de_casa(pos_peca)

                if tipo_de_casa == "CASA NORMAL":
                    draw_canvas.desenha_quadrado(canvas_move_peca, pos_peca,
                                                 tipo_de_casa)
                if tipo_de_casa == "ABRIGO":
                    cor_de_mudanca = qual_outra_cor_abrigo(pos_peca)
                    draw_canvas.desenha_quadrado(
                        canvas_move_peca,
                        pos_peca,
                        tipo_de_casa,
                        cor_de_mudanca=cores_peca[cor_de_mudanca])
                if tipo_de_casa == "BARREIRA":
                    draw_canvas.desenha_quadrado(
                        canvas_move_peca,
                        pos_peca,
                        tipo_de_casa,
                        cor_de_mudanca=cores_peca[vez])
                draw_canvas.desenha(canvas_move_peca, root_move_peca)

                if dado != 6:
                    vez = game_rules.vez_do_proximo()
                else:
                    game_rules.muda_6_count()
                    if seis_count == 2:
                        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)

            # permite apertar o botao de lancar o dado
            dado_button = draw_canvas.get_dado_button()
            dado_button["state"] = NORMAL

            salvar_jogo_button = draw_canvas.get_salvar_jogo_button()
            salvar_jogo_button["state"] = NORMAL

    elif type(pos_peca) is tuple:  # peça está na reta final
        game_rules.move_peca(vez=pos_peca[-1],
                             dado=dado,
                             pos_atual_reta_final=pos_peca[0])

        draw_canvas.desenha(canvas_move_peca, root_move_peca)

        dado_button = draw_canvas.get_dado_button()
        dado_button["state"] = NORMAL

        salvar_jogo_button = draw_canvas.get_salvar_jogo_button()
        salvar_jogo_button["state"] = NORMAL

        # Passando a vez para o proximo
        vez = game_rules.vez_do_proximo()

    # MOSTRA QUEM GANHOU
    if game_rules.verifica_vitoria():
        list_vencedor = game_rules.verifica_vitoria()
        draw_canvas.messagebox.showinfo(
            "{} GANHOU".format(cores_peca[list_vencedor[0]].upper()),
            "1o - {}\n2o - {}\n3o - {}\n4o - {}".format(
                cores_peca[list_vencedor[0]].upper(),
                cores_peca[list_vencedor[1]].upper(),
                cores_peca[list_vencedor[2]].upper(),
                cores_peca[list_vencedor[3]].upper()))
Пример #5
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)
Пример #6
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)