class ControladorRanking:
    TAMFONTETEXTO = 35
    POSICAOXNOME = 105
    POSICAOXPONTUACAO = 480
    ESPACAMENTONOMES = 43
    POSICAOYLINHA = 188

    def __init__(self):
        self.telamenu = TelaMenu()
        self.aplcadjog = AplCadastrarJogador()

    @staticmethod
    def get_imagem(nomeimagem):
        return pygame.image.load(os.path.join(CaminhoRecursos.caminho_imagens(), nomeimagem))

    def exibir_tela_ranking(self):
        imagem = self.get_imagem("telaranking.png")
        self.telamenu.exibe_imagem(imagem, EstiloElementos.posicao_imagem_fundo())

    def imprimir_ranking(self, lrecordes):
        posicaoylinha = self.POSICAOYLINHA
        for linha in lrecordes:
            self.telamenu.exibe_texto(str(linha[0]), self.TAMFONTETEXTO, Posicao(self.POSICAOXNOME, posicaoylinha))
            self.telamenu.exibe_texto(str(linha[1]), self.TAMFONTETEXTO, Posicao(self.POSICAOXPONTUACAO, posicaoylinha))
            posicaoylinha += self.ESPACAMENTONOMES

    def retorna_ranking(self):
        self.exibir_tela_ranking()
        lrecordes = self.aplcadjog.buscar_ranking()
        self.imprimir_ranking(lrecordes)
        pygame.display.flip()
示例#2
0
class ControladorMenu():

    def __init__(self):
        pygame.init()
        self.telamenu = TelaMenu()
        self.controlador = Controlador()
        self.caminhoimagem = (os.getcwd()).replace("principal",os.path.join("recursos","imagem"))


    def exibir_tela_menu(self):
        self.telamenu.exibe_imagem(self.caminhoimagem, "fundo2.jpg", Posicao(0,0))
        self.telamenu.exibe_imagem(self.caminhoimagem, "nome2.png", Posicao(150,140))

    def exibe_opcoes_menu(self, id):
        tam1 = 30
        tam2 = 30
        tam3 = 30
        tam4 = 30
        cor1 = (80,80,80)
        cor2 = (80,80,80)
        cor3 = (80,80,80)
        cor4 = (80,80,80)
        if id == 1:
            tam1 = 40
            cor1 = (0,0,0)
        if id == 2:
            tam2 = 40
            cor2 = (0,0,0)
        if id == 3:
            tam3 = 40
            cor3 = (0,0,0)
        if id == 4:
            tam4 = 40
            cor4 = (0,0,0)

        self.telamenu.exibe_texto_menu("INICIAR", tam1, cor1, 302, 30)
        self.telamenu.exibe_texto_menu("CADASTRAR", tam2, cor2, 302, 70)
        self.telamenu.exibe_texto_menu("CONFIGURACOES", tam3, cor3, 302, 110)
        self.telamenu.exibe_texto_menu("SAIR", tam4, cor4, 302, 150)


    #TODO refatorar toda a parte do menu
    def manipula_seta(self, menuselecao):
        if menuselecao == 1:
            self.telamenu.exibe_imagem(self.caminhoimagem, "seta.gif", Posicao(245, 260))
        elif menuselecao == 2:
            self.telamenu.exibe_imagem(self.caminhoimagem, "seta.gif", Posicao(245, 300))
        elif menuselecao == 3:
            self.telamenu.exibe_imagem(self.caminhoimagem, "seta.gif", Posicao(245, 340))
        elif menuselecao == 4:
            self.telamenu.exibe_imagem(self.caminhoimagem, "seta.gif", Posicao(245, 380))

    def menu_selecao(self, menuselecao):
        ## TELA 1
        if menuselecao == 1:
            self.exibe_opcoes_menu(menuselecao)
        elif menuselecao == 2:
            self.exibe_opcoes_menu(menuselecao)
        elif menuselecao == 3:
            self.exibe_opcoes_menu(menuselecao)
        elif menuselecao == 4:
            self.exibe_opcoes_menu(menuselecao)

        ## REGRAS DA TELA 1:
        if menuselecao < 1: #nao incrementar estado se apertar p cima de novo
            menuselecao = 1
        elif menuselecao == 5: #nao incrementar estado se apertar p baixo de novo
            menuselecao = 4
        elif menuselecao == 13: # PARA, POR ENQUANTO, NAO FUNCIONAR NADA EM CONFIGURACOES
            menuselecao = 3
        elif menuselecao == 14: # se escolher a opcao 'SAIR'
            exit()
        elif menuselecao == 12: #se der enter na opcao 'CADASTRAR'
            menuselecao = 200
        elif menuselecao == 11:
            self.controlador.jogo()

        ## TELA 2
        elif menuselecao == 200:
            self.telamenu.exibe_texto_menu("NOME: ", 40, (0,0,0), 105, 22)
            pygame.draw.rect(self.telamenu.tela, (255,255,255), (205,270,300,30), 0)
            self.telamenu.exibe_texto_menu("VOLTAR", 30, (80,80,80), 302, 70)
            pygame.display.flip()
            menuselecao = self.cadastrar()
        elif menuselecao == 201:
            self.manipula_seta(2)
            self.telamenu.exibe_texto_menu("Nome cadastrado com sucesso!", 30, (80,80,80), 200, 22)
            self.telamenu.exibe_texto_menu("VOLTAR", 40, (0,0,0), 302, 70)

        ## REGRAS DA TELA 2
        elif (menuselecao == 210) | (menuselecao == 199): # por enquanto, so escreve o nome na tela, mas nao persiste os dados
            menuselecao = 200
        elif menuselecao == 202: #nao incrementar estado se apertar p baixo de novo
            menuselecao = 201
        elif menuselecao == 211: #se clicar em voltar, volta para o menu inical
            menuselecao = 1

        return menuselecao

    def menu(self):
        menuselecao = 1
        while True:
            self.exibir_tela_menu()
            self.manipula_seta(menuselecao)
            menuselecao = self.menu_selecao(menuselecao)
            pygame.display.update()
            pygame.display.flip()
            for e in pygame.event.get():
                if e.type == QUIT:
                    exit()
                if e.type == KEYDOWN:
                    if e.key == K_DOWN:
                        menuselecao += 1
                    if e.key == K_UP:
                        menuselecao -= 1
                    if e.key == K_RETURN:
                        menuselecao += 10
                    if e.key == K_ESCAPE:
                        menuselecao -= 10

#---------------------------------------------------- Cadastro

    def get_key(self):
        while 1:
            event = pygame.event.poll()
            if event.type == KEYDOWN:
                return event.key
            else:
              pass


    def imprime_nome(self, nome_corrente, tela):
        nome = ""
        for i in range(len(nome_corrente)):
            nome = nome + nome_corrente[i]

        fonte = pygame.font.SysFont("ARIAL", 24, False, False)
        texto = fonte.render(nome, True, (0,0,0))
        tela.blit(texto, (215,270))
        pygame.display.flip()
        return nome

    def escreve_arquivo(self, nome):
        arq = open("ranking.txt", "a")
        arq.write(nome + " ")

    def cadastrar(self):
        nome_corrente = []
        nome = ""
        while True:
            tecla = self.get_key()
            if tecla == K_RETURN:
                self.escreve_arquivo(nome)
                return 201
            elif tecla <= 127:
                nome_corrente.append(chr(tecla))
                nome = self.imprime_nome(nome_corrente, self.telamenu.tela)
示例#3
0
class ControladorMenu():
    POSICAOX_SETA = 245
    POSICAOY_SETA = 260
    POSICAOX_OPCAO_MENU = 302
    POSICAOY_OPCAO_MENU = 280
    DISTANCIA_OPCAO_MENU = 40
    TAMANHO_OPCAO_MENU_PADRAO = 30
    TAMANHO_OPCAO_MENU_SELECAO = 40
    COR_PRETO = (0, 0, 0)
    COR_CINZA = (80, 80, 80)

    def __init__(self):
        pygame.init()
        self.telamenu = TelaMenu()
        self.controladorjogo = ControladorJogo()
        self.lopcoes = ["INICIAR", "CADASTRAR", "RANKING", "SAIR"]
        self.menu = Menu()

    @staticmethod
    def get_imagem(nomeimagem):
        return pygame.image.load(
            os.path.join(CaminhoRecursos.caminho_imagens(), nomeimagem))

    def exibir_tela_menu(self):
        imagemfundomenu = self.get_imagem("fundomenu.jpg")
        self.telamenu.exibe_imagem(imagemfundomenu,
                                   EstiloElementos.posicao_imagem_fundo())
        imagemfundomenu = self.get_imagem("titulojogo.png")
        self.telamenu.exibe_imagem(imagemfundomenu,
                                   EstiloElementos.posicao_titulo_jogo())

    def exibe_opcoes_menu(self, menuselecao):
        alteraposicao = 0
        for id, opcao in enumerate(self.lopcoes):
            tam = self.TAMANHO_OPCAO_MENU_PADRAO
            cor = self.COR_CINZA
            if id + 1 == menuselecao:
                tam = self.TAMANHO_OPCAO_MENU_SELECAO
                cor = self.COR_PRETO
            self.telamenu.exibe_texto_menu(
                opcao, tam, cor,
                Posicao(self.POSICAOX_OPCAO_MENU,
                        self.POSICAOY_OPCAO_MENU + alteraposicao))
            alteraposicao = alteraposicao + self.DISTANCIA_OPCAO_MENU

    def manipula_seta(self, menuselecao):
        imagemseta = self.get_imagem("seta.gif")
        self.telamenu.exibe_imagem(
            imagemseta,
            Posicao(self.POSICAOX_SETA,
                    self.POSICAOY_SETA + 40 * (menuselecao - 1)))

    def update(self, observable):
        if observable.baixo:
            self.menu.alterar_opcao_menu_baixo()
            if (self.menuselecao >= 1) & (self.menuselecao < len(
                    self.lopcoes)):
                self.menuselecao += 1
        elif observable.cima:
            self.menu.alterar_opcao_menu_cima()
            if (self.menuselecao > 1) & (self.menuselecao <= len(
                    self.lopcoes)):
                self.menuselecao -= 1
        elif observable.enter:
            self.menu.selecionar_opcao_menu()

    def inicializa_menu(self):
        pygame.mouse.set_visible(False)
        observable = ObservableEventosTeclado()
        observable.add_observer(self)
        self.menuselecao = 1
        while True:
            self.exibir_tela_menu()
            self.manipula_seta(self.menuselecao)
            self.exibe_opcoes_menu(self.menuselecao)
            observable.verifica_evento()
            pygame.display.update()
            pygame.display.flip()

        #self.controladorjogo.jogo(self.menu.estadomenuiniciar.jogador)
        print("voltou p contrlador menu")
class ControladorCadastro:
    TAMANHO_LETRA_DADOS = 24
    POSICAOX_LETRA_DADOS = 225
    POSICAO_INICIAL_DADOS = 270
    INCREMENTA_ESPACAMENTO = 40
    TAMANHO_PALAVRA = 20

    def __init__(self):
        self.telamenu = TelaMenu()
        self.aplcadastrarjogador = AplCadastrarJogador()
        self.lopcoes = ["LOGIN:"******"SENHA:"]
        self.nomecorrente = []
        self.nome = ""
        self.posicaoimprimenome = self.POSICAO_INICIAL_DADOS

    @staticmethod
    def get_imagem(nomeimagem):
        return pygame.image.load(os.path.join(CaminhoRecursos.caminho_imagens(), nomeimagem))

    def exibe_tela_informar_dados(self):
        imagem = self.get_imagem("teladigitadados.png")
        self.telamenu.exibe_imagem(imagem, EstiloElementos.posicao_imagem_fundo())
        pygame.display.flip()

    def exibe_tela_mensagem_cadastro(self, mensagem):
        imagemtelamensagem = self.get_imagem("telamensagem.png")
        self.telamenu.exibe_imagem(imagemtelamensagem, EstiloElementos.posicao_imagem_fundo())
        self.telamenu.exibe_mensagem_cadastro(mensagem, EstiloElementos.posicao_mensagem_cadastro())
        pygame.display.flip()

    @staticmethod
    def get_key():
        while True:
            event = pygame.event.poll()
            if event.type == KEYDOWN:
                return event.key

    def imprime_nome(self, dado, posicaoy):
        self.nome = ""
        for i in range(len(dado)):
            self.nome = self.nome + dado[i]
        self.telamenu.exibe_texto_dados(self.nome, self.TAMANHO_LETRA_DADOS, Posicao(self.POSICAOX_LETRA_DADOS, posicaoy))
        pygame.display.flip()

    def enviar_dados_jogador(self, ldadosjogador):
        return self.aplcadastrarjogador.cadastrar_jogador(ldadosjogador)

    def atualiza_entrada(self, ldadosjogador):
        self.exibe_tela_informar_dados()
        posicaoy = self.POSICAO_INICIAL_DADOS
        for dado in ldadosjogador:
            self.imprime_nome(dado, posicaoy)
            posicaoy += self.INCREMENTA_ESPACAMENTO

    def cadastro(self):
        ldadosjogador = []
        while True:
            self.tecla = self.get_key()
            if self.tecla == K_RETURN or self.tecla == K_TAB:
                ldadosjogador.append(self.nome)
                self.nome = ""
                self.nomecorrente = []
                if len(ldadosjogador) == len(self.lopcoes):
                    self.posicaoimprimenome = self.POSICAO_INICIAL_DADOS
                    return self.enviar_dados_jogador(ldadosjogador)
                else:
                    self.posicaoimprimenome = self.posicaoimprimenome + self.INCREMENTA_ESPACAMENTO
            elif self.tecla == K_BACKSPACE:
                if len(self.nomecorrente) > 0:
                    self.nomecorrente.pop(-1)
                    ldadosjogador.append(self.nomecorrente)
                    self.atualiza_entrada(ldadosjogador)
                    ldadosjogador.pop(-1)
            elif self.tecla == K_ESCAPE:
                return []
            elif self.tecla <= 127 and len(self.nomecorrente) < self.TAMANHO_PALAVRA:
                self.nomecorrente.append(chr(self.tecla))
                self.imprime_nome(self.nomecorrente, self.posicaoimprimenome)
