Estoy creando un programa para jugar al parchís en C y C++, pero no puedo fijar todas las posiciones

Problema con las BGI
Gracias de antemano, tengo un problema, estoy haciendo un parchís entonces quiero comprobar las posiciones de las fichas en el tablero, pero al hacer un bucle para comprobarlo, solo me deja comprobar 12 o 13 posiciones, cuando llego a esta ultima me dice que inicialice las BGI (cosa que es absurda porque en las 11 anteriores no me ha dado error)... Os pongo el código por si os sirve de ayuda, MUCHÍSIMAS GRACIAS
Este seria el código:
#include<ficha.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int pos[]={347,353,347,340,347,329,347,318,347,307,347,296,347,285,347,274, 354,268, 365,268, 376,268, 387,268, 398,268, 409,268, 420,268, 433,268, 433,213, 420,213, 409,213, 398,213, 387,213, 376,213, 365,213, 355,213, 348,206, 348,195, 348,184, 348,173, 348,162, 348,151, 348,140, 348,127, 293,127, 293,140, 293,151, 293,162, 293,173, 293,184, 293,195, 293,206, 286,212, 275,212, 264,212, 253,212, 242,212, 231,212, 220,212, 207,212, 207,267, 220,267, 231,267, 242,267, 253,267, 264,267, 275,267, 286,267, 292,274, 292,285, 292,296, 292,307, 292,318, 292,329, 292,340, 292,353};
void main(void)
{
int x,y;
x=0;
y=0;
for( ; ; )
{
y=x+1;
ficha_azul(pos[x],pos[y]);
getch();
x=x+2;
}
}
//funcion ficha azul dentro de FICHA.H
void ficha_azul(int x, int y)
{
int gdriver=DETECT;
int gmode;
initgraph(&gdriver,&gmode,"c:\\tc\\bgi");
setcolor(WHITE);
setfillstyle(INTERLEAVE_FILL,BLUE);
circle(x,y,5);
floodfill(x,y,WHITE);
}

1 Respuesta

Respuesta
1
Mirando el código que me mandaste, me parece que hay un pequeño error.
Te explico.
La función initgraph(...) es la que inicializa la PC en modo gráfico, para poder cumplir con esta tarea ella necesita reservar cierta cantidad de recursos del sistema, es decir esta es una función bastante costosa, por lo cual debe ser llamada una sola vez y cuando termine el procesamiento del programa hacer un llamado a CloseGraph(...)
En el código que me has enviado estoy mirando que tu haces un llamado a la función ficha_azul(...) ddentro de un bucle y a su vez la función ficha_azul(...) hace un llamado a initgraph(...), por lo que esta ultima está siendo llamada varias veces, cosa que no es aconsejable.
LA solución debe estar en declarar dentro Una funcíon para inicializar el modo gráfico exclusivamente y llamarla antes del bucle y luego que termine el bucle llamar a closegraph(...)
Algo así por ejemplo:
#include<ficha.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
int pos[]={347,353,347,340,347,329,347,318,347,307,347,296,347,285,347,274, 354,268, 365,268, 376,268, 387,268, 398,268, 409,268, 420,268, 433,268, 433,213, 420,213, 409,213, 398,213, 387,213, 376,213, 365,213, 355,213, 348,206, 348,195, 348,184, 348,173, 348,162, 348,151, 348,140, 348,127, 293,127, 293,140, 293,151, 293,162, 293,173, 293,184, 293,195, 293,206, 286,212, 275,212, 264,212, 253,212, 242,212, 231,212, 220,212, 207,212, 207,267, 220,267, 231,267, 242,267, 253,267, 264,267, 275,267, 286,267, 292,274, 292,285, 292,296, 292,307, 292,318, 292,329, 292,340, 292,353};
void main(void)
{
int x,y;
x=0;
y=0;
Inicializar_Modo_Graficos("c:\\tc\\bgi");
for( ; ; )
{
y=x+1;
ficha_azul(pos[x],pos[y]);
getch();
x=x+2;
}
Cerrar_Modo_Grafico();
}
//funcion ficha azul dentro de FICHA.H
void Inicializar_Modo_Graficos(char* bgipath)
{
int gdriver=DETECT;
int gmode;
initgraph(&gdriver,&gmode,bgipath);
}
void Cerrar_Modo_Grafico()
{
//Esta solo debe terminar con el modo gráfico. Te la dejo a tu gusto.
}
void ficha_azul(int x, int y)
{
setcolor(WHITE);
setfillstyle(INTERLEAVE_FILL,BLUE);
circle(x,y,5);
floodfill(x,y,WHITE);
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas