Como ser romántico nivel programador


La idea principal es escribir en la consola de c++ la palabra “TE AMO ROMA” letra por letra. Este detalle es una forma de demostrarle a tu persona especial el cariño que le tienes, pero con el estilo especial de un programador.

El código del programa estará abajo. Ahora nos centraremos a ver cómo funciona el detallito, y como podría adaptarse para otras palabras o letras.

Temas o funciones que usa el programa

  • gotoxy(int x, int y): esta funcion de tipo void, se encarga de mover el cursor de la
    ventana de texto a la posición dada según las coordenadas especificadas por los
    parámetros x e y. Cabe resaltar que los argumentos no pueden ser 0. 
  • sleep(int ms): esta función permite hacer una pausa por una determinada cantidad de milisegundos en la ejecución de un programa. El argumento que recibe es en milisegundos(int ms).

Antes de empezar a explicar cada parte del código, es necesario saber que esto fue hecho usando Borland c++, donde la función gotoxy ya está predefinida en la librería conio.h.

Por si se quiere  usar dev c++, la función gotoxy(), no está predefinida, habría que definirla primero, acá les dejo el bloque de código de la función:

void gotoxy(int x, int y){

      HANDLE hcon;

      hcon=GetStdHandle(STD_OUTPUT_HANDLE);

      COORD dwPos;

      dwPos.X=x;

      dwPos.Y=y;

      SetConsoleCursorPosition(hcon,dwPos);

}

 

EMPECEMOS

Empezamos con las librerías, iostream para la impresión de datos en la pantalla usando cout; Windows.h, para el uso del Sleep; y el conio.h para el uso de la función gotoxy.

#include<iostream>

#include<windows.h>

#include<conio.h>

Como variable global, defino un tiempo en milisegundos, para escribir cada punto, en este caso es de 40 milisegundos.

int tiempo=40;

La funcion writey(), la hice para trazar líneas de forma vertical, recibe como parámetros una x, que seria la posición inicial en x; una y que seria la posición inicial en y, y la cantidady, que seria la cantidad de puntos que quiero trazar… por ejemplo para trazar una letra “l”, usaría solo esta función, ya que solo es una raya vertical… el parámetro cantidady, funciona principalmente para definir el largo del trazo.

void writey(int x,int y,int cantidady){

                int j=y;

                while(j<=(cantidady+y)){

                               gotoxy(x,j); cout<<"*****"; //aquí hago uso de la funcion gotoxy para posicionar                                                                                 el cursor en la coordinada que me pasaron de                                                                                       parámetro, y lo que hago es escribir asteriscos. “*****”

      j++;

      Sleep(tiempo); //aquí hago uso de la función sleep, para hacer un pequeño retardo entre cada                                         punto que va trazando

                }

}

La función writey2(), la hice para trazar líneas de forma inclinada, recibe como parámetros una x, que seria la posición inicial en x; una y que seria la posición inicial en y, la cantidady, que seria la cantidad de puntos que quiero trazar; y la iteración, esto puede ser un -1 o un 1, esto depende a la dirección de inclinación del trazo, por ejemplo la letra A, el primer trazo seria algo así /, entonces en la función writey2, en el parámetro iteración se mandaría un -1; para el segundo trazo del ejemplo seria al revés, algo así \, entonces se mandaría un 1.

void writey2(int x,int y,int cantidady,int iteracion){

   int i=x;

                int j=y;

                while(j<=(cantidady+y)){

                               gotoxy(i,j); cout<<"*****"; //igual que en la función anterior, aquí se imprimen                                                                                 los asteriscos, y va bajando, dependiendo de cuantos se                                                                                 soliciten con el parámetro cantidady

      j++;

      i=i+iteracion;

      Sleep(tiempo);

                }

}

 

La funcion writex(), sirve para trazar líneas de forma horizontal, recibe como parametros una x, que seria la posición inicial en x; una y que seria la posición inicial en y, y la cantidadx, que seria la cantidad de puntos que quiero trazar. Por ejemplo la letra L, tiene un raya vertical y una horizontal, entonces para trazar la L, se usaría tanto la funcion writey como tambien la funcion writex.

void writex(int x,int y,int cantidadx){

                int i=x;

                while(i<=(cantidadx+x)){

       gotoxy(i,y); cout<<"*";

       gotoxy(i,y+1); cout<<"*";

      i++;

      Sleep(tiempo);

                }

}

 

