1
resposta

[Projeto] Fiz um jogo tipo Senha/Mastermind! Aprecio dicas de como melhorar

Talvez chamar de jogo seja um exagero, mas aqui está. Sei que tem alguns erros, como menu recursivo (opa...) mas estou feliz de consegui fazer esse troço sem tutorial nenhum. Compartilho com vocês meu primeiro projeto de python de verdade. Implementar o Y (numero certo, lugar errado) foi um inferno. Se vc quiser testar e estiver em um mac não esqueça de mudar "cls" para "clear" ou vai problema.

import random
import os
import copy

def exibir_titulo():
    print("Bem Vindo ao Senha \n")

def main():
    exibir_titulo()

def retornar_ao_menu():
    input("digite qualquer tecla para voltar ao menu: ")
    menu()

def menu():
    os.system("cls")
    exibir_titulo()
    print("Digite 1 Para regras")
    print("Digite 2 para jogar")
    user_input = int(input(": "))

    if user_input == 1:
        exibir_regras()

    elif user_input == 2:
        game_controller()
    else:
        print("Seleção inválida. Tente de novo")


def exibir_regras():
    os.system("cls")

    print('''Regras:
        tente adivinhar a senha numerica de 4 digitos!
    -- você tem 6 tentativas. 
        
    -- Em cada tentativa, sera exibido um "X" se o numero não estiver na sequencia,
        
    -- Um "O" caso o numero estiver na sequencia e no lugar correto;
        
    -- e um "Y" caso o numero estiver na sequencia, mas no lugar errado.
        
    --  O numero 0 não está incluido. ''')
    retornar_ao_menu()


def geracao_de_senha():
    senha = []
   
    while len(senha) < 4:
        numeros_senha = str(random.randint(1, 9))
        senha.append(numeros_senha)

    
    print("Senha Gerada!")
    #print(senha)
    return senha


def senha_checker():
    senha_definida = geracao_de_senha()
    

    rodada = 1
    guess_result = []
    not_used = []
    tamanho = len(senha_definida)

    while rodada < 9:
        try:

            guess = input(f"Adivinhe a senha. Tentativa {rodada}:")

            if len(guess) != 4:
                print("Use 4 digitos!")
                continue
            else:
                guess_result = []
                guess = list(guess)
                guess_copy = guess.copy()
                senha_definida_copy = senha_definida.copy()
                
                
            
                
                for item in range(tamanho):
                    if senha_definida_copy[item] == guess_copy[item]:
                        guess_result.append("O")
                        guess_copy[item] = None
                        senha_definida_copy[item] = None

                        
                if len(guess_result) == tamanho:
                        print(f"Parabéns! Você acertou a senha! {guess_result}")
                        retornar_ao_menu()
                        return
                    

                for i, palpite in enumerate(guess_copy):
                    if palpite is not None:
                        if palpite in senha_definida_copy:
                            guess_result.append("Y")
                            index_na_senha = senha_definida_copy.index(palpite)
                            senha_definida_copy[index_na_senha] = None
        
            while len(guess_result) < tamanho:
                        guess_result.append("X")
                    
            print(guess_result)
            guess_result = []
            rodada = rodada + 1
        except ValueError:
            print("Use só numeros")
                 
    print("acabaram as tentativas")
    print (f"A senha era {''.join(senha_definida)}")
    retornar_ao_menu()


def game_controller():
    os.system("cls")
    senha_checker()
    


menu()
1 resposta

Oi, Melina! Como vai?

Seu projeto ficou bem interessante; gostei de como você tratou O, Y e X usando cópias da lista para evitar conflitos. Ficou claro que você entendeu bem a lógica das tentativas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!