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 laventana de texto a la posición dada según las coordenadas especificadas por lospará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:
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
Publicar un comentario