Pueden ayudarme a mejorar esto?

Caiman
31 de Octubre del 2004
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)
}

noel solw
31 de Octubre del 2004
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




Alejandro_
31 de Octubre del 2004
Yo no sé si salta o no la pantalla, pero esta parte del código debería hacer saltar el sistema...

for(short int b=50;b>=0;b--)
{
if(matriz[a][b]!=NULL)
{
if(matriz[a][b-7]!=matriz[a][b])

... ... ...