Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TYPE
baraja = array [1..52] of integer;
PROCEDURE MostrarMazo(mazo:baraja);
(* Procedimiento realizado para testeo. Muestra el mazo *)
VAR
i: integer;
BEGIN
for i:= 1 to 52 do
writeln(mazo)
END;
VAR
mazo : baraja;
partida, apuesta, balance, puntero, jugadaC, jugadaJ : integer;
manoJ: array[1..11] of integer;
manoC: array[1..10] of integer;
BEGIN
Randomize;
LimpiarBaraja(mazo);
LimpiarMano(manoJ);
LimpiarMano(manoC);
(* Inicializo a 0 el mazo y las manos del jugador y casino *)
Barajar(mazo);
partida := 1;
apuesta := 2;
balance := 0;
puntero := 1;
(* El puntero lo uso para indicar la carta siguiente a robar en el mazo *)
writeln('Partida: ',partida,'| Apuesta: ',apuesta,'| Balance: ',balance);
writeln('---------------------------------------------');
(* Partida, Apuesta y Balance son elementos que todavía no uso *)
manoJ[1] := mazo[puntero];
(* Se entrega una carta al jugador *)
puntero := puntero + 1;
manoJ[2] := mazo[puntero];
(* Se entrega una carta al jugador *)
puntero := puntero + 1;
manoC[1] := mazo[puntero];
(* Se entrega una carta al casino *)
puntero := puntero + 1;
jugadaJ := SumaManoJ(manoJ);
jugadaC := SumaManoC(manoC);
(* Asigno el valor de cada jugada llamando a la función SumaMano *)
writeln('Casino (',jugadaC,')');
writeln('Jugador (',jugadaJ,')')
(* Muestro el valor de las jugadas *)
END.
Digamos que lo que hago es barajar el mazo, repartir 2 cartas al jugador y una al casino, y
mostrar el valor de cada jugada. Es decir, que si al jugador le reparto un 4 y un 10, y al casino
un 7, el resultado tendría que ser:
Casino (7)
Jugador (14)
Sin embargo, por algún extraño motivo que se me escapa, no me funciona bien "la mano del
Casino", ya que la salida del programa cuando llamo a la función SumaManoC es:
manoLength: 10
mano[1]: 0
mano[2]: 0
mano[3]: 0
mano[4]: 0
mano[5]: 0
mano[6]: 0
mano[7]: 0
mano[8]: 0
mano[9]: 0
mano[10]: -27516
Casino (-27516)
La cosa es que si a la función SumaManoC, en vez de pasar el array como valor, lo paso como
variable, el elemento décimo ya toma el valor 0, pero el primer elemento también sigue
tomándolo (cuando si muestro su valor desde el código principal, sí lo muestra correctamente):
manoLength: 10
mano[1]: 0
mano[2]: 0
mano[3]: 0
mano[4]: 0
mano[5]: 0
mano[6]: 0
mano[7]: 0
mano[8]: 0
mano[9]: 0
mano[10]: 0
Casino (0)
a ver ... te doy la idea, es una matriz y lo único que haces es apuntar un índice
bueno, lo tienes muy sencillo.... o lo haces generando ascii o simplemente como un
puntero , como seria eso?? de las muchas posibilidades que tienes supongo que
también tendrás que tener los palos entonces tenes que hacer matriz bidimensional
selanabar palo, carta: 1.... K y sacar una carta es bien sencillo en la matriz tienes
13 cartas 1 al 10 y las otras (J Q K ) bien ya tenes las posiciones ahora selanabar
un generador de números aleatorios, luego que no tenga repetición en función de la
carta que saques anteriormente y, el resultado es el puntero de las cartas que
tienes: 1 posición por carta el resto, es representación .
Edit : ahhh me olvide y para realizarlo te sugiero Lazarus que no es otra cosa que
freepascal con un ide.
PROGRAM BLACKJACK;
USES CRT;
TYPE
CARDTYPE = RECORD
INDECK : BOOLEAN;
SUIT : CHAR;
FACE : INTEGER;
END;
PLAYERTYPE = RECORD
TOTAL : INTEGER;
NUMCARDS : INTEGER;
CARDS : ARRAY[1..5] OF INTEGER;
END;
VAR
DECK : ARRAY [1..52] OF CARDTYPE;
PROCEDURE SHUFFLE;
VAR COUNT : INTEGER;
BEGIN
FOR COUNT:=1 TO 52 DO
BEGIN
WITH DECK[COUNT] DO BEGIN
INDECK:=TRUE;
SUIT:=(CHR(((COUNT-1) DIV 13)+3));
IF (COUNT MOD 13)<> 0 THEN
FACE:=(COUNT MOD 13)
ELSE
FACE:=13;
END;
END;
END;
PROCEDURE MENU;
VAR CHOICE : INTEGER;
BEGIN
REPEAT
REPEAT
CLRSCR;
GOTOXY(30,12);
WRITELN('***BLACKJACK***');
GOTOXY(30,15);
WRITELN('1 TO PLAY HAND');
GOTOXY(30,16);
WRITELN('2 TO EXIT');
WRITELN('ENTER YOUR CHOICE : ');
READLN(CHOICE);
UNTIL CHOICE IN [1,2];
CASE CHOICE OF
1 : DEAL;
2 : HALT;
END;
UNTIL CHOICE=2;
END;
BEGIN
RANDOMIZE;
CLRSCR;
MENU;
READKEY;
END.