class ControladorMenu():
    POSICAOX_SETA = 245
    POSICAOY_SETA = 260
    POSICAOX_OPCAO_MENU = 302
    POSICAOY_OPCAO_MENU = 280
    DISTANCIA_OPCAO_MENU = 40
    TAMANHO_OPCAO_MENU_PADRAO = 30
    TAMANHO_OPCAO_MENU_SELECAO = 40
    COR_PRETO = (0, 0, 0)
    COR_CINZA = (80, 80, 80)

    def __init__(self):
        pygame.init()
        self.telamenu = TelaMenu()
        self.controladorjogo = ControladorJogo()
        self.lopcoes = ["INICIAR", "CADASTRAR", "RANKING", "SAIR"]
        self.menu = Menu()

    @staticmethod
    def get_imagem(nomeimagem):
        return pygame.image.load(os.path.join(CaminhoRecursos.caminho_imagens(), nomeimagem))

    def exibir_tela_menu(self):
        imagemfundomenu = self.get_imagem("fundomenu.jpg")
        self.telamenu.exibe_imagem(imagemfundomenu, EstiloElementos.posicao_imagem_fundo())
        imagemfundomenu = self.get_imagem("titulojogo.png")
        self.telamenu.exibe_imagem(imagemfundomenu, EstiloElementos.posicao_titulo_jogo())

    def exibe_opcoes_menu(self, menuselecao):
        alteraposicao = 0
        for id, opcao in enumerate(self.lopcoes):
            tam = self.TAMANHO_OPCAO_MENU_PADRAO
            cor = self.COR_CINZA
            if id + 1 == menuselecao:
                tam = self.TAMANHO_OPCAO_MENU_SELECAO
                cor = self.COR_PRETO
            self.telamenu.exibe_texto_menu(opcao, tam, cor, Posicao(self.POSICAOX_OPCAO_MENU, self.POSICAOY_OPCAO_MENU + alteraposicao))
            alteraposicao = alteraposicao + self.DISTANCIA_OPCAO_MENU

    def manipula_seta(self, menuselecao):
        imagemseta = self.get_imagem("seta.gif")
        self.telamenu.exibe_imagem(imagemseta, Posicao(self.POSICAOX_SETA, self.POSICAOY_SETA + 40 * (menuselecao - 1)))

    def update(self, observable):
        if observable.baixo:
            self.menu.alterar_opcao_menu_baixo()
            if (self.menuselecao >= 1) & (self.menuselecao < len(self.lopcoes)):
                self.menuselecao += 1
        elif observable.cima:
            self.menu.alterar_opcao_menu_cima()
            if (self.menuselecao > 1) & (self.menuselecao <= len(self.lopcoes)):
                self.menuselecao -= 1
        elif observable.enter:
            self.menu.selecionar_opcao_menu()

    def inicializa_menu(self):
        pygame.mouse.set_visible(False)
        observable = ObservableEventosTeclado()
        observable.add_observer(self)
        self.menuselecao = 1
        while True:
            self.exibir_tela_menu()
            self.manipula_seta(self.menuselecao)
            self.exibe_opcoes_menu(self.menuselecao)
            observable.verifica_evento()
            pygame.display.update()
            pygame.display.flip()

        #self.controladorjogo.jogo(self.menu.estadomenuiniciar.jogador)
        print("voltou p contrlador menu")
