Ir ao conteúdo
  • Cadastre-se

Python Queria dicas sobre esse codigo, e acho preciso de muitas


Posts recomendados

Eu estava estudando python (a passos de tartaruga por sinal), e resolvi fazer um programa no python, envolvendo vários assuntos como por exemplo: probabilidade, estruturas condicionais e de repetições, uso de funções, funções encadeadas, importação de modulos (inclusive um pessoal) e etc... mas tenho quase certeza que esse codigo esta mal estruturado, e fica um pouco difícil de fazer modificações nele, por exemplo esse "jogo" simula uma aventura em cavernas, e na loja existe apenas a espada, se fosse adicionar outro item seria complicado, não so nas funções que envolvem esses "itens", como na passagem dos resultados que vem da função, não sei se deu pra entender mas vai ai o código, tentei usar classes mas não estou conseguindo entender, tem umas coisas de __init__ sla o que, mas enfim vai ai o código

 

os codigos A e B acho que devem ser colocados na mesma pasta (não testei em pastas diferentes)

CODIGO A (modulo pessoal), salve no computador como modulosgerais.py

def escreva(txt, distancia_da_borda=2, topo='=', modo=0, estatico=0):
    """
    Eu nem sei o que esta acontecendo nessa função direito, acho que escolhi nomes errados as variaveis
    agor percebo a nescessidade de deixar o código comentado
    txt: uma string que contem o texto a ser escrito
    distancia_da_borda: é a distancia em que o texto na variavel "txt" vai se afastar da borda
    topo: o caractere que irá se repitir
    modo: é a forma que deve ser impressa, são esses modos
          modo = 0; imprime o topo em cima e em baixo
          modo = 1; imprime o topo apenas em cima
          modo = 2; imprime o topo apenas em baixo
          modo < 0 ou modo > 2; não imprime o topo
    """

    #verficações que torne impossível ou não uniforme o texto

    #verifica se o alcance é do tipo float ou uma string, se for transforma-o em inteiro
    if type(distancia_da_borda) != int:
        raise ValueError('o alcance deve ser um numero inteiro')

    if estatico == 0:
        #coloca 1 de espaco para cada lado
        distancia_da_borda *= 2
        #tamanho do topo sem as repetições
        tamanho_do_topo = len(topo)
        #tamanho do texto, util se o topo for uma string com mais de um caractere
        tamanho_do_txt = (len(txt) + distancia_da_borda) // tamanho_do_topo
        tamanho_do_topo_total = tamanho_do_txt * tamanho_do_topo
    else:
        tamanho_do_txt = estatico
        tamanho_do_topo_total = estatico

    if modo == 0 or modo == 1:
        for x in range(tamanho_do_txt):
            print(topo, end='')
        print()
    print(txt.center(tamanho_do_topo_total))
    if modo == 0 or modo == 2:
        for x in range(tamanho_do_txt):
            print(topo, end='')
        print()

Codigo B. 17Kb (codigo principal), ai salva como quiser

"""
Sinto muito pela falta de comentarios no codigo, acabou ficando bem extenso
"""

from time import sleep
from random import randint, choice, random
from modulosgerais import escreva


def game_over():
    inventory_and_status()
    sleep(6)
    print(f'{name}, fim de jogo!')
    sleep(1)
    print('Game Over')
    sleep(3)

