none
restringir números específicos em uma sequencia aleatória? RRS feed

  • Pergunta

  • depois de algum tempo parado estou tentando voltar ao C#,

    Apanhando muito... hehehe.

    estou recebendo 12  números aleatórios em 12 Labels dinâmicas (EntradaLabel)

    tenho mais 3 label (EntradaText) dinâmicas onde escolho 3 números para formar uma sequência de 15 números aleatórios entre 25;

    como eu poderia restringir os 3 números digitados na Label ( EntradaText) para que não repetissem na Label (EntradaLabel) na hora de gerar os 12 Aleatórios?

    caso alguém tenha uma sugestão fico Agradecido.

    pontuarei a resposta. um abraço.


    Titodj7

    domingo, 5 de setembro de 2021 14:32

Respostas

  • TitoDJ7,

       Okay, vou tentar explicar o que eu fiz no seu código... espero não esquecer de nada...:

       * Dentro do código do Form:

       1º) Dentro do "ctor" (Construtor) do formulário:
         1.1 - Retirei a chamada do "Gerador" e do "MostraResultado" transferindo para o botão "BtnGerarNumeros";
         1.2 - Configurei a propriedade "MaxLength" das três TextBox com o valor 2 permitindo somente números entre 1 e 2 dígitos;

       2º) No click do botão "BtnGerarNumeros_Click":
         2.1 - Mudei o "If" chamando uma nova função criada com o nome: "VerificaCaixaDeTexto";
         2.2 - Mudei o texto da mensagem;
         2.3 - No "Else" do "If" coloquei o "Gerador" e do "MostraResultado";

       3º) A nova função "VerificaCaixaDeTexto" é feita para validar as duas regras de negócio do sistema:
         3.1 - Não é permitido caixas de texto sem estar preenchidas;
         3.2 - Os números precisam estar entre 1 e 25;

    Observação: Essa função pode ser isolada em uma nova classe "auxiliar de formulário" e ser usada por outros formulários;

       4º) Dentro da função "Gerador" associei o preenchimento dos três nmúmero do usuário com array "EntradaText";

       5º) Foi criada uma região "KeyPress das TextBox" para isolar o tratamento de recebindo das textBox no evento "KeyPress" de cada TextBox por parte do usuário limitando a digitação para APENAS números;

       * Dentro do código da Classe "Aleatorios":

       6º) Dentro da função "GeradorNaoRepetidoss" adicionei mais uma paraâmetro na assinatura da função chamado "NumJaEscolhidos" que é uma array de Labels;

       7º) Adicionei um NOVO laço "For" dentro do laço "While" para verificar se o número digitado pelo usuário foi repetido ao sistema sortear novos números;

       8º) Dentro de AMBOS laços "For" que estão dentro do laço "While" adicionei um "Break" para sair do laço caso encontre uma ocorrência de "If" verdadeira (true);


       - O código completo do Form:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace wfaTesteEnum
    {
        public partial class FrmTesteEnum : Form
        {
            Label[] EntradaLabel = new Label[12];
            Label[] EntradaText = new Label[3];
            Label[] ResultadoLabel = new Label[15];
    
            public FrmTesteEnum()
            {
                InitializeComponent();
    
                // Você pode configurar isto de duas formas, aqui via có-digo ou dentro da área "propriedades" da caixa de texto (TextBox):
                // A ideia é permitir somente números de 0 até 99 - TxtNumeroX.MaxLength = 2;
    
                foreach (Control item in this.Controls)
                {
                    if (item is TextBox) ((TextBox)item).MaxLength = 2;
                }
    
            }
    
            private void GeraControles()
            {
                int esquerda = 50;
                int topo = 30;
    
                EntradaLabel = GeraControlesAuxiliar(12, esquerda, topo, BorderStyle.Fixed3D);
                EntradaText = GeraControlesAuxiliar(3, esquerda, topo, BorderStyle.Fixed3D);
    
                esquerda = 200;
                topo = 30;
                ResultadoLabel = GeraControlesAuxiliar(15, esquerda, topo, BorderStyle.FixedSingle);
            }
    
            private Label[] GeraControlesAuxiliar(int tamLbl, int esquerda, int topo, BorderStyle BS)
            {
                Label[] RetornoLabel = new Label[tamLbl];
    
                for (int i = 0; i < tamLbl; i++)
                {
                    RetornoLabel[i] = new Label
                    {
                        Name = "label" + i
                    };
    
                    RetornoLabel[i].Text = RetornoLabel[i].Name;
                    RetornoLabel[i].Left = esquerda; //Defina a posição do controle no formulário
                    RetornoLabel[i].Top = topo;
                    RetornoLabel[i].Font = new Font("", 15, FontStyle.Bold);
                    RetornoLabel[i].BorderStyle = BS;
    
                    this.Controls.Add(RetornoLabel[i]); // Adicione os controle ao formulário
                    topo += (RetornoLabel[i].Height + 5);
                }
    
                return RetornoLabel;
            }
    
            private void MostraResultado()
            {
                int i, ii = 0;
                int[] numerosOrganizados = new int[15];
    
                for (i = 0; i < 12; i++)
                    numerosOrganizados[i] = Convert.ToInt32(EntradaLabel[i].Text);
                for (; i < 15; i++)
                    numerosOrganizados[i] = Convert.ToInt32(EntradaText[ii++].Text);
    
                Array.Sort(numerosOrganizados);
    
                for (int y = 0; y < 15; y++)
                {
                    ResultadoLabel[y].Text = numerosOrganizados[y].ToString();
                }
    
            }
    
            private void BtnGerarNumeros_Click(object sender, EventArgs e)
            {
    
                if (VerificaCaixaDeTexto(TxtNumero1.Text) || VerificaCaixaDeTexto(TxtNumero2.Text) || VerificaCaixaDeTexto(TxtNumero3.Text))
                {
                    MessageBox.Show("Por favor, escolha os três Números Fixos entre 1 e 25.", "Advertência", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    GeraControles();
                    Gerador();
                    MostraResultado();
                }
            }
    
            /// <summary>
            /// REGRA DE NEGÓCIO 1: Não é permitido caixas de texto sem estar preenchidas.
            /// REGRA DE NEGÓCIO 2: Os números precisam estar entre 1 e 25.
            /// </summary>
            /// <param name="StrTexto">Recebe um texto</param>
            /// <returns>Retorna Verdadeiro ou Falso de acoprdop com as regras de negócio.</returns>
            private bool VerificaCaixaDeTexto(string StrTexto)
            {
                if (String.IsNullOrEmpty(StrTexto)) return true;
    
                if (!(Convert.ToInt32(StrTexto) > 0 && Convert.ToInt32(StrTexto) < 25)) return true;
    
                return false;
    
            }
    
            private void Gerador()
            {
                Aleatorios ale = new Aleatorios();
    
                EntradaText[0].Text = TxtNumero1.Text;
                EntradaText[1].Text = TxtNumero2.Text;
                EntradaText[2].Text = TxtNumero3.Text;
    
                int[] numerosSorteados = ale.GeradorNaoRepetidoss(12, 1, 25, EntradaText);
    
                Array.Sort(numerosSorteados);
    
                Control[] controles = EntradaLabel;
    
                for (int i = 0; i < controles.Length; i++)
                {
                    int valor = numerosSorteados[i];
                    controles[i].Text = valor + "";
                }
            }
    
            #region KeyPress das TextBox
    
            private void TxtNumero1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)) e.Handled = true;
            }
    
            private void TxtNumero2_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)) e.Handled = true;
            }
    
            private void TxtNumero3_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)) e.Handled = true;
            }
    
            #endregion
        }
    }

       - O código completo da Classe "Aleatorio":

    using System;
    using System.Windows.Forms;
    
    namespace wfaTesteEnum
    {
        public class Aleatorios
        {
            int[] numeros;
            private readonly Random _random;
    
            public Aleatorios()
            {
                this._random = new Random();
            }
    
            //generates random numbers
            public int GeradorAleatorio(int min, int max)
            {
                if (min > max)
                {
                    int aux = min;
                    min = max;
                    max = aux;
                }
                return this._random.Next(min, max + 1);
            }
    
            public int[] GeradorAleatorios(int longetud, int min, int max)
            {
                if (longetud <= 0)
                {
                    return null;
                }
                int[] numeros = new int[longetud];
    
                for (int i = 0; i < numeros.Length; i++)
                {
                    numeros[i] = GeradorAleatorio(min, max);
                }
                return numeros;
            }
    
            //generates non-repeating random numbers
            public int[] GeradorNaoRepetidoss(int longetud, int min, int max, Label[] NumJaEscolhidos)
            {
                if (min > max)
                {
                    int aux = min;
                    min = max;
                    max = aux;
                }
    
    
                if (longetud <= 0 || (max - min) < longetud - 1)
                {
                    return null;
                }
                int[] numeros = new int[longetud];
    
                bool repetido;
                int numero;
                int indice = 0;
                int indiceX = NumJaEscolhidos.Length;
    
                while (indice < numeros.Length)
                {
                    repetido = false;
                    numero = GeradorAleatorio(min, max);
    
                    for (int i = 0; i < indice; i++)
                    {
                        if (numeros[i] == numero)
                        {
                            repetido = true;
                            break;
                        }
                    }
    
                    for (int x = 0; x < indiceX; x++)
                    {
                        if (Convert.ToInt32(NumJaEscolhidos[x].Text) == numero)
                        {
                            repetido = true;
                            break;
                        }
                    }
    
                    if (!repetido)
                    {
                        numeros[indice] = numero;
                        indice++;
                    }
                }
    
                return numeros;
            }
    
            //ascending order
            public int[] Ordenar()
            {
                for (int i = 0; i < numeros.Length - 1; i++)
                {
                    for (int j = i + 1; j < numeros.Length; j++)
                    {
                        if (numeros[i] > numeros[j])
                        {
                            int aux = numeros[i];
                            numeros[i] = numeros[j];
                            numeros[j] = aux;
                        }
                    }
                }
                return numeros;
            }
        }
    }

       Qualquer dúvida me avise.

    []'s,
    Fabio I.
    • Editado Fabio I domingo, 5 de setembro de 2021 19:10
    • Marcado como Resposta Titodj7 terça-feira, 7 de setembro de 2021 00:21
    domingo, 5 de setembro de 2021 19:09

