private void ImprimePalavraVertical(PalavraCruzada p)
        {
            try
            {
                int txtno  = p.palavra.Length;
                int pointX = CT_Posicao_central;
                int pointY = 40;
                pnlGame.Controls.Clear();

                for (int i = 0; i < txtno; i++)
                {
                    TextBox a = new TextBox();

                    //a.Text = p.palavra[i].ToString();
                    a.Tag       = i;
                    a.MaxLength = 1;
                    a.Location  = new Point(pointX, pointY);
                    a.Width     = 25;
                    pnlGame.Controls.Add(a);

                    p.edits.Add(a);

                    pointY += 25;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
        private void executarToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                //int txtno = int.Parse(txt1.Text);
                List <PalavraCruzada> palavras = GetPalavras();
                Random rnd = new Random();

                int palavra1  = rnd.Next(0, palavras.Count);
                int palavra2  = rnd.Next(0, palavras.Count);
                int palavra3  = rnd.Next(0, palavras.Count);
                int tentativa = 0;
                palavraPrincipal = palavras[palavra1];
                while (palavraPrincipal.palavra.Length < 4 && tentativa <= 5)
                {
                    palavra1         = rnd.Next(0, palavras.Count);
                    palavraPrincipal = palavras[palavra1];
                    ++tentativa;
                }
                ImprimePalavraVertical(palavraPrincipal);

                tentativa = 0;

                palavraSecundaria = palavras[palavra2];
                palavraTerciaria  = palavras[palavra3];

                while ((palavra1 == palavra2 ||
                        palavra2 == palavra3 ||
                        palavra3 == palavra1) && tentativa <= 50)
                {
                    palavra2          = rnd.Next(0, palavras.Count);
                    palavraSecundaria = palavras[palavra2];
                    palavra3          = rnd.Next(0, palavras.Count);
                    palavraTerciaria  = palavras[palavra3];
                    ++tentativa;
                }

                int idx = ImprimePalavraHorizontal(palavraPrincipal, palavraSecundaria, 2, -1);
                ImprimePalavraHorizontal(palavraPrincipal, palavraTerciaria, 4, idx);
            }
            catch (Exception)
            {
                MessageBox.Show(e.ToString());
            }
        }
        private List <PalavraCruzada> GetPalavras()
        {
            palavras = new List <PalavraCruzada>();
            PalavraCruzada palavra;

            SqlCommand    sql  = new SqlCommand("Select * from [dbo].[palavras] order by palavra", conn);
            SqlDataReader sqlr = sql.ExecuteReader();

            Boolean aceito = false;

            while (sqlr.Read())
            {
                aceito          = true;
                palavra         = new PalavraCruzada();
                palavra.dica    = (String)sqlr["dica"];
                palavra.palavra = (String)sqlr["palavra"];
                palavras.Add(palavra);
            }
            sqlr.Close();
            return(palavras);
        }
        private int ImprimePalavraHorizontal(PalavraCruzada p, PalavraCruzada phorizontal, int letra, int posIgnorar)
        {
            try
            {
                int txtno     = phorizontal.palavra.Length;
                int topoletra = letra;
                // achar a primeira vogal ou última dependendo do parâmetro letra

                String vogalInicio    = "";
                int    vogalInicioPos = 0;
                int    z;
                if (letra == 2)
                {
                    z = 0;
                    while (z <= (p.palavra.ToString().Length - 1))
                    {
                        if (isVogal(p.palavra[z].ToString()))
                        {
                            vogalInicio    = p.palavra[z].ToString();
                            vogalInicioPos = phorizontal.palavra.IndexOf(vogalInicio);
                            topoletra      = z;

                            if (vogalInicioPos != -1 && posIgnorar != vogalInicioPos)
                            {
                                z = 999;
                            }
                        }
                        z += 1;
                    }
                }
                else
                {
                    z = p.palavra.ToString().Length - 1;
                    while (z >= 0)
                    {
                        if (isVogal(p.palavra[z].ToString()))
                        {
                            vogalInicio    = p.palavra[z].ToString();
                            vogalInicioPos = phorizontal.palavra.LastIndexOf(vogalInicio);
                            topoletra      = z;

                            if (vogalInicioPos != -1 && posIgnorar != vogalInicioPos)
                            {
                                z = -999;
                            }
                        }
                        z -= 1;
                    }
                }


                int pointX = CT_Posicao_central - (vogalInicioPos * 25);
                int pointY = 40;


                for (int i = 0; i < txtno; i++)
                {
                    if (vogalInicioPos != i)
                    {
                        pointY = (topoletra) * 25 + 40;
                        TextBox a = new TextBox();
                        //a.Text = phorizontal.palavra[i].ToString();
                        a.Tag       = i;
                        a.MaxLength = 1;
                        a.Location  = new Point(pointX, pointY);
                        a.Width     = 25;
                        pnlGame.Controls.Add(a);
                        phorizontal.edits.Add(a);
                    }
                    else
                    {
                        phorizontal.edits.Add(null);
                    }

                    pointX += 25;
                }

                return(vogalInicioPos);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return(0);
            }
        }