def cave(espada):
    def batalha(espada):
        poder_dragao = random()
        estado_espada = randint(0, 1)
        print(espada)
        if espada == 1:
            poder_jogador = 1/2 #50%, 0.5, metade
        elif espada == 2:
            poder_jogador = 3/4 #75%, 0.75, tres quartos

        print(f'o poder do dragão é de {poder_dragao}')
        print(f'o estado da espada é {estado_espada}')
        print(f'o poder do jogador é {poder_jogador}')
        if poder_dragao > poder_jogador:#dragao mais forte que o jogador
            return 0 #morte
        else:#dragao mais fraco que o jogador
            ganho = randint(100, 700)
            if estado_espada == 0:#espada quebrada
                return 2 #vitoria, sem espada
            else:
                return 1 #vitoria com espada
        
    if bad_dragon == action:#verifica se o dragão estar na caverna
        print(f'{name}, você fez sua escolha')
        sleep(2)
        print('''
      ~~~~~~~~~~~----__         .:.          __----~~~~~~~~~~~------___
 ~~ ~--__          ......====\\~~    .:::.    ~~//====......          __--~ ~~
         ~\ ...::::~~~~~~  //|||    .:::::.    |||\\  ~~~~~~::::... /~
        -~~\_            //  |||***.(:::::).***|||  \\            _/~~-
             ~\_        // *******.:|\^^^/|:.******* \\        _/~
                \      / ********.::(>: :<)::.******** \      /
                 \   /  ********.::::\\|//::::.********  \   /
                  \ /   *******.:::::(o o):::::.*******   \ /
                   /.   ******.::::'*|V_V|***`::.******   .\\
                     ~~--****.:::'***|___|*****`:.****--~~
                           *.::'***//|___|\\*****`.*
                           .:'  **/##|___|##\**    .
                          .    (v(VVV)___(VVV)v)
''')
        print('oh não, você entrou na caverna do dragão ruim')
        sleep(1.5)
        if espada != 0:#verifica se você tem alguma espada
            resultado = batalha(espada)
            print('opa, você tem uma espada, boa sorte!')
            sleep(2)
            '''print('você tem 50% de chance de matar o dragão')
            sleep(2)'''
            if resultado == 0:
                print('infelizmente o dragao é mais forte que, você morreu')
                sleep(2)
                game_over()
                return 0

            elif resultado == 1:
                conquista = randint(100, 700)
                print('após uma batalha feroz você conseguiu matar o dragão')
                sleep(2)
                print('e pegou todo o ouro que conseguiu')
                sleep(2)
                print(f'que foi de {conquista} ouros')
                sleep(2)
                return (conquista, espada)

            elif resultado == 2:
                conquista = randint(100, 700)
                print('após uma batalha feroz você conseguiu matar o dragão')
                sleep(2)
                print('e pegou todo o ouro que conseguiu')
                sleep(2)
                print(f'que foi de {conquista} ouros')
                sleep(2)
                print('mas sua espada quebrou na batalha, compre outra')
                sleep(2)
                espada = False 
                return (conquista, espada)

                
                
        else:
            print('você morreu sem a menor chance de defesa')
            sleep(2)
            print('(Você pode comprar uma espada para maximizar suas chances)')
            game_over()
            return 0

    else:
        doacao = randint(1, 500)
        print(f'{name}, você fez sua escolha')
        sleep(2)
        print('que bom! você econtrou um dragão legal')
        sleep(1)
        print(f'ele resolveu lhe doar {doacao} de seu precioso ouro')
        sleep(2)
        print('é muita sorte hahaha')
        return (doacao, espada)


def good_names():
    List_of_names = (('Ruby', 'Mike', 'Antony', 'Jonh',\
                       'Jack', 'Snike', 'Builderman'),\
                     ('Sarah', 'Emma', 'Olivia', 'Sophia',\
                      'Harpista', 'Scarlet', 'Chloe', 'Eva'),\
                     ('Andy', 'Avery', 'Bobby', 'Cameron',\
                      'Carson', 'Dana', 'Harper', 'Jesse',\
                      'Joe', 'Julian', 'Kei'))

    return choice(choice(List_of_names))

def inventory_and_status():
    escreva(f'Iventário e status do(a) {name}', estatico=40)
    escreva('<-] Status [->', modo=1, estatico=40)
    print('\n')
    escreva(f'Quantidade de ouro ja ganha: [{all_gold}]', modo=-1, estatico=40)
    escreva(f'Quantidade de ouro atual: [{gold}]', modo=-1, estatico=40)
    escreva(f'Numero de cavernas esquerdas: [{cav_esq}]', modo=-1, estatico=40)
    escreva(f'Numero de cavernas direitas: [{cav_dir}]', modo=-1, estatico=40)
    escreva(f'Numeros de cavernas entradas: [{caves}]', modo=2, estatico=40)
    escreva('<-] Iventário [->', modo=1, estatico=40)
    print('\n')
    if sword == 1:
        escreva('Espada de madeira', modo=2, estatico=40)
    elif sword == 2:
        escreva('Espada metálica', modo=2, estatico=40)
    else:
        print('=' * 40)