Ya en el main, solo mando a llamar cada una de las funciones para trazar cada letra que quiero que aparezca en pantalla, en el orden que voy poniendo. Ahí dejo comentados las letras que corresponden a cada bloque de código.

main(){

    //T

   writey(15,2,10);

   writex(10,2,14);

 

   //E

   writey(30,5,10);

   writex(30,5,13);

   writex(30,9,9);

   writex(30,14,13);

   //A

   writey2(70,10,10,-1);

   writey2(70,10,10,1);

   //M

   writey(90,5,10);

   writey(108,5,10);

   writey2(90,5,5,1);

   writey2(108,5,5,-1);

 

   //O

   writey(120,4,6);

   writey(135,4,6);

   writex(126,2,7);

   writex(126,11,7);

   writey2(122,3,1,-1);

   writey2(133,3,1,1);

 

   writey2(122,10,1,1);

   writey2(133,10,1,-1);

 

   //R

   writey(18,25,10);

   writex(18,25,10);

 

   writey(30,27,3);

   writey(30,32,3);

 

   writey2(28,26,1,1);

   writex(22,30,8);

   //O

   writey(50,28,6);

   writey(65,28,6);

   writex(56,26,7);

   writex(56,35,7);

 

   writey2(52,27,1,-1);

   writey2(63,27,1,1);

 

   writey2(52,34,1,1);

   writey2(63,34,1,-1);

 

   //M

   writey(85,25,10);

   writey(103,25,10);

   writey2(85,25,5,1);

   writey2(103,25,5,-1);

 

   //A

   writey2(130,26,10,-1);

   writey2(130,26,10,1);

      getch();

}


Puede ver el funcionamiento en un video de youtube:


 

Revisa todos los materiales disponibles en el canal, siguiendo este enlace:


Un codigo similar hecho con dev c++





AQUI DEJO EL CODIGO COMPLETO

#include<iostream>

#include<windows.h>

#include<conio.h>

int tiempo=40;

void writey(int x,int y,int cantidady){

int j=y;

while(j<=(cantidady+y)){


gotoxy(x,j); cout<<"RBRBR";

      j++;

      Sleep(tiempo);

}

}


void writey2(int x,int y,int cantidady,int iteracion){

   int i=x;

int j=y;

while(j<=(cantidady+y)){


gotoxy(i,j); cout<<"RBRBR";

      j++;

      i=i+iteracion;

      Sleep(tiempo);

}

}

void writex(int x,int y,int cantidadx){

int i=x;

while(i<=(cantidadx+x)){

       gotoxy(i,y); cout<<"R";

       gotoxy(i,y+1); cout<<"B";

      i++;

      Sleep(tiempo);

}

}

main(){

//t

   writey(15,2,10);

   writex(10,2,14);

   //e

   writey(30,5,10);

   writex(30,5,13);

   writex(30,9,9);

   writex(30,14,13);

   //a

   writey2(70,10,10,-1);

   writey2(70,10,10,1);

   //m

   writey(90,5,10);

   writey(108,5,10);

   writey2(90,5,5,1);

   writey2(108,5,5,-1);


   //o

   writey(120,4,6);

   writey(135,4,6);

   writex(126,2,7);

   writex(126,11,7);

   writey2(122,3,1,-1);

   writey2(133,3,1,1);


   writey2(122,10,1,1);

   writey2(133,10,1,-1);


   //r

   writey(18,25,10);

   writex(18,25,10);


   writey(30,27,3);

   writey(30,32,3);


   writey2(28,26,1,1);

   writex(22,30,8);

   //o

   writey(50,28,6);

   writey(65,28,6);

   writex(56,26,7);

   writex(56,35,7);


   writey2(52,27,1,-1);

   writey2(63,27,1,1);


   writey2(52,34,1,1);

   writey2(63,34,1,-1);


   //m

   writey(85,25,10);

   writey(103,25,10);

   writey2(85,25,5,1);

   writey2(103,25,5,-1);


   //a

   writey2(130,26,10,-1);

   writey2(130,26,10,1);

      getch();

}

Comentarios

Entradas más populares de este blog

Felicitaciones de cumpleaños para un programador [tomado de frasesparacumpleaños.com]

INDICADOR LUMINOSO DE VOLUMEN DE UN EQUIPO DE SONIDO (PROGRAMACIÓN EN ARDUINO)