Todas as Respostas

  • TitoDJ7,

       Okay, vou tentar explicar o que eu fiz no seu código... espero não esquecer de nada...:

       * Dentro do código do Form:

       1º) Dentro do "ctor" (Construtor) do formulário:
         1.1 - Retirei a chamada do "Gerador" e do "MostraResultado" transferindo para o botão "BtnGerarNumeros";
         1.2 - Configurei a propriedade "MaxLength" das três TextBox com o valor 2 permitindo somente números entre 1 e 2 dígitos;

       2º) No click do botão "BtnGerarNumeros_Click":
         2.1 - Mudei o "If" chamando uma nova função criada com o nome: "VerificaCaixaDeTexto";
         2.2 - Mudei o texto da mensagem;
         2.3 - No "Else" do "If" coloquei o "Gerador" e do "MostraResultado";

       3º) A nova função "VerificaCaixaDeTexto" é feita para validar as duas regras de negócio do sistema:
         3.1 - Não é permitido caixas de texto sem estar preenchidas;
         3.2 - Os números precisam estar entre 1 e 25;

    Observação: Essa função pode ser isolada em uma nova classe "auxiliar de formulário" e ser usada por outros formulários;

       4º) Dentro da função "Gerador" associei o preenchimento dos três nmúmero do usuário com array "EntradaText";

       5º) Foi criada uma região "KeyPress das TextBox" para isolar o tratamento de recebindo das textBox no evento "KeyPress" de cada TextBox por parte do usuário limitando a digitação para APENAS números;

       * Dentro do código da Classe "Aleatorios":

       6º) Dentro da função "GeradorNaoRepetidoss" adicionei mais uma paraâmetro na assinatura da função chamado "NumJaEscolhidos" que é uma array de Labels;

       7º) Adicionei um NOVO laço "For" dentro do laço "While" para verificar se o número digitado pelo usuário foi repetido ao sistema sortear novos números;

       8º) Dentro de AMBOS laços "For" que estão dentro do laço "While" adicionei um "Break" para sair do laço caso encontre uma ocorrência de "If" verdadeira (true);


       - O código completo do Form:

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace wfaTesteEnum
    {
        public partial class FrmTesteEnum : Form
        {
            Label[] EntradaLabel = new Label[12];
            Label[] EntradaText = new Label[3];
            Label[] ResultadoLabel = new Label[15];
    
            public FrmTesteEnum()
            {
                InitializeComponent();
    
                // Você pode configurar isto de duas formas, aqui via có-digo ou dentro da área "propriedades" da caixa de texto (TextBox):
                // A ideia é permitir somente números de 0 até 99 - TxtNumeroX.MaxLength = 2;
    
                foreach (Control item in this.Controls)
                {
                    if (item is TextBox) ((TextBox)item).MaxLength = 2;
                }
    
            }
    
            private void GeraControles()
            {
                int esquerda = 50;
                int topo = 30;
    
                EntradaLabel = GeraControlesAuxiliar(12, esquerda, topo, BorderStyle.Fixed3D);
                EntradaText = GeraControlesAuxiliar(3, esquerda, topo, BorderStyle.Fixed3D);
    
                esquerda = 200;
                topo = 30;
                ResultadoLabel = GeraControlesAuxiliar(15, esquerda, topo, BorderStyle.FixedSingle);
            }
    
            private Label[] GeraControlesAuxiliar(int tamLbl, int esquerda, int topo, BorderStyle BS)
            {
                Label[] RetornoLabel = new Label[tamLbl];
    
                for (int i = 0; i < tamLbl; i++)
                {
                    RetornoLabel[i] = new Label
                    {
                        Name = "label" + i
                    };
    
                    RetornoLabel[i].Text = RetornoLabel[i].Name;
                    RetornoLabel[i].Left = esquerda; //Defina a posição do controle no formulário
                    RetornoLabel[i].Top = topo;
                    RetornoLabel[i].Font = new Font("", 15, FontStyle.Bold);
                    RetornoLabel[i].BorderStyle = BS;
    
                    this.Controls.Add(RetornoLabel[i]); // Adicione os controle ao formulário
                    topo += (RetornoLabel[i].Height + 5);
                }
    
                return RetornoLabel;
            }
    
            private void MostraResultado()
            {
                int i, ii = 0;
                int[] numerosOrganizados = new int[15];
    
                for (i = 0; i < 12; i++)
                    numerosOrganizados[i] = Convert.ToInt32(EntradaLabel[i].Text);
                for (; i < 15; i++)
                    numerosOrganizados[i] = Convert.ToInt32(EntradaText[ii++].Text);
    
                Array.Sort(numerosOrganizados);
    
                for (int y = 0; y < 15; y++)
                {
                    ResultadoLabel[y].Text = numerosOrganizados[y].ToString();
                }
    
            }
    
            private void BtnGerarNumeros_Click(object sender, EventArgs e)
            {
    
                if (VerificaCaixaDeTexto(TxtNumero1.Text) || VerificaCaixaDeTexto(TxtNumero2.Text) || VerificaCaixaDeTexto(TxtNumero3.Text))
                {
                    MessageBox.Show("Por favor, escolha os três Números Fixos entre 1 e 25.", "Advertência", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                }
                else
                {
                    GeraControles();
                    Gerador();
                    MostraResultado();
                }
            }
    
            /// <summary>
            /// REGRA DE NEGÓCIO 1: Não é permitido caixas de texto sem estar preenchidas.
            /// REGRA DE NEGÓCIO 2: Os números precisam estar entre 1 e 25.
            /// </summary>
            /// <param name="StrTexto">Recebe um texto</param>
            /// <returns>Retorna Verdadeiro ou Falso de acoprdop com as regras de negócio.</returns>
            private bool VerificaCaixaDeTexto(string StrTexto)
            {
                if (String.IsNullOrEmpty(StrTexto)) return true;
    
                if (!(Convert.ToInt32(StrTexto) > 0 && Convert.ToInt32(StrTexto) < 25)) return true;
    
                return false;
    
            }
    
            private void Gerador()
            {
                Aleatorios ale = new Aleatorios();
    
                EntradaText[0].Text = TxtNumero1.Text;
                EntradaText[1].Text = TxtNumero2.Text;
                EntradaText[2].Text = TxtNumero3.Text;
    
                int[] numerosSorteados = ale.GeradorNaoRepetidoss(12, 1, 25, EntradaText);
    
                Array.Sort(numerosSorteados);
    
                Control[] controles = EntradaLabel;
    
                for (int i = 0; i < controles.Length; i++)
                {
                    int valor = numerosSorteados[i];
                    controles[i].Text = valor + "";
                }
            }
    
            #region KeyPress das TextBox
    
            private void TxtNumero1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)) e.Handled = true;
            }
    
            private void TxtNumero2_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)) e.Handled = true;
            }
    
            private void TxtNumero3_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 8)) e.Handled = true;
            }
    
            #endregion
        }
    }

       - O código completo da Classe "Aleatorio":

    using System;
    using System.Windows.Forms;
    
    namespace wfaTesteEnum
    {
        public class Aleatorios
        {
            int[] numeros;
            private readonly Random _random;
    
            public Aleatorios()
            {
                this._random = new Random();
            }
    
            //generates random numbers
            public int GeradorAleatorio(int min, int max)
            {
                if (min > max)
                {
                    int aux = min;
                    min = max;
                    max = aux;
                }
                return this._random.Next(min, max + 1);
            }
    
            public int[] GeradorAleatorios(int longetud, int min, int max)
            {
                if (longetud <= 0)
                {
                    return null;
                }
                int[] numeros = new int[longetud];
    
                for (int i = 0; i < numeros.Length; i++)
                {
                    numeros[i] = GeradorAleatorio(min, max);
                }
                return numeros;
            }
    
            //generates non-repeating random numbers
            public int[] GeradorNaoRepetidoss(int longetud, int min, int max, Label[] NumJaEscolhidos)
            {
                if (min > max)
                {
                    int aux = min;
                    min = max;
                    max = aux;
                }
    
    
                if (longetud <= 0 || (max - min) < longetud - 1)
                {
                    return null;
                }
                int[] numeros = new int[longetud];
    
                bool repetido;
                int numero;
                int indice = 0;
                int indiceX = NumJaEscolhidos.Length;
    
                while (indice < numeros.Length)
                {
                    repetido = false;
                    numero = GeradorAleatorio(min, max);
    
                    for (int i = 0; i < indice; i++)
                    {
                        if (numeros[i] == numero)
                        {
                            repetido = true;
                            break;
                        }
                    }
    
                    for (int x = 0; x < indiceX; x++)
                    {
                        if (Convert.ToInt32(NumJaEscolhidos[x].Text) == numero)
                        {
                            repetido = true;
                            break;
                        }
                    }
    
                    if (!repetido)
                    {
                        numeros[indice] = numero;
                        indice++;
                    }
                }
    
                return numeros;
            }
    
            //ascending order
            public int[] Ordenar()
            {
                for (int i = 0; i < numeros.Length - 1; i++)
                {
                    for (int j = i + 1; j < numeros.Length; j++)
                    {
                        if (numeros[i] > numeros[j])
                        {
                            int aux = numeros[i];
                            numeros[i] = numeros[j];
                            numeros[j] = aux;
                        }
                    }
                }
                return numeros;
            }
        }
    }

       Qualquer dúvida me avise.

    []'s,
    Fabio I.
    • Editado Fabio I domingo, 5 de setembro de 2021 19:10
    • Marcado como Resposta Titodj7 terça-feira, 7 de setembro de 2021 00:21
    domingo, 5 de setembro de 2021 19:09
  • bah tchê, sei que estou me passando contigo, mas vc é minha unica luz no momento,

    eu estou mais perdido que cego em tiroteio, ta uma confusão aqui, hehehe...

    fiz um video para ver se vc tem uma melhor ideia do que estou fazendo

    video sem som    mas acho que vai ter uma ideia,

    os 3 Labels (EntradaText) são criados dinamicamente e são editáveis,

    depois dos 15 números gerador quero guardar em um datagrid casa sequencia em uma linha...

    enquanto isso vou tentando entender seu código aqui, Obrigado até aqui.


    Titodj7

    domingo, 5 de setembro de 2021 22:05
  • Tito,

       Sem problemas, vamos terminar o que começamos.

       Mas pelo que estou vendo no seu vídeo, basicamente é separar o que eu fiz em botões da tela. Estou tentando fazer isso aqui.

       Quando você terminar de entender o que eu escrevi ou tiver dúvidas me chama aqui.

       Refiz um pouco o código para atender melhor o que você precisa. Posso gravar um vídeo explicando também.

    []'s,
    Fabio I.

    • Editado Fabio I segunda-feira, 6 de setembro de 2021 22:49
    segunda-feira, 6 de setembro de 2021 14:26
  • consegui fazer funcionar aqui, só fiquei  meio perdido, pois usava as label dinâmicas e agora as TextBox, eu até usava no começo TextBox dinâmicas e mudei para Label.

    vou me agarrar aqui e ver o que consigo fazer, qualquer coisa grito uma ajuda novamente,

    Muito obrigado, um abraço.


    Titodj7

    terça-feira, 7 de setembro de 2021 00:21
  • Tito,

        Obrigado por me pontuar. Eu já estava montando um exemplo mais complexo.

        Se precisar de qualquer ajuda, me avisa!

    []'s,
    Fabio I.
    P.S.: Hoje não vou poder olhar, pois tenho um compromisso com o destino e não posso me atrasar.

    • Editado Fabio I terça-feira, 7 de setembro de 2021 10:48
    terça-feira, 7 de setembro de 2021 10:44
  • Tito,

        Obrigado por me pontuar. Eu já estava montando um exemplo mais complexo.

        Se precisar de qualquer ajuda, me avisa!

    []'s,
    Fabio I.
    P.S.: Hoje não vou poder olhar, pois tenho um compromisso com o destino e não posso me atrasar.

    bah tchê, era isso que eu queria, mas tenho que estudar mais sobre metodos e argumaentos, mas se quiser me ajudar com este fico feliz, mas pode acreditar que as duvidas e perguntas vão continuar, tenho muito que aprender ainda

    Por curiosidade: o datagrid eu conguiria salvar em linha no grid? (pergunta para o proximo post.) hehehe...

    Agradeço muito a ajuda até aqui, Obrigado por disponibilizar teu tempo para me ajudar, um Grande Abraço.


    Titodj7

    https://www.facebook.com/titodj7/

    orbitaleventos@gmail.com



    • Editado Titodj7 terça-feira, 7 de setembro de 2021 16:02
    terça-feira, 7 de setembro de 2021 13:02
  • consegui resolver o problema,

     primeiro ponto como sou bem iniciante em Array, eu entendi que que

     private Label[] EntradaLabel = new Label[12];
     private Label[] EntradaText = new Label[3];
     private Label[] ResultadoLabel = new Label[15];

    não são array e sim Label dinâmicas, até então não entendia

    mudei algumas coisas tipo eliminando os TextBox que passavam para os labelTex no código e deu certinho

    mudei  para  private TextBox[] EntradaText = new TextBox[3]; 

    no Gerador mudei

                EntradaText[0].Text = EntradaText[0].Text;
                EntradaText[1].Text = EntradaText[1].Text;
                EntradaText[2].Text = EntradaText[2].Text;

    na class mudei para

    public int[] GeradorNaoRepetidoss(int longetud, int min, int max, TextBox[] NumJaEscolhidos)

    quero agradecer muito o Fabio I pois me ajudou muito, um Grande Abraço.


    Titodj7

    quinta-feira, 23 de setembro de 2021 01:59
  • Parabéns Tito!

        E também ficou bonita a tela.

    []'s,
    Fabio I.

    quinta-feira, 23 de setembro de 2021 20:10