def shop(ouro, espada):
    print(f'{name}, você avista uma caravana estranha')
    sleep(1)
    if caves >= 3:#verifica se você entrou em 3 cavrnas pelo menos, se sim libera a loja
        print('um ser indescritível lhe atende...')
        sleep(2)
        print('O que deseja forasteiro?')
        sleep(2)
        while True:
            escreva('Shop', estatico=40)
            print('0 - Sair [free]'.center(40))
            if espada == 0:#se você não tiver a espada aparece na loja
                print('1 - espada de madeira [300 ouros]'.center(40))
            elif espada == 1:
                print('1 - espada metálica [500 ouros]'.center(40))
            else:#se você tiver, ela aprece mas sem o preço
                print('1 - espada [sold]'.center(40))
            print('='*40)
            buy = int(input('>>> '))
            if input('tem certeza? [S/N]: ').upper() == 'S':
                if buy == 0:
                    print(f'"Grrr, até outro momento {name}"')
                    sleep(2)
                    print('O ser estranho e a caravana desaparece misteriosamente')
                    sleep(2)
                    print('(É estranho como ele sabe seu nome)')
                    return (ouro, espada)
                    break
                elif buy == 1:#se escoolher comprar uma espada
                    if espada == 0:#se não tiver espada alguma
                        if ouro >= 300:
                            espada = 1
                            ouro -= 300
                            print('Compra concluida')
                            sleep(2)
                            print('Apesar de ser de madeira é bela, não acha?')
                            sleep(1)
                            print('\n')
                        else:
                            print('"Não me faça perder tempo, *****"')
                            sleep(2)
                            print('(Consiga mais ouro, e poderá comprar essa espada)')
                            sleep(2)
                            print(f'{name} você tem {ouro} de ouro, e falta {300 - ouro} para comprar essa bela espada de madeira')
                            sleep(2)
                            print('\n')
                    elif espada == 1:#se tiver coma uma espada de madeira
                        if ouro >= 500:
                            espada = 2
                            ouro -= 500
                            print('Compra concluida')
                            sleep(2)
                            print('Melhor que uma espada de madeira, não acha?')
                            sleep(1)
                            print('(Estranhamente sua espada de madeira deixou de existir)')
                            sleep(2)
                            print('\n')
                        else:
                            print('"Não me faça perder tempo, *****"')
                            sleep(2)
                            print('(Consiga mais ouro, e poderá comprar essa espada)')
                            sleep(2)
                            print(f'{name} você tem {ouro} de ouro, e falta {500 - ouro} para comprar essa bela espada metalica')
                            sleep(2)
                            print('\n')
                    else:
                        print('você não pode comprar mais espadas')
                else:
                    print('Compra invalida, verifique sua escolha e/ou seu iventário')
            else:
                continue
    else:#se não, ele bloqueia a loja
        print('Mas ao chegar perto ela se afasta misteriosamente')
        sleep(2)
        print('Existem rumores de que ao entrar em pelo menos 3 cavernas')
        sleep(2)
        print('Algo acontecerá')
        sleep(1)
        return 0
        
        
def rules():
    print('o jogo caverna do dragão, é um jogo de exploração')
    sleep(2)
    print('tudo consiste em conseguir ouro')
    sleep(2)
    print('o jogador deve escolher entre duas cavernas')
    sleep(2)
    print('pode também entrar na loja (se ja tiver ido em pelo menos 3 cavernas)')
    sleep(2)
    print('pode ver também seus status e inventario')
    sleep(2)
    print('sempre haverá um dragão na caverna')
    sleep(1.5)
    print('pode ser um dragão bom ou um dragão ruim')
    sleep(2)
    print('caso haja um dragão legal na caverna, ele ira dividir o ouro com você')
    sleep(2.5)
    print('ele pode lhe dar de 1 moeda até 500 moedas, isso depende do humor dele')
    sleep(2.5)
    print('mas se tiver um dragão ruim na caverna')
    sleep(2)
    print('você pode lutar com ele se estiver uma espada')
    sleep(3)
    print('uma espada de madeira lhe concede 50% de vitoria')
    sleep(2)
    print('uma espada metalica lhe concede 75% de vitoria')
    sleep(2)
    print('além disso há uma chance de 50% da espada quebrar em uma batalha')
    sleep(2)
    print('matando o dragão você coleta tudo que consegue, que vai de 100 a 700 ouros')
    sleep(2)
    print('se não tiver espada')
    sleep(1)
    print('ele irá lhe matar, e será fim de jogo')
    sleep(1.5)
    print('também pode abandonar o jogo a qualquer momento')
    sleep(1.5)
    print('boa sorte, forasteiro')
    sleep(2)
    

#Programa Principal   


print('seja bem vindo a versão 0.1 do Caverna do Dragão')
sleep(1.5)
while True:#inicia o programa

    gold = 0#ouro do personagem
    all_gold = 0#todo ouro ja ganho pelo personagem, por enquanto apenas visual
    caves = 0#numero de cavernas adentradas
    cav_esq = 0#numero de cavernas adentradas, na esquerda
    cav_dir = 0#numero de cavernas adentradas, na direita
    bad_dragon = 0#local onde está o dragão ruim, 0 = none, 1 = left, 2 = right
    name = ''#nome do personagem
    sword = 2

    if input('deseja ver as regras? (S/N)').upper() == 'S':#verifica se o jogador pretende ver as regras
        rules()
    else:#se não, começa o jogo
        #aqui acontece a definição do nome
        print('sua jornada começa aqui, boa sorte')
        name = input('qual seu nome forasteiro? (digite "idk" para um nome aleatorio: ')
        if name == 'idk' or name == 'IDK':#verifica se o jogador quer um nome aleatorio
            name = good_names()
        name = name.capitalize()
        print(f'{name} é um belo nome, não acha? ')
        while True:#incia o jogo em sí
            if bad_dragon == 0:#verifica se o dragão está fora de qualquer caverna, se sim ele aleatoriza entre 1 e 2 o local do dragão, 1 = esquerda e 2 = direita
                bad_dragon = randint(1, 2)
                '''print(bad_dragon)'''
            print('-=- O que deseja fazer? -=-')
            action = int(input('\
				\n1 - Caverna da esquerda\
				\n2 - Caverna da direita\
				\n3 - Iventário(status)\
                                \n4 - Shop\
                                \n5 - Sair do Jogo\
				\n>>> '))
            if input('Tem certeza? [S/N]: ').upper() == 'S':#pergunta se você tem certeza
                if action == 1:#caverna da esquerda
                    resultado = cave(sword)#retorna 0 se o, personagem for morto, e outro numero como doacao de ouro
                    if resultado != 0:#verifica se o personagem entrou na caverna errada, se não então diversas variaveis são atualizdas
                        caves += 1
                        gold += resultado[0]
                        all_gold += resultado[0]
                        bad_dragon = 0
                        cav_esq += 1
                        sword = resultado[1]
                    else:#se entrou na caverna errada é o fim do jogo
                        caves += 1
                        cav_esq += 1
                        break
                    
                elif action == 2:#caverna da direita
                    resultado = cave(sword)#retorna 0 se o, personagem for morto, e outro numero como doacao de ouro
                    if resultado != 0:#verifica se o personagem entrou na caverna errada, se não então diversas variaveis são atualizdas
                        caves += 1
                        gold += resultado[0]
                        all_gold += resultado[0]
                        bad_dragon = 0
                        cav_dir += 1
                        sword = resultado[1]
                    else:
                        caves += 1
                        cav_dir += 1
                        break

                elif action == 3:#olhar o status e o iventário (apenas visual por enquanto)
                    inventory_and_status()
                    print('\n')

                elif action == 4:#escolhe entrar no shop
                    resultado = shop(gold, sword)
                    if resultado != 0:#resultado sera 0 apenas se a loja estiver bloqueada
                        gold = resultado[0]
                        sword = resultado[1]
                    else:
                        print('Nem uma atualizaçã de saldo foi feita')
                    print('\n')
                    
                elif action == 5:#se deseja sair do jogo
                    game_over()
                    break
                
                else:
                    print('opção invalida, digite novamente')
            else:
                continue
        if input('deseja jogar novamente? [S/N]: ').upper() == 'N':
            break
	

quando for rodar o codigo B que deve ser executado

 

Eu preciso muito de dicas, porque esta ficando denso esse "pequeno" exercício e sinto que o que eu sei sobre python não está sendo suficiente, então se puderem me ajudar principalmente com as classes agradeceria, além disso tenho um pc bem ruim, dai uso o próprio IDLE do python, dai dificulta ainda mais, agradeço desde já, fui fazendo esse programa durante alguns dias, agradeço desde ja :). (sinto que onde mais errei foi na passagem dos resultados das funções e nos nomes das variaveis).

adicionado 13 minutos depois

O valor da variavel sword no codigo pricipal esta como 2, mas é pra por 0

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!