[ Foro de C# ]

Duda Space Invaders

27-Jun-2017 14:09
Rubén Coca
2 Respuestas

Buenas Nacho.

Estoy intentando hacer los ejercicios de Space Invaders, y en el apartado 7.3.5 me dice que use Virtual y Override, pero tal y como han ido los ejercicios previos, no tengo métodos que hacer virtual y override.

De hecho, en el apartado 7.2.6 dice que es posible que no se me vean, pero a mí ya se me ven.

Es largo, pero adjunto el código por si puedes revisarlo. El último ejercicio de Space Invaders es el 7.2.6. Me hace dudar si estoy arrastrando algún error al leer los enunciados.

Muchas gracias


//CLASE JUEGO
namespace Space_Invaders
{
    class Juego
    {
        public void Lanzar()
        {
            Bienvenida B = new Bienvenida();
            Partida P = new Partida();

            do
            {
                B.Lanzar();
                if (B.GetSalir() == false)
                P.Lanzar();
            }
            while (B.GetSalir() == false);
        }

        static void Main()
        {
            Juego J = new Juego();
            J.Lanzar();
            Console.WriteLine("FIN DE PROGRAMA");
            Console.ReadLine();
        }
    }
}
//CLASE BIENVENIDA
namespace Space_Invaders
{
    class Bienvenida
    {
        private ConsoleKeyInfo tecla;
        private bool salir;

        public void Lanzar()
        {
            Console.Clear();
            Console.WriteLine("Bienvenido a Console Invaders. Pulse intro para jugar o ESC para salir");           
            do
            {
                tecla = Console.ReadKey(true);
                if (tecla.Key == ConsoleKey.Enter)
                    salir = false;
                if (tecla.Key == ConsoleKey.Escape)
                    salir = true;
            }
            while (tecla.Key != ConsoleKey.Enter && tecla.Key != ConsoleKey.Escape);
        }

        public bool GetSalir()
        {
            return salir;
        }
    }
}

//CLASE PARTIDA
namespace Space_Invaders
{
    class Partida
    {
        ConsoleKeyInfo tecla;
        Nave N = new Nave(38, 20);
        Enemigo E = new Enemigo();
        Enemigo[][] miEnemigo = new Enemigo[3][];
		

        public void Lanzar()
        {
            Console.Clear();
            Console.WriteLine("Ésta sería la pantalla de juego. Pulse Intro para salir");

            N.Dibujar();
            E.Dibujar();
			miEnemigo[0] = new Enemigo[10];
			miEnemigo[1] = new Enemigo[10];
			miEnemigo[2] = new Enemigo[10];


            for (byte i = 0; i < 10; i++)
            {
				miEnemigo[0][i] = new Enemigo(26 + i * 3, 4 , "[]");
                miEnemigo[1][i] = new Enemigo(26 + i * 3, 6 , "}{");
                miEnemigo[2][i] = new Enemigo(26 + i * 3, 8 , "XX");
            }

            do
            {
                tecla = Console.ReadKey(true);
                Console.Clear();
                if (tecla.Key == ConsoleKey.RightArrow)
                {
                    N.MoverDerecha();
                    N.Dibujar();
                    for (byte i = 0; i < 10; i++)
                    {
                        miEnemigo[0][i].Dibujar();
                        miEnemigo[1][i].Dibujar();
                        miEnemigo[2][i].Dibujar();
                    }
                }
                if (tecla.Key == ConsoleKey.LeftArrow)
                {
                    N.MoverIzquierda();
                    N.Dibujar();
                    for (byte i = 0; i < 10; i++)
                    {
                        miEnemigo[0][i].Dibujar();
                        miEnemigo[1][i].Dibujar();
                        miEnemigo[2][i].Dibujar();
                    }
                }
            }
            while (tecla.Key != ConsoleKey.Enter);  
        }

    }
}

//CLASE SPRITE
namespace Space_Invaders
{
    class Sprite
    {
		public Sprite()
		{
			//Console.WriteLine("Creando Sprite");
		}	
	
        protected int x;
        protected int y;
        protected string imagen;      

        public void Dibujar()
        {
            Console.SetCursorPosition(x, y);
            Console.WriteLine(imagen);
        }
    }
}

//CLASE NAVE
namespace Space_Invaders
{
    class Nave : Sprite
    {
		public Nave()
		{
			Console.WriteLine("Creando nave en posición prefijada");
			x = 38;
			y = 10;
			//imagen = "/\\";
		}
	
        public Nave(int nX, int nY)
        {
			Console.WriteLine("Creando nave en posición indicada por el usuario");
            x = nX;
            y = nY;
            imagen = "/\\";
        }

        public void MoverDerecha()
        {
            x += 1;
        }

        public void MoverIzquierda()
        {
            x -= 1;
        }
    }
}

//CLASE ENEMIGO
namespace Space_Invaders
{
    class Enemigo : Sprite
    {
        public Enemigo()
        {
            x = 38;
            y = 5;
            imagen = "[]";
        }
		
		public Enemigo(int nX, int nY, string im)
        {
            x = nX;
            y = nY;
            imagen = im;
        }
    }
}





11-Aug-2017 21:54
Nacho Cabanes (+83)

Perdona el (enorme) retraso en contestar, pero mi tiempo libre es casi totalmente inexistente desde hace casi dos meses.

Casi cualquier programa (que no sea trivial) se puede plantear de varias maneras. El que en tu planteamiento no hayas necesitado "virtual" ni "override" todavía, no quiere decir que el planteamiento sea malo. De hecho, tu planteamiento parece muy correcto. Podrías necesitar "override" si redefinieras el método "Dibujar", pero no te hará falta (todavía) si cambias la imagen desde el constructor de cada clase.


20-Sep-2017 08:28
Invitado (Rubén)

Muchas gracias por la respuesta.

Entiendo que tu tiempo sea el que es y que respondas cuando puedas.

Muchas gracias de nuevo






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)