Pueden ayudarme a mejorar esto?
Este es un programa que me dejaron, lo termine pero me dicen que se puede mejorar todavía ya que al ejecutarlo hay momentos en que, el texto se mueve muy lento o da la impresión de que la pantalla salta alguien me puede decir porqué y como puedo arreglarlo.
Les dejo el código; el programa es una vil copia de lo que debiria hacer el protector de matrix
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
void mueve(int matriz[][51]);
void main(void)
{
short int letra,x;
int matriz_letras[81][51];
textcolor(14);
clrscr();
for(short int a=0;a<81;a++)
{
for(short int b=50;b>=0;b--)
matriz_letras[a][b]=NULL;
}
randomize();
do
{
letra=random(256);
x=random(80);
if(!letra)
letra++;
if(!x)
x++;
matriz_letras[x][1]=letra;
gotoxy(x,1); textcolor(2); cprintf("%c",matriz_letras[x][1]);
mueve(matriz_letras);
delay(60);
}
while(!kbhit());
}
void mueve(int matriz[][51])
{
short int letra;
for(short int a=0;a<80;a++)
{
for(short int b=50;b>=0;b--)
{
if(matriz[a][b]!=NULL)
{
if(matriz[a][b-7]!=matriz[a][b])
{
matriz[a][b+1]=matriz[a][b];
gotoxy(a,b+1); textcolor(2); cprintf("%c",matriz[a][b+1]);
}
else
{
srand(time(NULL));
letra=rand()%256;
matriz[a][b-7]=letra;
gotoxy(a,b-7); textcolor(2); cprintf("%c",matriz[a][b-7]);
}
}//if(matriz!=NULL)
}//for(b)
}//for(a)
}
Les dejo el código; el programa es una vil copia de lo que debiria hacer el protector de matrix
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>
void mueve(int matriz[][51]);
void main(void)
{
short int letra,x;
int matriz_letras[81][51];
textcolor(14);
clrscr();
for(short int a=0;a<81;a++)
{
for(short int b=50;b>=0;b--)
matriz_letras[a][b]=NULL;
}
randomize();
do
{
letra=random(256);
x=random(80);
if(!letra)
letra++;
if(!x)
x++;
matriz_letras[x][1]=letra;
gotoxy(x,1); textcolor(2); cprintf("%c",matriz_letras[x][1]);
mueve(matriz_letras);
delay(60);
}
while(!kbhit());
}
void mueve(int matriz[][51])
{
short int letra;
for(short int a=0;a<80;a++)
{
for(short int b=50;b>=0;b--)
{
if(matriz[a][b]!=NULL)
{
if(matriz[a][b-7]!=matriz[a][b])
{
matriz[a][b+1]=matriz[a][b];
gotoxy(a,b+1); textcolor(2); cprintf("%c",matriz[a][b+1]);
}
else
{
srand(time(NULL));
letra=rand()%256;
matriz[a][b-7]=letra;
gotoxy(a,b-7); textcolor(2); cprintf("%c",matriz[a][b-7]);
}
}//if(matriz!=NULL)
}//for(b)
}//for(a)
}
No me resulto muy claro lo que tu programa tiene que hacer en la pantalla.]
Que te parece esta version ?
// program letras.cpp
// written in borland c++ - ver 3.1
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
const int N = 80,
WRITE = 1,
ERRASE = 0,
MAXI = 48;
struct Node
{
char letra;
int color,
y;
Node() { y = 0;} // CONSTRUCTOR
void InitNode()
{
letra = 30 + random(200);
color = 1 + random(15);
y = 1;
} // INIT NODE
int empty() {return y == 0;} // EMPTY
void show(int x,int write)
{
if(!write)
textcolor(BLACK);
else
textcolor(color);
gotoxy(x,int(y));
cprintf("%c",letra);
} // SHOW
}; // NODE
void Init(Node *a,int qty)
{
for(int i = 0;i < qty;i++)
{
int x = random(N);
if(a[x].empty())
a[x].InitNode();
} // FOR I
} // INIT
void Show(Node *a,int write)
{
for(int x = 0;x < N;x++)
if(!a[x].empty())
a[x].show(x+1,write);
} // SHOW
void Move(Node *a)
{
for(int x = 0;x < N;x++)
if(!a[x].empty())
{
a[x].y += random(4) + 1;
if(a[x].y > MAXI)
a[x].InitNode();
}
} // MOVE
void main(void)
{
randomize();
_setcursortype(0);
clrscr();
Node a[N];
Init(a,N);
while(!kbhit())
{
Show(a,WRITE);
delay(200);
Show(a,ERRASE);
Move(a);
}
textcolor(WHITE);
_setcursortype(2);
} // MAIN
Que te parece esta version ?
// program letras.cpp
// written in borland c++ - ver 3.1
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
const int N = 80,
WRITE = 1,
ERRASE = 0,
MAXI = 48;
struct Node
{
char letra;
int color,
y;
Node() { y = 0;} // CONSTRUCTOR
void InitNode()
{
letra = 30 + random(200);
color = 1 + random(15);
y = 1;
} // INIT NODE
int empty() {return y == 0;} // EMPTY
void show(int x,int write)
{
if(!write)
textcolor(BLACK);
else
textcolor(color);
gotoxy(x,int(y));
cprintf("%c",letra);
} // SHOW
}; // NODE
void Init(Node *a,int qty)
{
for(int i = 0;i < qty;i++)
{
int x = random(N);
if(a[x].empty())
a[x].InitNode();
} // FOR I
} // INIT
void Show(Node *a,int write)
{
for(int x = 0;x < N;x++)
if(!a[x].empty())
a[x].show(x+1,write);
} // SHOW
void Move(Node *a)
{
for(int x = 0;x < N;x++)
if(!a[x].empty())
{
a[x].y += random(4) + 1;
if(a[x].y > MAXI)
a[x].InitNode();
}
} // MOVE
void main(void)
{
randomize();
_setcursortype(0);
clrscr();
Node a[N];
Init(a,N);
while(!kbhit())
{
Show(a,WRITE);
delay(200);
Show(a,ERRASE);
Move(a);
}
textcolor(WHITE);
_setcursortype(2);
} // MAIN
