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; } } }