Adsence

lunes, 7 de noviembre de 2011

Efecto-Matriz-en-C

Leave a Comment
[caption id="attachment_951" align="aligncenter" width="687"]Efecto Matris en C Efecto Matris en C[/caption]

Un colega me pregunto sobre el efecto matriz y aqui esta







[cpp]</pre>
#include <stdio.h>
#include <windows.h>
#include <time.h>
/*
Funcion que dada las coordenardas me permite imprimir una letra, donde x,y son las
coordenadas correspondientes y l, es el num del codigo ascii de la letra a imprimir

*/
void imprimirTexto(int x,int y,int l)
{
if(l!=0)
{
//Declaracion de Cabecera para utilizar el posicionamiento
HANDLE hConsoleOutput;
COORD coord;
hConsoleOutput = GetStdHandle (STD_OUTPUT_HANDLE);
// hasta esta parte se debe dejar fijo

/*A partir de aqui la sintaxis es la siguiente, como en el gotoxy (x,y): x es para la posicion en horizontal y Y para el vertical*/
coord.X = x; coord.Y = y;
SetConsoleCursorPosition (hConsoleOutput, coord);
/*Hasta Aqui*/


/*Esta funcion es para el color de las letras y la sintaxis es la siguiente, el numero es el que cambia*/

SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),3);
//Ahora si imprimo la letra
printf("%c",l);


}

}
//Esto me permitira agregar un elemento a la columna c de la matrix
void insertarLetra(int m[80][25],int c)
{
//Generare la letra aleatoria a agregar,para eso uso el codigo ASCII
int letra=rand()%56;
int aux;
letra=letra+65;
/*
Aqui lo que hare es que la letra que acabo de obtener (var letra) la voy
a colocar en el inicio de la columna c de la matrix m, y luego la que estaba de primero
la pasare a la 2 fila. y haci sucesivamente
*/
for(int i=0;i<24;i++)
{

aux=m[c][i];
m[c][i]=letra;
letra=aux;

}
m[c][14]=letra;

}
void llenarMatriz(int m[80][25])
{
//Esto es para que tenga un efecto "dinamico"
int pu[80];
for(int i=0;i<80;i++)
pu[i]=0;
bool finish=false;
int bn=0;
while(bn<45)
{
//Mira cual columna empezara a agregar letras
bool po=true;
while(po==true)
{
/*
Genero un numero aleatorio enter 0 y 80 (cantidad de columas)
para determinar cual fila le empezare a agregar letras, esto es debido a que
en la pelicual, al empezar a caer las letras estas no caen al mismo tiempo,
es decir primero cae una,luego otra luego otra etc
*/
int n=rand()%81;
/*
Si el vector pu en esa posisicon n es igual a cero, quiere decir que no la e llenado
y por eso empezare a llenarla para que tenga un efecto matrix
*/

if(pu[n]==0)
{
pu[n]=1;
/*
Como halle una columna a la cual no a empezado a caer, me salgo de este ciclo
para empezar a colocarle letras para k caiga
*/
po=false;

}

}
/*
Recorro todo el vector, para determinar cuales columnas tiene el valor de 1(es decir les puedo agregar
letras) para asi empezar el efecto matrix

*/
for(int i=0;i<80;i++)
{
if(pu[i]==1)
insertarLetra(m,i);
}
//Ahora si imprimo la matris
for(int i=0;i<80;i++)
{
for(int j=0;j<15;j++)
{
imprimirTexto(i,j,m[i][j]);
}

}
bn++;

}

}
main()
{
/*
Como la pantalla de C tiene 80 col *25 filas creare una matriz de ese
tamano que se llenara luego aleatoriamente de caracteres
*/
//Esta variable la uso para genera numero aleatorios, para pdoer llenar la matrix
srand(time(NULL));
int m[80][25];
//Aqui voy a inicializa la matrix,donde todos sus componentes son ceros
for(int i=0;i<80;i++)
{
for(int j=0;j<15;j++)
{
m[i][j]=0;
}

}
//Empiezo a llenar la matrix que luego imprimire
llenarMatriz(m);

/*Generar una pausa sin tener que utilizar un getch*/
system("PAUSE");
}
<pre>

[/cpp]

0 comentarios :