Problemas con las BGI

Hola, gracias de antemano, quería saber si me podríais decir otra forma de poner este código...
int dado(void)
{
int tirada;
int gdriver=VGA;
int gmode=VGAHI;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
do{
clearviewport();
setcolor(WHITE);
rectangle(240,160,400,320);
setfillstyle(SOLID_FILL,WHITE);
floodfill(281,241,WHITE);
tirada=0;
tirada=(rand()%6)+1;
switch(tirada)
{
case 1:
{
setcolor(BLACK);
circle(320,240,15);
setfillstyle(SOLID_FILL,BLACK);
floodfill(320,240,BLACK);
break;
}
case 2:
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(360,200,15);
circle(280,280,15);
floodfill(360,200,BLACK);
floodfill(280,280,BLACK);
break;
}
case 3:
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(360,200,15);
circle(280,280,15);
circle(320,240,15);
floodfill(360,200,BLACK);
floodfill(280,280,BLACK);
floodfill(320,240,BLACK);
break;
}
case 4:
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(360,200,15);
circle(280,280,15);
circle(280,200,15);
circle(360,280,15);
floodfill(360,200,BLACK);
floodfill(280,280,BLACK);
floodfill(280,200,BLACK);
floodfill(360,280,BLACK);
break;
}
case 5:
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(320,240,15);
circle(360,200,15);
circle(280,280,15);
circle(280,200,15);
circle(360,280,15);
floodfill(320,240,BLACK);
floodfill(360,200,BLACK);
floodfill(280,280,BLACK);
floodfill(280,200,BLACK);
floodfill(360,280,BLACK);
break;
}
case 6:
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
circle(280,240,15);
circle(360,240,15);
circle(360,200,15);
circle(280,280,15);
circle(280,200,15);
circle(360,280,15);
floodfill(360,200,BLACK);
floodfill(280,280,BLACK);
floodfill(280,200,BLACK);
floodfill(280,240,BLACK);
floodfill(360,240,BLACK);
floodfill(360,280,BLACK);
break;
}
}
delay(300);
}while(!kbhit());
fflush(stdin);
delay(900);
closegraph();
return tirada;
}
Es un dado que va cambiando hasta que se pulsa una tecla, pero cuando ejecuto la rutina varias veces en un parchís que estoy desarrollando se ralentiza he incluso sale del bucle sin pulsar tecla... No se que puede ser, muchas gracias ;)

2 Respuestas

Respuesta
1
Se me ocurre a bote pronto que metas los parámetros que pasas a las rutinas en un array de estructuras. Con el valor de la tirada seleccionas cual es la que vas a usar y escoges los parámetros de la misma, todos con una misma rutina, aunque tu código no está mal, es más rápido que el que te propongo, pero también ocupa bastante más... El problema que planteas, puede producirse porque la librería BGI te exija que cierres algo que no cierras o que liberes algún recurso que no liberas... o a un bug en dicha librería. Lamento que no la he usado nunca y no puedo darte ideas sobre lo que ue puede estar pasando.
Respuesta
1
Si el problema que tienes es que esta función se ejecuta lenta siempre podrías rebajar el tiempo de espera de los delay y cambiar el case por if anidados (son más rápidos).
Si el problema es que esta función se ejecuta más lenta cada vez que la llamas sera probablemente un problema de liberar memoria.
El kbhit te debería esperar a que haya una tecla en el buffer de teclado. Si sale del bucle sin que hayas pulsado ejecuta este código para ver que carácter ha tomado, a ver si te sirve de pista.
http://c.conclase.net/Borland/conio/kbhit.html

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas