//Funcion encargada de generar todos los loads del juego
        private void Loading()
        {
            //Instanciacion del ArkanoidControl
            ac = new ArkanoidControl
            {
                Dock   = DockStyle.Fill,
                Width  = Width,
                Height = Height
            };

            //Action GameEnded que vuelve al menu al terminar el juego
            ac.GameEnded = () =>
            {
                MessageBox.Show("PERDISTE");
                var menuForm = new Menu();
                menuForm.Show();
                Dispose();
            };

            //Action GameWon que vuelve al menu al ganar la partida y guarda los datos del ganador
            ac.GameWon = () =>
            {
                var id = DBConnetion.RealizarConsulta($"select id from users where name='{TxtName.Text}'").Rows[0][0].
                         ToString();
                var maximo = DBConnetion.RealizarConsulta($"select attempt from attempts" +
                                                          $" where id_user = '******' ORDER BY attempt DESC FETCH FIRST 1 ROWS ONLY");

                int val;

                if (maximo.Rows.Count == 0)
                {
                    val = 1;
                }
                else
                {
                    val = Convert.ToInt32(maximo.Rows[0][0].ToString()) + 1;
                }

                DBConnetion.RealizarAccion($"INSERT into ATTEMPTS(id_user,attempt,score) VALUES('{Convert.ToInt32(id)}', {val},{GameData.score})");
                MessageBox.Show("GANASTE LA PARTIDA");
                var menuForm = new Menu();
                menuForm.Show();
                Dispose();
            };
        }
Exemplo n.º 2
0
        //funcion tipo Datatable que se encarga de obetener el top 10 de la base de datos
        public static DataTable GetTopTen(ref List <string> headers)
        {
            List <ScoreModel> TopTen     = new List <ScoreModel>();
            DataTable         TableScore = DBConnetion.RealizarConsulta($"select users.name as usuario, t.attempt as intento, t.score as puntaje from " +
                                                                        $"(SELECT distinct on (id_user) id_user, attempt, score from attempts ORDER BY id_user, score DESC) as t " +
                                                                        $"inner join users on t.id_user = users.id  ORDER BY t.score desc fetch first 10 rows only");

            foreach (DataColumn dc in TableScore.Columns)
            {
                headers.Add(dc.ColumnName);
            }


            foreach (DataRow dr in TableScore.Rows)
            {
                TopTen.Add(new ScoreModel(
                               dr[0].ToString(),
                               dr[1].ToString(),
                               dr[2].ToString()
                               ));
            }

            return(TableScore);
        }
        //Evento el cual se encarga de cargar el ArkanoidControl y de cominar el nombre entre
        //este Form y el ArkanoidContro
        private void BtnPlay_Click(object sender, EventArgs e)
        {
            try
            {
                //se manda a llamar el InitializeGame para que se actualicen los datos al volver a jugar
                GameData.InitializeGame();
                //se cargan los Action y propiedades del ArkanoidControl
                Loading();
                //se invoca el delegate
                gn?.Invoke(TxtName.Text);

                string nombre = TxtName.Text;
                //variable tipo data table
                var consultar = DBConnetion.RealizarConsulta($"SELECT * FROM USERS " +
                                                             $"where name = '{nombre}'");

                string agregar = $"INSERT into USERS(name) VALUES('{nombre}')";

                //hacemos uso del delegate para comunicar el nombre entre este form y el arkanoud control
                gn = nick =>
                {
                    switch (TxtName.Text)
                    {
                    case string aux when aux.Length > 16:
                        throw new ExceededMaxCharactersException(
                                  "No se puede ingresar un alias de mas de 16 caracteres");

                    case string aux when aux.Trim().Length == 0:
                        throw new EmpyNicknameException("Debe ingresar un nombre de usuario");

                    default:    //en caso de que no se cumpla ningun caso de excepcion, se corre el juego
                        //verifiica si el usuario ya existe en la base de datos
                        if (consultar.Rows.Count == 1)
                        {
                            MessageBox.Show($"Bienvenido de nuevo {nick}", "Game");
                            tableLayoutPanel1.Hide();
                            Text = "Arkanoid";
                        }
                        //si no existe lo agrega
                        else
                        {
                            //Agregando User a DB
                            DBConnetion.RealizarAccion(agregar);
                            MessageBox.Show($"Gracias por registrarte {nick} \n Presiona OK para comenzar a jugar");
                            //Cambiando el control del tableLayout por ArkanoidControl
                            tableLayoutPanel1.Hide();
                            Text = "Arkanoid";
                        }
                        Controls.Add(ac);
                        break;
                    }
                };
            }
            catch (ExceededMaxCharactersException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (EmpyNicknameException ex)
            {
                MessageBox.Show(ex.Message);
            }
        }