Nome e Sexo Personalizados do Jogador (Avançado)
3 participantes
Ren'Py Brasil :: Inicio :: Ren'Py :: Tutoriais
Página 1 de 1
Nome e Sexo Personalizados do Jogador (Avançado)
Olá, vou deixar este sisteminha para personalizar o nome e o sexo do jogador, criado a partir da dúvida em outro tópico, que apesar de ter sido sanada este sistema é mais versátil.
Mas como usa recursos mais avançados eu resolvi deixar ele separado.
Tópico da dúvida : https://renpybrasil.forumeiro.com/t66-nome-e-sexo-personalizados
(Atenção!!): Este sistema utiliza orientação a objetos (classes e instanciamento) em Python! O código está bem comentado para facilitar o entendimento, mas é recomendável saber o conceito dos objetos.
>Eu irei criar depois tópicos para falar de lógica de programação aqui pra facilitar as coisas no entendimento da linguagem Python
Eu deixei o script separado externamente para facilitar a visualização dele, mas vou deixar uma cópia aqui.
Script com "corzinha" : http://williamd1k0.github.io/renpysnippets/?snippet=sexo_jogador.rpy
Cópia:
Mas como usa recursos mais avançados eu resolvi deixar ele separado.
Tópico da dúvida : https://renpybrasil.forumeiro.com/t66-nome-e-sexo-personalizados
(Atenção!!): Este sistema utiliza orientação a objetos (classes e instanciamento) em Python! O código está bem comentado para facilitar o entendimento, mas é recomendável saber o conceito dos objetos.
>Eu irei criar depois tópicos para falar de lógica de programação aqui pra facilitar as coisas no entendimento da linguagem Python
Eu deixei o script separado externamente para facilitar a visualização dele, mas vou deixar uma cópia aqui.
Script com "corzinha" : http://williamd1k0.github.io/renpysnippets/?snippet=sexo_jogador.rpy
Cópia:
- Spoiler:
- Código:
## Bloco Python para criar uma Classe
# - Dependendo do tamanho pode ficar em outro arquivo
# - Uma classe é basicamente um contrutor (molde) para um objeto.
# - Um objeto precisa ser instanciado, como um Character por exemplo.
# - Ex: define lorem = Character("Lorem Ipsum")
# [*] [1] [2]
# 1 = Objeto instanciado.
# 2 = Classe Character.
# * = A palavra-chave "define" é uma mistura de "init + $".
# "init" = Bloco que é executado antes de iniciar o jogo.
# "$" = Palavra-chave para usar uma expressão Python em uma unica linha.
# "python" = Bloco que é usado para usar somente expressões Python.
init python:
## Bloco da classe Genero
class Genero:
## Método contrutor da classe
# - Um método contrutor é executado quando um objeto é instanciado
# - o argumento "sexo" será passado no instanciamento
# - Ex: $ sexo = Genero("m")
# - o objeto sexo irá receber todos os atributos masculinos(m)
def __init__(self, sexo):
# "self" é usado para referenciar a própria classe.
# Usando o mesmo exemplo acima, os atributos podem ser acessados por "ponto":
# sexo.genero
# sexo.artigo
self.genero = sexo
# Abaixo vem a verificação se é masculino("m") ou feminino("f").
# Entrando em cada bloco, serão definidas palavras específicas pra cada sexo.
# Usando o exemplo do artigo, o masculino usa "o" e o feminino "a"
if sexo == "m":
self.artigo = "o"
elif sexo == "f":
self.artigo = "a"
# Iníco do jogo
label start:
# um simples menu para escolher o sexo.
menu escolha_sexo:
"Escolha o seu sexo!"
"Masculino":
# Se Masculino, intancia o objeto passando o parâmetro "m"
$ sexo = Genero("m")
"Feminino":
# Se Feminino, intancia o objeto passando o parâmetro "f"
$ sexo = Genero("f")
# Este bloco python serve para poder usar o comando while para criar
# um loop na hora de digitar o nome do jogador (tentativas)
python:
# Tentativa de obter o nome
jogador = renpy.input("Olá, qual é seu nome: ")
# Número de tentativas caso entre com um valor em branco.
tentativas = 2
# Este loop obriga o jogador a entrar com o nome usando o número de tentativas.
# Caso queira obrigar sem número de tentativas, somente use o [ jogador == "" ]
while jogador == "" and tentativas > 0:
# Diminui a quantidade de tentativas a cada repetição.
tentativas -= 1
# Avisa a entrada inválida e pede novamente.
centered("Entrada inválida!")
jogador = renpy.input("Qual é seu nome: ")
# Se a entrada estiver vazia, checa o número de tentativas restantes.
if jogador == "":
# Se for zero, jogador receber None (nada/nenhum) e sai do loop.
if tentativas == 0:
jogador = None
# Se a entrada não for vazia (nome inserido), zera as tentativas e sai do loop.
else:
tentativas = 0
# Fora do bloco python, faz uma checagem do nome do jogador.
# Se não existir um nome (None), um nome padrão é definido com base no sexo escolhido.
if not jogador:
# Usando o atributo "genero" do objeto criado acima para checar.
if sexo.genero == "m":
$ jogador = "João"
else:
$ jogador = "Maria"
# Uma mensagem para mostrar o nome padrão definido.
centered "Por falta de escolha, o nome será [jogador]"
# Uma mensagem exemplo para usar os atributos do objeto.
# Se for masculino, bem-vind[sexo.artigo] vira bem-vindo
# Se for feminino, bem-vind[sexo.artigo] vira bem-vinda
narrator "Seja bem-vind[sexo.artigo], [jogador]!"
# Usando esse processo com classes, é possível personalizar várias palavras que precise.
return
Re: Nome e Sexo Personalizados do Jogador (Avançado)
Muito bom William!
Apesar de eu ter começado a faculdade de programação só nesse ano, e ainda não ter chegado em orientado a objetos, consegui entender e lembrar umas coisas do curso técnico ao ler seu código.
Entendi grande parte dele (Os comentários ajudaram bastante :3)
Apenas uma dúvida:
O self.atributo é usado somente dentro do método?
Pois vi usando os atributos genero e artigo como sexo.artigo ou sexo.genero.
Tentando entender aqui, presumi que Self.atributo é usado dentro do método e sexo.atributo é usado fora. Certo? Ou estou enganado?
Bom de qualquer forma, muito obrigado pelo tuto :3
Apesar de eu ter começado a faculdade de programação só nesse ano, e ainda não ter chegado em orientado a objetos, consegui entender e lembrar umas coisas do curso técnico ao ler seu código.
Entendi grande parte dele (Os comentários ajudaram bastante :3)
Apenas uma dúvida:
O self.atributo é usado somente dentro do método?
Pois vi usando os atributos genero e artigo como sexo.artigo ou sexo.genero.
Tentando entender aqui, presumi que Self.atributo é usado dentro do método e sexo.atributo é usado fora. Certo? Ou estou enganado?
Bom de qualquer forma, muito obrigado pelo tuto :3
Kloson- Moderador
- Mensagens : 79
Data de inscrição : 25/08/2015
Projetos : Tempo Livre
Re: Nome e Sexo Personalizados do Jogador (Avançado)
Então, isso tem a ver com os escopos.
Quando vc está criando a classe, qualquer variável dentro dela é um atributo da classe. Mas dentro da classe ali vc tem o método __init__ (que poderia ser qualquer outro método), esse método possui o escopo dele e as variáveis usadas nele serão locais, tipo, se dentro do método vc criasse uma variável genero, ela iria "morrer" no fim daquele método, o self serve para referenciar a classe, seria tipo Genero.genero, ou Genero.artigo.
Mas aí depois que vc cria um objeto a partir dessa classe Genero, que poderia ter qualquer nome (tipo "palavras"), aí vc usaria palavras.genero ou palavras.artigo.
Mas então, quando vc entender orientação a objetos isso se torna bem mais claro
Quando vc está criando a classe, qualquer variável dentro dela é um atributo da classe. Mas dentro da classe ali vc tem o método __init__ (que poderia ser qualquer outro método), esse método possui o escopo dele e as variáveis usadas nele serão locais, tipo, se dentro do método vc criasse uma variável genero, ela iria "morrer" no fim daquele método, o self serve para referenciar a classe, seria tipo Genero.genero, ou Genero.artigo.
Mas aí depois que vc cria um objeto a partir dessa classe Genero, que poderia ter qualquer nome (tipo "palavras"), aí vc usaria palavras.genero ou palavras.artigo.
Mas então, quando vc entender orientação a objetos isso se torna bem mais claro
Re: Nome e Sexo Personalizados do Jogador (Avançado)
Excelente, muito bem explicado. Até aprendi umas coisas novas com esse tutorial. o/
Tópicos semelhantes
» Nome e Sexo Personalizados
» Oi, o nome é Ammy
» Olá! Meu nome é Rodrigo
» Uma memoria do passado - Nome provisório
» Oi, o nome é Ammy
» Olá! Meu nome é Rodrigo
» Uma memoria do passado - Nome provisório
Ren'Py Brasil :: Inicio :: Ren'Py :: Tutoriais
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos