Sei sulla pagina 1di 5

program LetsBingo;

uses crt;
const
JUGADORES = 10;
CASILLEROS = 100;
type
puntaje = 0..3;
acerte = 1..15;

jugador = record
nombre: string;
puntos: puntaje;
end;

vectorJugadores = array[1..10] of jugador;

BolilleroCarton = array [1..100] of boolean;

jugada = record

carton: BolilleroCarton;
salio: boolean;
aciertos: integer;

end;

VectorPartida = array[1..10] of jugada;

procedure leerJugador(var j: jugador);


begin
Write ('Ingrese el nombre del Jugador: ');
readln(j.nombre);
j.puntos:= 0;
end;

procedure CargarJugadores(var vj: VectorJugadores);


var
i: integer;
begin
for i:= 1 to JUGADORES do begin
leerJugador(vj[i]);
end;
end;

procedure inicializarCartones(var b: BolilleroCarton);


var
i: integer;
begin
for i:=1 to CASILLEROS do {Los cartones comienzan "en blanco"}
b[i]:= FALSE;
end;

procedure NumerosSinRepetir(var b: BolilleroCarton);


var
num, cant: integer;
begin
cant:= 0;
num:= Random (100) + 1;
while(cant <> 15) do begin {La condicion del while se debe a que quiero cargar
solo 15 numeros en el carton}
if((b[num] = FALSE))then begin {Si no sale el cero y el carton esta vacio en
esa posicion, asigna numeros al carton}
cant:= cant + 1;
b[num]:= TRUE;
end;
num:= Random (100) + 1;
end;
end;

procedure CargarCartones(var vp: VectorPartida);


var
i: integer;
begin

for i:= 1 to JUGADORES do begin


inicializarCartones(vp[i].carton);
vp[i].salio:= false;
vp[i].aciertos:= 0;
{Genero 1 carton}
//AsignarCartones(vp[i]);
NumerosSinRepetir(vp[i].carton);
{Inicializo acierto en 0}

end;
end;

procedure CargarCartonesAleatorios(var vp: VectorPartida);


var
num, i: integer;
ok: boolean;
begin
i:= 0;
While (i< 10) do begin
inicializarCartones(vp[i].carton);
vp[i].salio:= false;
vp[i].aciertos:= 0;
{Genero 1 carton}
ok:= false;
num:= Random(10)+1; {defino aleatoriamente a qui?n le voy a asignar el cart?
n}
while (not(ok)) do begin
if ((vp[num].salio = false))then begin {si el n?mero no es 0 y el jugador
no sali? previamente}
NumerosSinRepetir(vp[i].carton); {asigna el cart?n al jugador en la
posici?n del n?mero r?ndom}
vp[num].salio:= true; {cambio el valor del campo en el vector para
saber que ya tiene un cart?n asignado}
ok:= true;
i:= i + 1;
end
else
num:= Random(10)+1; {si el n?mero random fue 0 o repetido saco otro y
vuelvo a evaluarlo}
end;
end;
end;

function numerossinrepetir2 (b:BolilleroCarton): integer;


var
num: integer;
begin
num := Random(100)+1; // genero un n?mero entre 0 y 99
while (b[num] = true) do {si es true ya salio el numero y necesito generar
otro}
num := Random(100)+1;

numerossinrepetir2 := num; {devuelve un n?mero no repetido}


end;

procedure verificarCartonPorJugador (var j:jugada; num:integer);


begin
if (j.carton[num] = true) then
j.aciertos:= j.aciertos +1;
end;

procedure verificarCartonesJugadores(num: integer; var vp: vectorPartida);


var
i:integer;
begin
for i:=1 to 10 do begin {ver por cada jugador si tiene el n?mero en el
cart?n}
if (vp[i].aciertos <> -1) then {s?lo verifico cart?n de jugador que
no gan?}
verificarCartonPorJugador (vp[i],num); {Si est? en true suma
aciertos+1}
end;
end;

procedure verificarGanadores(var vp:VectorPartida; var vj: vectorJugadores;


var jugadoresGanadores: integer;
var puntosQueVanAGanar: integer);
var
i: integer;
ganoAlguienEstaRonda: boolean;
begin
ganoAlguienEstaRonda := false;
for i:= 1 to 10 do begin
if vp[i].aciertos = 15 then begin {Bingo!}
ganoAlguienEstaRonda := true; {pone en true si alguien gan? esta
ronda}
vp[i].aciertos := -1; {ya gan?, no necesito volver a verificar su
cart?n}
vj[i].puntos := puntosQueVanAGanar; {marca los puntos que gan?
el jugador}
jugadoresGanadores:=jugadoresGanadores+1;
end;
end;
if (ganoAlguienEstaRonda) then
puntosQueVanAGanar := puntosQueVanAGanar -1; {resta 1 si alguien gan?
esta ronda}
end;
procedure jugarUnaPartida (var vp:vectorPartida; var vj: vectorJugadores);
var
b: BolilleroCarton;
numQueSalio, jugadoresGanadores, puntosQueVanAGanar,
bolillasSorteadas: integer;

Begin

inicializarCartones(b);

puntosQueVanAGanar:= 3; // etapas, el primero gana 3 puntos

jugadoresGanadores:= 0;

bolillasSorteadas := 0;

while (puntosQueVanAGanar<>0) and (jugadoresGanadores<10) do begin

numQueSalio := numerossinrepetir2(b); //sacar un numero del bolillero

b[numQueSalio]:=true; // marca que ya sali? el numero

verificarCartonesJugadores (numQueSalio,vp);

bolillasSorteadas := bolillasSorteadas +1;

If (bolillasSorteadas >= 15) then {al menos 15 bolillas antes de ver si


hay ganador}

verificarGanadores(vp, vj, jugadoresGanadores, puntosQueVanAGanar);

end;

end;

procedure Ordenar (var vj: vectorJugadores);


var
i,j,p:integer;
aux: jugador;
begin
for i:=1 to JUGADORES-1 do begin {busca el maximo puntaje v[p], entre
v[1], ..., v[9] }
p := i;
for j := i+1 to JUGADORES do begin
if (vj[j].puntos > vj[p].puntos)then
p:=j;
end;
{intercambia v[i] y v[p] }
aux := vj[p];
vj[p] := vj[i];
vj[i] := aux;

end;
end;

procedure ImprimirPuntos(vj: vectorJugadores);


var
i:integer;
begin
Ordenar(vj);
for i:= 1 to JUGADORES do begin
case vj[i].puntos of
3: writeln('El ganador o ganadores es: ', vj[i].nombre);
0..2: writeln('El jugador ', vj[i].nombre,' quedo en la posicion ', i);
end;
end;
end;

Var

vj: vectorJugadores;

vp: vectorPartida;
i: integer;

{Se supone que tiene que andar, sumando todos los m?dulos}

Begin
Randomize;

cargarJugadores (vj); {Falta el nombre del proceso arriba, no?}

cargarCartones (vp);

jugarUnaPartida(vp, vj);

for i:= 1 to JUGADORES do


writeln(vj[i].nombre, ' puntos: ', vj[i].puntos);

ImprimirPuntos(vj);

readkey;

end.

Potrebbero piacerti anche