-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TP7_EJ8 #89
Comments
Lo edité con lo comentado en https://github.com/PI-ITBA/2024_02 para que se vea mejor el código for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
if (carton[i][j] == bolilla) {
carton[i][j] = -1; // Marcar la bolilla encontrada
esta = 1;
}
}
} recorrés el cartón como si tuviera 5 filas de 3 columnas, y son 3 filas de 5 columnas, y en generaCarton hacés lo mismo. Pero el error es que usás el bolillero para generar los cartones. Y una vez que asignaste las bolillas las sacás del bolillero, entonces nadie puede hacer siquiera una línea. En generarCarton tendrías que crear un bolillero auxiliar, cada vez que generás un cartón. Por eso en nuestro diseño no recibe el bolillero, sólo el cartón a llenar |
codigo corregido y que funciona: #include <stdio.h>
#include "random.h"
#include <stdlib.h>
#define MAX 89
#define MIN 0
#define DIM_BOL 90
#define LINES 3
#define COLS 5
#define DIM_CARTON 15
#define P1 1
#define P2 2
#define ANY 0
typedef int TipoLinea[COLS];
typedef TipoLinea TipoCarton[LINES];
void generarCarton(TipoCarton cartonRand);
int jugar(int bolillero[], TipoCarton jugador1, TipoCarton jugador2, unsigned int *cantBolillas);
int sacarBolilla(int bolillero[], unsigned int *Pcantbolillas);
int controlarCarton(TipoCarton carton, int bolilla);
int buscarBolilla(TipoCarton carton, int bolilla);
int controlarLineas(TipoLinea linea);
void imprimirCarton(TipoCarton carton);
int main(void) {
randomize();
TipoCarton player1;
TipoCarton player2;
int vecBolillero[DIM_BOL];
int flag = ANY;
int gamePlay;
int ronda = 1;
unsigned int cantBolillas = DIM_BOL; // Cantidad de bolillas restantes
// Inicializar el bolillero con números del 1 al 90
for (int i = 0; i < DIM_BOL; i++) {
vecBolillero[i] = i + 1;
}
generarCarton(player1);
generarCarton(player2);
// Bucle del juego hasta que haya un ganador
while (flag == ANY && cantBolillas > 0) {
printf("Ronda: %d\n", ronda++);
gamePlay = jugar(vecBolillero, player1, player2, &cantBolillas);
if (gamePlay == P1) {
flag = P1;
printf("¡Jugador 1 ha ganado!\n");
} else if (gamePlay == P2) {
flag = P2;
printf("¡Jugador 2 ha ganado!\n");
}
}
if (cantBolillas == 0 && flag == ANY) {
printf("¡Se acabaron las bolillas y no hubo ganador!\n");
}
return 0;
}
void generarCarton(TipoCarton cartonRand) {
int indice;
int bolilleroAux[DIM_BOL];
for (int i = 0; i < DIM_BOL; i++) {
bolilleroAux[i] = i + 1;
}
for (int i = 0; i < LINES; i++) {
for (int j = 0; j < COLS; j++) {
indice = randInt(MIN, MAX - i); // Índice aleatorio
cartonRand[i][j] = bolilleroAux[indice]; // Asignar bolilla al cartón
bolilleroAux[indice] = bolilleroAux[MAX - i]; // Actualizar bolillero
}
}
}
int jugar(int bolillero[], TipoCarton jugador1, TipoCarton jugador2, unsigned int *cantBolillas) {
int winner = ANY;
int p1 = 0;
int p2 = 0;
int num = sacarBolilla(bolillero, cantBolillas); // Extraer una bolilla
printf("Bolilla extraída: %d\n", num);
p1 = controlarCarton(jugador1, num); // Controlar bolilla para jugador 1
p2 = controlarCarton(jugador2, num); // Controlar bolilla para jugador 2
// Verificar si hay ganador
if (p1 == LINES) {
winner = P1;
} else if (p2 == LINES) {
winner = P2;
}
imprimirCarton(jugador1);
putchar('\n');
imprimirCarton(jugador2);
return winner;
}
int sacarBolilla(int bolillero[], unsigned int *Pcantbolillas) {
int bolitaExtraida = randInt(MIN, *Pcantbolillas - 1); // Generar índice aleatorio
int bolilla = bolillero[bolitaExtraida]; // Extraer la bolilla del bolillero
bolillero[bolitaExtraida] = bolillero[*Pcantbolillas - 1]; // Intercambiar con la última bolilla disponible
(*Pcantbolillas)--; // Reducir la cantidad de bolillas disponibles
return bolilla; // Retornar la bolilla extraída
}
int controlarCarton(TipoCarton carton, int bolilla) {
int cantLineas = 0;
buscarBolilla(carton, bolilla); // Marcar si la bolilla está en el cartón
// Controlar líneas completas
for (int i = 0; i < LINES; i++) { // Controlar las 3 líneas del cartón
if (controlarLineas(carton[i])) {
cantLineas++;
}
}
return cantLineas;
}
int buscarBolilla(TipoCarton carton, int bolilla) {
int esta = 0;
// Buscar bolilla en el cartón
for (int i = 0; i < LINES; i++) {
for (int j = 0; j < COLS; j++) {
if (carton[i][j] == bolilla) {
carton[i][j] = -1; // Marcar la bolilla encontrada
esta = 1;
}
}
}
return esta;
}
int controlarLineas(TipoLinea linea) {
int completa = 0;
// Verificar si una línea está completa
for (int i = 0; i < COLS; i++) { // Controlar todas las posiciones de la línea
if (linea[i] == -1) {
completa++;
}
}
return (completa == COLS); // Retorna verdadero si la línea está completa
}
void imprimirCarton(TipoCarton carton) {
// Imprimir el cartón
for (int i = 0; i < LINES; i++) {
for (int j = 0; j < COLS; j++) {
if (carton[i][j] == -1) {
printf(" X\t");
} else {
printf("%d\t", carton[i][j]);
}
}
putchar('\n');
}
}
|
Sí, ahora está bien. |
Buenas noches! Esta es mi version del ejercicio BINGO. Mi problema esta en que deberia haber un ganador siempre y no sucede. Le puse un limite de 90 rondas pero nunca llega a un ganador antes de las 90. se que el error debe ser el tema de menter el mismo numero al bolillero pero no se como solucionarlo. GRACIAS POR LEER
The text was updated successfully, but these errors were encountered: