Exemplo n.º 1
0
        public static void MainGame(int option)             //Este diria que es el metodo principal, donde se invocan los otros métodos
        {
            ScoreTracker.Score = 0;                         //inicializamos la puntuación. Tambien hace un reset si se juega otra partida.
            int[,] a           = new int[option, option];   //inicializamos el vector, el tamaño depende de lo que se devuelva del menu()

            GameInterface.ReDraw(a);                        // se hace el primer dibujado del grid de juego

            while (true)                                    //o lo que es lo mismo, un bucle infinito
            {
                int mov;                                    //esta variable inicialmente estaba para un debug interno, pero la necesito mas adelante

                ConsoleKeyInfo key = Console.ReadKey(true); //el parametro true de readkey evita que se escriba la letra que se captura
                switch (key.Key)                            //iniciamos el switchh
                {
                case ConsoleKey.LeftArrow:                  //al pulsar el cursor izquierdo del teclado
                    mov = 1;                                // este valor se usaba en otro método para pintar que movimiento se hacia, se deja para otro uso
                    a   = GameLogic.Merge(a);               // aqui se hace la mezcla y se mueven los numeros del grid
                    break;                                  //se sale del bucle

                case ConsoleKey.DownArrow:                  //no voy a repetirme en decir que hace esto...
                    mov = 2;
                    a   = GameLogic.RotateGrid(a, 1);       //bueno, aqui rotamos el array antes de hacer la suma y movimientos del grid
                    a   = GameLogic.Merge(a);               //suma y movimientos de los numeros del array
                    a   = GameLogic.RotateGrid(a, -1);      //lo rotamos de nuevo para dejarlo en el sitio 90 grados
                    break;

                case ConsoleKey.RightArrow:            //lo mismo
                    mov = 3;
                    a   = GameLogic.RotateGrid(a, 2);  //rotamos 180 grados
                    a   = GameLogic.Merge(a);          //mezcla
                    a   = GameLogic.RotateGrid(a, -2); //deshacemos la rotación
                    break;

                case ConsoleKey.UpArrow:               //idem
                    mov = 4;
                    a   = GameLogic.RotateGrid(a, 3);  //270 grdos
                    a   = GameLogic.Merge(a);
                    a   = GameLogic.RotateGrid(a, -3); //volvemos como estaba
                    break;

                default:
                    mov = 5;     //cualquier otra pulsacion de tecla, da el valor 5
                    break;
                }

                Point cp = GameLogic.RandomPoint(a); // Aqui usando randompoint() creamos un objeto que nos da una posicion aleatoria en el grid
                if (cp != null && mov < 5)           //osea, si queda al menos una posición y se pulsó uno de los cursores
                {
                    a[cp.X, cp.Y] = 2;               // Añadimos el nº mágico 2 en una posición aleatoria. El juego siempre inserta un 2 asi que no lo considero nº mágico
                    GameInterface.ReDraw(a);         //despues de calcular la mezcla y añadir el 2, redibujamos para que se vean los cambios
                }

                if (cp == null && !GameLogic.CanMove(a))  //si no queda ninguna posicion disponible, y además no quedan mas movimientos, con CanMove
                {
                    GameInterface.ReDraw(a, "Game Over"); //usamos redibujar con una sobrecarga con el Game Over
                    break;
                }

                if (GameLogic.Wins(a))                      //con el metodo wins() buscamos el 2048 en el vector para saber si hemos ganado el juego
                {
                    GameInterface.ReDraw(a, "Has Ganado!"); //redibujar con la sobrecarga del string
                    break;
                }
            }
        }