Buen día, quería consultar si la forma en que generé el cartón y saqué las bolillas es correcta.
Sobre el resto del código no tengo ninguna duda en particular, lo probé varias veces y no encontré nada raro, pero si ven algún error agradezco la corrección.
#define CANT_BOLILLAS 90
#define COL 5
#define FIL 3
typedef int TipoLinea[COL]; //vec de 5 int
typedef TipoLinea TipoCarton[FIL]; //mat de 3x5
void generaCarton(TipoCarton carton);
void imprimeCarton(TipoCarton carton);
int jugar(int bolillero[], TipoCarton jug1, TipoCarton jug2);
int sacarBolilla (int bolillero[], int * cantBolillas);
int controlaCarton(TipoCarton carton, int bolilla);
int buscarBolilla(TipoCarton carton, int bolilla);
int controlaLinea(TipoLinea fila);
int main(void) {
srand(time(NULL));
//primero armo los cartones
TipoCarton Jug1, Jug2;
generaCarton(Jug1);
printf("Cartón 1: \n");
imprimeCarton(Jug1);
generaCarton(Jug2);
printf("Cartón 2: \n");
imprimeCarton(Jug2);
//Ahora ya puedo jugar
int bolillero[CANT_BOLILLAS];
for(int i = 0; i < CANT_BOLILLAS; ++i) {
bolillero[i] = i + 1;
}
int ganador = jugar(bolillero, Jug1, Jug2);
if(ganador == 3) {
printf("Ha sido un empate\n");
}
else if(ganador == 1)
printf("El ganador es el jugador 1\n");
else
printf("El ganador es el jugador 2\n");
}
void generaCarton(TipoCarton carton) {
int numeros[CANT_BOLILLAS]; //numeros entre 1 y 90
for(int i = 0; i < CANT_BOLILLAS; ++i) {
numeros[i] = i + 1;
}
int aux, nuevapos, cant = 0;
for(int i = 0; i < FIL; ++i) {
for(int j = 0; j < COL; ++j) {
nuevapos = randInt(0, CANT_BOLILLAS - 1 - cant);
carton[i][j] = numeros[nuevapos];
//Mando al final el numero que ya use para no usarlo mas
aux = numeros[nuevapos];
numeros[nuevapos] = numeros[CANT_BOLILLAS - 1 - cant];
numeros[CANT_BOLILLAS - 1 - cant] = aux;
++cant;
}
}
}
void imprimeCarton(TipoCarton carton) {
for(int i = 0; i < FIL; ++i) {
for(int j = 0; j < COL; ++j) {
printf("%.2d ", carton[i][j]);
}
printf("\n");
}
printf("\n");
}
int jugar(int bolillero[], TipoCarton jug1, TipoCarton jug2) {
int gano1 = 0, gano2 = 0, cantBolillas = CANT_BOLILLAS;
int bolilla, fil_1, fil_2;
while(!gano1 && !gano2) {
bolilla = sacarBolilla(bolillero, &cantBolillas);
printf("bolilla: %d\n", bolilla);
fil_1 = controlaCarton(jug1, bolilla);
fil_2 = controlaCarton(jug2, bolilla);
if(fil_1 == 3) {
gano1 = 1;
}
if (fil_2 == 3) {
gano2 = 1;
}
printf("Carton 1: \n");
imprimeCarton(jug1);
printf("Carton 2: \n");
imprimeCarton(jug2);
}
if(gano1 && gano2) {
return 3;
}
else if(gano2) {
return 2;
}
return 1;
}
int sacarBolilla (int bolillero[], int * cantBolillas) {
int lugarBolilla, aux, bolilla;
lugarBolilla = randInt(1, (*cantBolillas));
bolilla = bolillero[lugarBolilla - 1];
//lo mando al final para no usarlo mas
aux = bolillero[(*cantBolillas) - 1];
bolillero[(*cantBolillas) - 1] = bolillero[lugarBolilla - 1];
bolillero[lugarBolilla - 1] = aux;
--(*cantBolillas);
return bolilla;
}
int controlaCarton(TipoCarton carton, int bolilla) {
int filasCompletadas = 0, aparece;
aparece = buscarBolilla(carton, bolilla);
for(int i = 0; i < FIL; ++i) {
if(controlaLinea (carton[i])) {
++filasCompletadas;
}
}
return filasCompletadas;
}
int buscarBolilla(TipoCarton carton, int bolilla) {
int found = 0;
for(int i = 0; i < FIL && !found; ++i) {
for(int j = 0; j < COL && !found; ++j) {
if(carton[i][j] == bolilla) {
carton[i][j] = 0;
found = 1;
}
}
}
return found;
}
int controlaLinea(TipoLinea fila) {
int completados = 0;
for(int j = 0; j < COL; ++j) {
if(fila[j] == 0) {
++completados;
}
}
return (completados == COL);
}
Buen día, quería consultar si la forma en que generé el cartón y saqué las bolillas es correcta. Sobre el resto del código no tengo ninguna duda en particular, lo probé varias veces y no encontré nada raro, pero si ven algún error agradezco la corrección.