class ControladorMenu():
    POSICAOX_SETA = 245
    POSICAOY_SETA = 260
    POSICAOX_OPCAO_MENU = 302
    POSICAOY_OPCAO_MENU = 30
    DISTANCIA_OPCAO_MENU = 40
    TAMANHO_OPCAO_MENU_PADRAO = 30
    TAMANHO_OPCAO_MENU_SELECAO = 40
    COR_PRETO = (0, 0, 0)
    COR_CINZA = (80, 80, 80)

    def __init__(self, controladorjogo):
        pygame.init()
        self.telamenu = TelaMenu()
        self.caminhoimagem = CaminhoRecursos.caminho_imagens()
        self.controladorjogo = controladorjogo
        self.telacadastro  = TelaCadastro()
        self.telalogin = TelaLogin()
        self.lopcoes = ["INICIAR", "CADASTRAR", "CONFIGURACOES", "SAIR"]
        self.mensagemsucesso = "Jogador cadastrado com sucesso!"
        self.mensagemerro = "Login informado ja existe!"
        self.mensagemdadoinvalido = "Os dados informados nao sao validos!"

    def exibir_tela_menu(self):
        self.telamenu.exibe_imagem(self.caminhoimagem, "fundomenu.jpg", EstiloElementos.posicao_imagem_fundo())
        self.telamenu.exibe_imagem(self.caminhoimagem, "titulojogo.png", EstiloElementos.posicao_titulo_jogo())

    def exibir_musica(self):
        self.telamenu.exibe_musica(CaminhoRecursos.caminho_musicas(), "music1.mp3")

    def exibe_opcoes_menu(self, menuselecao):
        alteraposicao = 0
        for id, opcao in enumerate(self.lopcoes):
            tam = self.TAMANHO_OPCAO_MENU_PADRAO
            cor = self.COR_CINZA
            if id + 1 == menuselecao:
                tam = self.TAMANHO_OPCAO_MENU_SELECAO
                cor = self.COR_PRETO
            self.telamenu.exibe_texto_menu(opcao, tam, cor,
                                           Posicao(self.POSICAOX_OPCAO_MENU, self.POSICAOY_OPCAO_MENU + alteraposicao))
            alteraposicao = alteraposicao + self.DISTANCIA_OPCAO_MENU

    def exibe_tela_mensagem_cadastro(self, mensagem):
        self.manipula_seta(2)
        self.telamenu.exibe_mensagem_cadastro(mensagem, EstiloElementos.posicao_mensagem_cadastro())
        self.telamenu.exibe_texto_menu("VOLTAR", self.TAMANHO_OPCAO_MENU_SELECAO, self.COR_PRETO,
                                       Posicao(self.POSICAOX_OPCAO_MENU, 70))
        pygame.display.flip()


    def manipula_seta(self, menuselecao):
        if (menuselecao >= 1) & (menuselecao <= len(self.lopcoes)):
            self.telamenu.exibe_imagem(self.caminhoimagem, "seta.gif",
                                       Posicao(self.POSICAOX_SETA, self.POSICAOY_SETA + 40 * (menuselecao - 1)))

    def menu_selecao(self, menuselecao):
        ## TELA MENU PRINCIPAL
        if (menuselecao >= 1) & (menuselecao <= len(self.lopcoes)):
            self.exibe_opcoes_menu(menuselecao)

        ## REGRAS DA TELA MENU PRINCIPAL:
        elif (menuselecao < 1) | (menuselecao == 113) | (menuselecao == 213) | (menuselecao == 216):
            menuselecao = 1  # nao incrementar estado se apertar p cima de novo
        elif menuselecao == len(self.lopcoes) + 1:
            menuselecao = len(self.lopcoes)  # nao incrementar estado se apertar p baixo de novo

        elif (menuselecao == 11) | (menuselecao == 99) | (menuselecao == 101):
            menuselecao = 100  # se der enter na opcao 'INICIAR'
        elif (menuselecao == 12) | (menuselecao == 199) | (menuselecao == 201):
            menuselecao = 200  # se der enter na opcao 'CADASTRAR'
        elif menuselecao == 13:
            menuselecao = 3  # PARA, POR ENQUANTO, NAO FUNCIONAR NADA EM CONFIGURACOES
        elif menuselecao == 14:
            exit()  # se der enter na opcao 'SAIR'

        ## TELA LOGIN
        elif menuselecao == 100:
            self.telalogin.exibe_tela_informar_dados()
            if self.telalogin.cadastro():
                self.controladorjogo.jogo()
            else:
                menuselecao = 103
                self.exibe_tela_mensagem_cadastro(self.mensagemdadoinvalido)

        ## REGRAS DA TELA LOGIN
        elif menuselecao == 103:
            self.exibe_tela_mensagem_cadastro(self.mensagemdadoinvalido)
        elif (menuselecao == 102) | (menuselecao == 104):
            menuselecao = 103

        ## TELA CADASTRO
        elif menuselecao == 200:
            self.telacadastro.exibe_tela_informar_dados()
            if self.telacadastro.cadastro():
                menuselecao = 203
                self.exibe_tela_mensagem_cadastro(self.mensagemsucesso)
            else:
                menuselecao = 206
                self.exibe_tela_mensagem_cadastro(self.mensagemerro)
        elif menuselecao == 203:
            self.exibe_tela_mensagem_cadastro(self.mensagemsucesso)
        elif menuselecao == 206:
            self.exibe_tela_mensagem_cadastro(self.mensagemerro)

        ## REGRAS DA TELA CADASTRO
        elif (menuselecao == 202) | (menuselecao == 204):
            menuselecao = 203
        elif (menuselecao == 205) | (menuselecao == 207):
            menuselecao = 206

        return menuselecao


    def menu(self):
        menuselecao = 1
        # self.exibir_musica()
        while True:
            self.exibir_tela_menu()
            self.manipula_seta(menuselecao)
            menuselecao = self.menu_selecao(menuselecao)
            pygame.display.update()
            pygame.display.flip()
            for e in pygame.event.get():
                if e.type == QUIT:
                    exit()
                if e.type == KEYDOWN:
                    if e.key == K_DOWN:
                        menuselecao += 1
                    elif e.key == K_UP:
                        menuselecao -= 1
                    elif e.key == K_RETURN:
                        menuselecao += 10
                    elif e.key == K_ESCAPE:
                        menuselecao -= 10