Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[resolvido] Método retornar vetor ou aceitar lista
2 participantes
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Unity
Página 1 de 1
[resolvido] Método retornar vetor ou aceitar lista
- Falei muito pra chegar na pergunta, se quiser pode pular isso aqui.:
- Eu gostaria de ter uma lista embaralhada (ou vetor, na verdade tanto faz). Achei essa metodologia aqui, na internet. Ela usa vetor, se entendi direito, e no final o vetor fica embaralhado.
Não gosto da ideia de fazer no meio do código, porque vai ser na inicialização do jogo e já está um código grandinho, então queria escrever um método e ter a lista embaralhada.
Só que não sei como fazer o método retornar o vetor. Um lista, consegui fazer ele retornar (meio caminho andado), mas vetor, não.
Pra ser um pouco mais complicado, eu quero alimentar a lista (organizada) num método e embaralhar ela em outro (pra depois aproveitar esse método de embaralhar em outros jogos). O plano é criar um vetor do tamanho da lista, alimentar ele com os valores dela, usar esse método, e alimentar uma segunda lista com os valores do vetor embaralhado.
Só que aí, não consigo colocar a lista preenchida como argumento pra alimentar o segundo método.
Enquanto escrevia, até pensei numa segunda metodologia, talvez mais simples, pra fazer o embaralhamento da lista (pego um índice aleatório, alimento a segunda lista com ele, apago ele da primeira - não testei, só pensei). Mas ainda gostaria de saber a sintaxe pra entrar com uma lista ou sair com um vetor, em um método.
Como é a sintaxe pra entrar com uma lista (como argumento) ou sair com um vetor (como retorno), em um método?
Última edição por saim em Seg 21 Set 2020, 16:21, editado 1 vez(es)
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [resolvido] Método retornar vetor ou aceitar lista
O C# dispõe muitos recursos pra trabalhar com listas. O que você precisa é de um método que retorne um vetor (não sei se você ta chamando a lista de vetor (como muitos chamam o array) ou se está falando de um Vector2 / Vector3) e receba uma lista como parâmetro de entrada. De todo modo, você só precisa dar um return no objeto que você quer retornar que seja do mesmo tipo que foi especificado na construção do seu método.
Seria algo parecido com isso:
Qualquer coisa, mostre o código que você fez onde você não consegue retornar o que deseja pra vermos o que está sendo feito de errado. Abraços!
Seria algo parecido com isso:
- Código:
public Vetor GetVetorByList<T>(List<T> lista){
lista = lista.OrderBy(a => Guid.NewGuid()).ToList(); // Embaralhar
// Sua lógica/magia aqui
return _vetorCriado;
}
- Sobre o embaralhar:
- O método orderby ordena uma lista baseado em um parâmetro que ela contém. Neste caso, com um lambda, criamos um guid pra cada item da lista pra usar como parâmetro de ordenação. Caso não saiba, um Guid é uma "string" com um padrão alfanumérico gerado aleatoriamente que é praticamente único, permitindo a ordenação.
Qualquer coisa, mostre o código que você fez onde você não consegue retornar o que deseja pra vermos o que está sendo feito de errado. Abraços!
Super Games e saim gostam desta mensagem
Re: [resolvido] Método retornar vetor ou aceitar lista
Estou chamando o array de vetor (estou fazendo um curso online, o instrutor só usa o termo "vetor"...)Willy escreveu:não sei se você ta chamando a lista de vetor (como muitos chamam o array) ou se está falando de um Vector2 / Vector3
Ainda não cheguei na aula que ensina essa sintaxe, embora já tenha visto algo parecido nessas minhas buscas. Como o "algo parecido" foi colocado como um método ineficiente, não dei bola. Mas o seu código é só parecido, não é igual, então peço detalhes. O que está acontecendo aí e como se lê cada pedaço dessa linha? Se entendi um pouco, a variável "lista" é a list dada como argumento, que fica embaralhada ao final da primeira linha de código.Willy escreveu:
- Código:
public Vetor GetVetorByList<T>(List<T> lista){
lista = lista.OrderBy(a => Guid.NewGuid()).ToList(); // Embaralhar
// Sua lógica/magia aqui
return _vetorCriado;
}
Especificamente, eu venho lendo o "=>" como uma seta, mas pode ser "igual ou maior", também.
Nesse "return _vetorCriado;", o código pode retornar uma matriz preenchida? Ou funcionaria só dentro do contexto de interpretar "vetor" como Vector2/Vector3?
Não sei o que é um lambda e não conhecia o conceito do Guid. Me fale mais sobre eles...Willy escreveu:
- Sobre o embaralhar:
O método orderby ordena uma lista baseado em um parâmetro que ela contém. Neste caso, com um lambda, criamos um guid pra cada item da lista pra usar como parâmetro de ordenação. Caso não saiba, um Guid é uma "string" com um padrão alfanumérico gerado aleatoriamente que é praticamente único, permitindo a ordenação.
Você disse que o Guid é alfanumérico e praticamente único. Perguntas:
- Estou acostumado a ordenar as coisas por padrões numéricos. O Unity é capaz de usar strings pra isso, então?
- "praticamente único" significa que é gerado aleatoriamente a cada vez que é chamado?
Na verdade, já consegui o que queria, mas sem entrar com a List como argumento, então o código ESTÁ funcionando... mas seu exemplo foi fundamental pra duas coisas: me mostrar a sintaxe que eu queria e me ensinar um método mais eficiente. Vou mostrar o método que estou usando:Willy escreveu:Qualquer coisa, mostre o código que você fez onde você não consegue retornar o que deseja pra vermos o que está sendo feito de errado. Abraços!
- Código:
public List<string> primeiralista()
{
List<string> minhalista1 = new List<string>();
List<string> minhalista2 = new List<string>();
int i;
for (i = 0; i < 2; i++)
{
minhalista1.Add("A");
}
for (i = 0; i < 2; i++)
{
minhalista1.Add("D");
}
for (i = 0; i < 2; i++)
{
minhalista1.Add("M");
}
for (i = 0; i < 2; i++)
{
minhalista1.Add("V");
}
// embaralha a lista
while (minhalista1.Count > 0)
{
i = Random.Range(0, minhalista1.Count); //índice
minhalista2.Add(minhalista1[i]);
minhalista1.RemoveAt(i);
}
return minhalista2;
}
Aí, eu queria encerrar o
Como pra mim tanto faz usar lists ou
Aproveitando: Eu deveria dar um jeito de eliminar a minhalista1 da memória ou isso é feito automaticamente, ao encerrar o método?
EDIT: Na verdade, não consegui implementar seu código... Como eu só queria embaralhar e testar como colocar a lista como argumento, fiz da seguinte forma:
- Código:
public List<string> embaralha<T>(List<T> lista)
{
lista = lista.OrderBy(a => Guid.NewGuid()).ToList(); // Embaralhar
return lista;
}
eAssets\Resources\Scripts\Inicializa.cs(81,17): error CS1061: 'List' does not contain a definition for 'OrderBy' and no accessible extension method 'OrderBy' accepting a first argument of type 'List' could be found (are you missing a using directive or an assembly reference?)
Assets\Resources\Scripts\Inicializa.cs(82,10): error CS0029: Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.List'
Até consegui fazer funcionar aqui, mas se puder me contar porque não deu certo, vai ser massa.
Pra funcionar, fiz o seguinte:
- Código:
public List<string> embaralha(List<string> listaentra)
{
int i;
List<string> listasai = new List<string>();
while (listaentra.Count > 0)
{
i = Random.Range(0, listaentra.Count); //índice
listasai.Add(listaentra[i]);
listaentra.RemoveAt(i);
}
return listasai;
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Super Games gosta desta mensagem
Re: [resolvido] Método retornar vetor ou aceitar lista
Perdoe-me pela demora, o mundo corporativo não é fácil.
Bom, vamos dar uma destrinchada nesse code maluco ai.
Corrigindo pra sua necessidade, a declaração do seu método deve ser assim:
Em seguida, definimos o nome do método (EmbaralharLista) e definimos os parâmetros de entrada, que no caso, é a lista de string que você quer embaralhar conforme você mesmo disse:
Não era necessário retornar uma nova lista pra ela mesma, então bastaria remover o "lista =". O correto era estar assim:
Ele tem esse padrão de caracteres e traços. Essa combinação é gerada aleatoriamente e é quase impossível de gerar o mesma combinação mais de uma vez, por isso ela é dita como "quase única".
E sim, você pode ordenar por strings, inteiros, guids ou criar suas próprias regras de ordenação.
Quanto a sua tentativa de aplicar o código e os erros disparados:
Bom, eu acho que essa reposta ficou foi é confusa pra caramba.
Então fiz um pequeno projetinho de console pra que você rode e veja a magia acontecendo. Basta abrir seu visual studio ou editor preferido, colocar o código e rodar:
Em caso de dúvidas, é só falar.
Se desejar, podemos fazer uma call pelo Discord e eu te ajudo a implementar isso.
[Edit]
Ah, você fez várias perguntas. Provavelmente eu esqueci de responder algumas, então pode puxar minha orelha e dizer "pô Willy, e isso aqui?"
Bom, vamos dar uma destrinchada nesse code maluco ai.
Corrigindo pra sua necessidade, a declaração do seu método deve ser assim:
- Código:
public List<string> EmbaralharLista(List<string> listaParaEmbaralhar){
Em seguida, definimos o nome do método (EmbaralharLista) e definimos os parâmetros de entrada, que no caso, é a lista de string que você quer embaralhar conforme você mesmo disse:
saim escreveu:Se entendi um pouco, a variável "lista" é a list dada como argumento, que fica embaralhada ao final da primeira linha de código.
- Ué, cadê o raio do T?:
- Muito provavelmente, no exemplo original, você se assustou com que estava na chamada do método. Na verdade, eu fui um pouco infeliz em demonstrar assim. Esse T é comumente usado quando esperamos um objeto genérico, ou seja, o método esperava uma lista de qualquer tipo. Seja string, int, bool, o que for. Pode ignorar isso por enquanto, você usará isso futuramente pra fazer helpers! Claro, isso é assunto pra ooooutra hora.
Não era necessário retornar uma nova lista pra ela mesma, então bastaria remover o "lista =". O correto era estar assim:
- Código:
return listaParaEmbaralhar.OrderBy(a => Guid.NewGuid()).ToList();
Ouid, ele tem essa carinha aqui ó: E9BEC635-3999-4F63-A0C9-1C81EE18CE41Perguntas:
- Estou acostumado a ordenar as coisas por padrões numéricos. O Unity é capaz de usar strings pra isso, então?
- "praticamente único" significa que é gerado aleatoriamente a cada vez que é chamado?
Ele tem esse padrão de caracteres e traços. Essa combinação é gerada aleatoriamente e é quase impossível de gerar o mesma combinação mais de uma vez, por isso ela é dita como "quase única".
E sim, você pode ordenar por strings, inteiros, guids ou criar suas próprias regras de ordenação.
Hm... Não posso te afirmar, mas acredito que o GarbageCollector faça isso automaticamente pra você. De todo modo, não se preocupe com isso.Aproveitando: Eu deveria dar um jeito de eliminar a minhalista1 da memória ou isso é feito automaticamente, ao encerrar o método?
Quanto a sua tentativa de aplicar o código e os erros disparados:
Este erro acontece porque provavelmente você não importou o linq, o grande trunfo do c# pra manipular dados. Basta colocar isso lá em cima, junto com os demais usings:'List' does not contain a definition for 'OrderBy'
- Código:
using System.Linq;
Bom, eu acho que essa reposta ficou foi é confusa pra caramba.
Então fiz um pequeno projetinho de console pra que você rode e veja a magia acontecendo. Basta abrir seu visual studio ou editor preferido, colocar o código e rodar:
- Embaralhador Quântico :
- Código:
using System;
using System.Collections.Generic;
using System.Linq;
namespace Saim
{
class Program
{
static void Main(string[] args)
{
// Esta é a lista que você quer embaralhar.
List<string> _letras = new List<string>
{
"A",
"B",
"C",
"D",
"E"
};
Console.WriteLine("Antes de embaralhar:");
Console.WriteLine(string.Join(", ", _letras));
_letras = Embaralhar(_letras);
Console.WriteLine("\nDepois de embaralhar:");
Console.WriteLine(string.Join(", ", _letras));
}
// Remova o static na sua aplicação. No contexto do console, foi necessário.
public static List<string> Embaralhar(List<string> listaParaEmbaralhar)
{
return listaParaEmbaralhar.OrderBy(a => Guid.NewGuid()) // Não se esqueça de importar o System.Linq!
.ToList();
}
}
}
Em caso de dúvidas, é só falar.
Se desejar, podemos fazer uma call pelo Discord e eu te ajudo a implementar isso.
[Edit]
Ah, você fez várias perguntas. Provavelmente eu esqueci de responder algumas, então pode puxar minha orelha e dizer "pô Willy, e isso aqui?"
Re: [resolvido] Método retornar vetor ou aceitar lista
Hehehe. Acho que está tudo respondido, sim. Falta testar, mas isso vai demorar um pouquinho (mundo corporativo, etc.)
Mas tem uma resposta que eu vou pedir pra elaborar. Ou melhor, vou elaborar e pedir pra dizer se está certo. É a leitura do código. Vamos lá:
E assim que testar, vou ter minha lista embaralhada de um jeito mais eficiente.
Agora me conta outra coisa... se eu quisesse retornarum vetor uma matriz ao invés de uma lista, seria possível? Não quero, mas estou curioso.
Mas tem uma resposta que eu vou pedir pra elaborar. Ou melhor, vou elaborar e pedir pra dizer se está certo. É a leitura do código. Vamos lá:
- Código:
return listaParaEmbaralhar.OrderBy(a => Guid.NewGuid()).ToList();
return é pra retornar
listaParaEmbaralhar a lista entrada como argumento
OrderBy organizada da seguinte forma:
a ??? pega a lista ??? (aproveitando, poderia ser outra variável ou "a" é parte da sintaxe?)
=> seguindo essa orientação aqui:
Guid.NewGuid usa uma ordem aleatória
ToList(); e faz uma lista, novinha, com o resultado
E assim que testar, vou ter minha lista embaralhada de um jeito mais eficiente.
Agora me conta outra coisa... se eu quisesse retornar
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [resolvido] Método retornar vetor ou aceitar lista
Ahhh, você estava literalmente falando da leitura.Mas tem uma resposta que eu vou pedir pra elaborar. Ou melhor, vou elaborar e pedir pra dizer se está certo. É a leitura do código. Vamos lá:
Bom, vamos lá:
Até aqui ta beleza!return é pra retornar
listaParaEmbaralhar a lista entrada como argumento
Sim, o OrderBy orderna em ordem crescente. Se desejar, pode usar o OrderByDescending que faz a ordenação decrescente.OrderBy organizada da seguinte forma:
a ??? pega a lista ??? (aproveitando, poderia ser outra variável ou "a" é parte da sintaxe?)
Como você disse, sim, a nomenclatura pode (e deveria, pelas boas práticas) ser outra. Normalmente, utiliza-se um nome que representa o conteúdo da lista. Por exemplo, imagine uma lista de carros:
- Código:
_listaDeCarros.OrderBy(carro => carro.cor);
- Código:
_listaCarrosParaPintarDePreto.Foreach(carro => carro.cor = "preto");
Se sua lista tem 5 itens, então serão 5 Guids gerados. Como eles são aleatórios, a ordenação consegue se basear neles.=> seguindo essa orientação aqui:
Guid.NewGuid usa uma ordem aleatória
- Código:
ToList(); e faz uma lista, novinha, com o resultado
Sim! Da mesma forma que temos o ToList, temos também o ToArray. Só mude o tipo de retorno e é sucesso.Agora me conta outra coisa... se eu quisesse retornar um vetor uma matriz ao invés de uma lista, seria possível? Não quero, mas estou curioso.
Re: [resolvido] Método retornar vetor ou aceitar lista
Show de bola, Willy!
MUITO obrigado mesmo!
Eu já ia dar o assunto como encerrado, mas...
MUITO obrigado mesmo!
Eu já ia dar o assunto como encerrado, mas...
Sim, eu incluí o "using System.Linq;", no começo... na verdade, vou te mostrar o código todo, pro caso do problema ser em outro lugar. Mas num spoiler, porque chega de textão, né?Assets\Resources\Scripts\Inicializa.cs(77,43): error CS0103: The name 'Guid' does not exist in the current context
- não repare a falta de constância nos comentários:
- Código:
using System.Collections;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using System.Linq;
public class Inicializa : MonoBehaviour
{
public GameObject casatab1;
public Material material1;
//Essas variáveis serão definidas dentro do Unity
void Start()
{
float xx, yy, size;
int ncol, nlin, i, j;
Material material2 = Resources.Load<Material>("Materials/PretoSprite"); // carrega o material PretoSprite, que está na pasta Resources/Materials - só pra saber como carregar via código
// coloca as casas no tabuleiro
ncol = 9; nlin = 9; // número de colunas e linhas
size = 0.64f;
GameObject[,] guarda = new GameObject[nlin, ncol];
List<string> listapedras = new List<string>();
listapedras = primeiralista();
for(i = 0; i < nlin; i++)
{
for (j = 0; j < ncol; j++)
{
xx = (-4.0f + j) * size;
yy = (-4.0f + i) * size;
Vector3 posCria = new Vector3(xx, yy, 0);
guarda[i, j] = Instantiate(casatab1, posCria, Quaternion.identity); // guarda a instância gerada numa variável
guarda[i, j].transform.GetComponent<Testavar>().minhavar = listapedras[0];
listapedras.RemoveAt(0);
if ((i + j) % 2 == 0)
{
guarda[i, j].transform.GetComponent<Renderer>().material = material1;
}
else
{
guarda[i, j].transform.GetComponent<Renderer>().material = material2;
}
print(guarda[i, j].transform.GetComponent<Testavar>().minhavar);
}
}
print(listapedras.Count);
}
public List<string> primeiralista()
{
// retorna uma lista alimentada com as strings "A", "D", "M" e "V", embaralhada
List<string> listaorganizada = new List<string>();
List<string> listaembaralhada = new List<string>();
int i;
for (i = 0; i < 25; i++)
{
listaorganizada.Add("A");
listaorganizada.Add("D");
listaorganizada.Add("M");
listaorganizada.Add("V");
}
listaembaralhada = embaralha(listaorganizada);
return listaembaralhada;
}
/*public List<string> embaralha(List<string> listaentra)
{
// embaralha uma lista de strings e retorna a lista embaralhada
int i;
List<string> listasai = new List<string>();
while (listaentra.Count > 0)
{
i = Random.Range(0, listaentra.Count); // índice aleatório de zero ao tamanho da lista
listasai.Add(listaentra[i]); // coloca o valor elemento i na sequencia da nova lista
listaentra.RemoveAt(i); // remove o elemento i, reduzindo a lista original
}
return listasai;
}*/
public List<string> embaralha(List<string> listaParaEmbaralhar)
{
return listaParaEmbaralhar.OrderBy(a => Guid.NewGuid()).ToList();
}
}
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [resolvido] Método retornar vetor ou aceitar lista
Sempre que você tiver um erro do tipo "does not exist in the current context", verifique se todos os imports necessários foram feitos. Para o Guid funcionar, você precisa importar o System. Portanto, basta adicionar lá no topo:
Se você estiver usando o VisualStudio, se você clicar sobre o erro e apertar "Ctrl" + ".", o VS irá recomendar possíveis soluções para seu erro. Uma delas é a importação da biblioteca, o que é uma mão na roda!
- Código:
using System;
Se você estiver usando o VisualStudio, se você clicar sobre o erro e apertar "Ctrl" + ".", o VS irá recomendar possíveis soluções para seu erro. Uma delas é a importação da biblioteca, o que é uma mão na roda!
Re: [resolvido] Método retornar vetor ou aceitar lista
Entendi. É que lááá em cima, você tinha dito pra usar o System.Linq; nem me passou pela cabeça que pra usar o .Linq eu precisaria, antes, estar usando o System; sem.Linq.
No mais, tudo certinho! MUITO obrigado!!!
No mais, tudo certinho! MUITO obrigado!!!
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Willy gosta desta mensagem
Tópicos semelhantes
» Lista de magias[Resolvido]
» [Resolvido] [Online] Organizar uma lista com K/D?
» [RESOLVIDO] [AJUDA] Lista de arquivos
» [Resolvido]como criar lista de score com ds_list
» Vamos aceitar essa ditadura?
» [Resolvido] [Online] Organizar uma lista com K/D?
» [RESOLVIDO] [AJUDA] Lista de arquivos
» [Resolvido]como criar lista de score com ds_list
» Vamos aceitar essa ditadura?
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Unity
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos