Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: @XSStringManolo en 9 Junio 2019, 05:45 am



Título: Aporte. Funcion para poner pantalla de título a programa por consola.
Publicado por: @XSStringManolo en 9 Junio 2019, 05:45 am
Siempre ando a hacerlo a mano y hecho mi tiempo asique hice una función sencilla que lo haga por mi.
Las abrá 100 veces mejores, sin fallos y más completas por ahí. Yo os dejo la mía para quien la quiera usar, o por si os apetece discutir sobre el código, como lo haceis vosotros, como mejorarlo, etc.

Hay 2 bucles for que tienen los numeros 25 y 80. Son la altura y la anchura por defecto que yo tengo en mi consola.Podeis cambiarlos por int ancho e int alto.
Si vais a aumentarla, abrir el programa con la consola máximizada, etc. Le poneis lo que corresponda, vais probabdo. Al hacer eso también abrá que cambiar el (j==79) por (j==nuevoAncho-1) y el (contador == 24) por (contador == nuevaAltura-1)
Se puede hacer con menos variables, sin llenar tantos strings y creo que hay variables sin usar en la segunda funcion. Si quereis optimizarlo genial.

Abajo de todo del código dibujé las salidas del programa por consola de cada función por si quereis ver exactamente lo que hacen antes de compilar el código.
También dejé un ejemplo creado en el main para verlo al compilar.

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. string crearIntro(string escenariochar, string bordes, string bordesArriba, string bordesAbajo );
  7. string anhadirTexto(string cadenaDelUsuario, string texto, int linea);
  8.  
  9.  
  10. int main()
  11. {
  12. string mistring;
  13.  
  14. mistring = crearIntro("1", "|", "=", "_");
  15. //cout << mistring; //Ejemplo de lo que hace.
  16.  
  17. mistring = crearIntro(" ", "|", "=", "_");
  18. //cout << endl << mistring; //Ejemplo practico de funcion CrearIntro
  19.  
  20. mistring = anhadirTexto(mistring, "MI PROGRAMA DE CONSOLA!", 12);
  21. //cout << endl << mistring; //Ejemplo practico de anhadirTexto
  22.  
  23. string textoDeMiprograma = "Pulsa enter para empezar.                                               ";
  24. mistring = anhadirTexto(mistring,textoDeMiprograma , 23);
  25. textoDeMiprograma = "                                                           Sunday,June 09,2019";
  26. mistring = anhadirTexto(mistring,textoDeMiprograma , 2);
  27.  
  28. cout << endl << mistring; //Ejemplo practico de anhadirTexto
  29.  
  30. cin.get();
  31. return 0;
  32. }
  33.  
  34.  
  35. string crearIntro(string escenariochar, string bordes, string bordesArriba, string bordesAbajo)
  36. {
  37. string escenario;
  38. static int contador = 0;
  39.  
  40. for ( int i = 0; i < 25; ++i )
  41. {
  42.        for ( int j = 0; j < 80; ++j )
  43.        {
  44.            if(j == 79 || j == 0)
  45.            {
  46. if(contador == 0 || contador == 1 || contador == 24)
  47.                {
  48. if (contador == 0 || contador == 1)
  49. {
  50. escenario.append(bordesArriba);
  51. }
  52.  
  53. else
  54. {
  55. escenario.append(bordesAbajo);
  56. }
  57.                }
  58.  
  59. else
  60. {
  61. escenario.append(bordes);
  62. }
  63. }
  64.  
  65.            else
  66.            {
  67.                if(contador == 0 || contador == 1 || contador == 24)
  68.                {
  69. if (contador == 0 || contador == 1)
  70. {
  71. escenario.append(bordesArriba);
  72. }
  73.  
  74. else
  75. {
  76. escenario.append(bordesAbajo);
  77. }
  78.  
  79. }
  80.  
  81. else
  82. {
  83. escenario.append(escenariochar);
  84. }
  85. }
  86.        }
  87.    ++contador;
  88. }
  89.  
  90. contador = 0;
  91. return escenario;
  92. }
  93.  
  94.  
  95. string anhadirTexto(string cadenaDelUsuario, string texto, int linea)
  96. {
  97. int tamanhocadena = cadenaDelUsuario.size();
  98. int tamanhotexto = texto.size();
  99. int mitadtamanhotexto = tamanhotexto/2;
  100. int saltosDeLinea = linea;
  101. string nuevaCadena = cadenaDelUsuario;
  102. int diferenciaTexto;
  103. int x = 80;
  104. string vacio;
  105.  
  106. diferenciaTexto = x * linea;
  107. diferenciaTexto -= -(40 - mitadtamanhotexto);
  108.  
  109. vacio.append(cadenaDelUsuario, 0, diferenciaTexto);
  110. vacio.append(texto);
  111. diferenciaTexto += tamanhotexto;
  112. vacio.append(cadenaDelUsuario, diferenciaTexto, 2000);
  113.  
  114. return vacio;
  115. }
  116.  
  117.  
  118. /*
  119. Ejemplo de llamada a crearIntro:
  120.  
  121. string mistring;
  122. mistring = crearIntro("1", "|", "=", "_");
  123.  
  124. Primer parametro -> Llena la consola del caracter que le pongamos.
  125. Segundo parametro -> Utiliza el caracter como borde.
  126. Tercer parametro -> Utiliza el caracter como borde superior.
  127. Cuarto parametro -> Utiliza el caracter como borde inferior.
  128.  
  129. En la llamada de arriba el resultado sera asi:
  130.  
  131. ==================
  132. ==================
  133. |1111111111111111|
  134. |1111111111111111|
  135. |1111111111111111|
  136. |1111111111111111|
  137. |1111111111111111|
  138. |1111111111111111|
  139. |1111111111111111|
  140. |1111111111111111|
  141. |1111111111111111|
  142. __________________
  143.  
  144.  
  145. */
  146.  
  147. /*
  148. Ejemplo de llamada a anhadirTexto:
  149.  
  150. string mistring;
  151. mistring = anhadirTexto(mistring, "HOLA!", 6);
  152.  
  153. Primer parametro -> El string que tenemos de la otra funcion.
  154. Segundo parametro -> El texto que queremos anhadir.
  155. Tercer parametro -> La linea en la cual queremos poner nuestro texto.
  156.  
  157.  
  158. En este ejemplo cambiamos el "1" por un espacio " " o un espacio "\ ".
  159.  
  160. string mistring;
  161. mistring = crearIntro(" ", "x", "A", "*");
  162. mistring = anhadirTexto(mistring, "MI PROGRAMA!", 5);
  163.  
  164. En la llamada el resultado sera asi:
  165.  
  166. AAAAAAAAAAAAAAAAAA     Linea 1
  167. AAAAAAAAAAAAAAAAAA     Linea 2
  168. x                x     Linea 3
  169. x                x     Linea 4
  170. x  MI PROGRAMA!  x     Linea 5
  171. x                x     Linea 6
  172. x                x     Linea 7
  173. x                x     Linea 8
  174. x                x     Linea 9
  175. x                x     Linea 10
  176. x                x     Linea 11
  177. ******************     Linea 12
  178.  
  179. */