// Tengo que hacer que mi programa haga un rectángulo hueco que tenga esta forma, lo único que he conseguido es que salga completo, ademas de que las X tienen que ir saliendo como hace mi programa, alguna idea de que puedo hace? D:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX XX
XX XX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
byte x=0, y=0;
for(y=10;y<=13;y++){
for(x=10;x<=70;x++){
Console.SetCursorPosition(x,y);
Console.WriteLine(" X ");
x++;
for(int w=0;w<=60000;w++){
for(int z=0;z<=100;z++){
}
}
}
}
Console.ReadKey(true);
Considera un poco que es eso de 'rectángulo hueco'... 1,2,3...ya.
Son espacios, luego, hablamos de caracteres... si sabes poner 'x', supongo que también sabrás poner espacios ' ', luego es simplemente una cuestión aritmética de contar 'ovejitas' y 'cabras'...
Resuélvelo con lápiz y papel, luego codifica... intentado ceñirte a como lo has resuelto con lápiz y papel (seguir los pasos).
Tu duda me ha inspirado a llevar a cabo un tipo reutilizable que sirve para representar un rectángulo (dibujable) en una aplicación de consola:
- https://foro.elhacker.net/net/libreria_de_snippets_para_vbnet_compartan_aqui_sus_snippets-t378770.0.html;msg2186824#msg2186824
( puedes coger el código y usar cualquier conversor online a C#, o compilarlo en un archivo .dll y usarlo en tu proyecto de C#. )
(https://i.imgur.com/f0r5z6K.png)
(https://i.imgur.com/aMxfrw8.png)
Decisiones (o limitaciones) de diseño:
Las propiedades son de solo lectura (para quitarme de lios). Es decir, para hacer cambios en el tamaño o posición del rectángulo, hay que crear una nueva instancia. - ya no lo son- No permite la asignación de coordenadas negativas (puesto que tampoco lo permite el método Console.SetCursorPos()), ni un tamaño (anchura ni altura) igual a cero, aunque esto último no se tiene en cuenta si se usa el constructor por defecto.
Modo de empleo (con el que tomé la primera imagen):
Point rc1Pos = new Point(2, Console.CursorTop + 2);
ConsoleRectangle rc1 = new ConsoleRectangle(rc1Pos, new Size(32, 4), '▌', '▀', '▐', '▄');
rc1.Write();
Point rc2Pos = new Point(2, Console.CursorTop + 2);
ConsoleRectangle rc2 = new ConsoleRectangle(rc2Pos, new Size(32, 4), 'X', 'X', 'X', 'X');
rc2.Write();
Point rc3Pos = new Point(2, Console.CursorTop + 2);
ConsoleRectangle rc3 = new ConsoleRectangle(rc3Pos, new Size(11, 5), '▌', '▀', '▐', '▄');
rc3.Write();
Point rc4Pos = new Point(rc3Pos.X + (rc3.Width / 2), rc3Pos.Y + +(rc3.Height / 2));
ConsoleRectangle rc4 = new ConsoleRectangle(rc4Pos, rc3.Size, 'X', 'X', 'X', 'X');
rc4.Write();
Console.SetCursorPosition(rc1.X + 9, rc1.Y);
Console.Write(" Hello World ");
Console.SetCursorPosition(rc1.X + 6, rc1.Y + 2);
Console.Write(" By ElektroStudios ");
Console.CursorVisible = false;
Console.ReadKey(intercept:true);
Saludos.