You are on page 1of 4

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 MAKEPLAYER(VAR PLAYER : PLAYERTYPE); VAR COUNT : INTEGER; BEGIN WITH PLAYER DO BEGIN TOTAL:=0; NUMCARDS:=0; FOR COUNT:=1 TO 5 DO CARDS[COUNT]:=0; END; END; PROCEDURE VALUE (VAR PLAYER : PLAYERTYPE; PLAYERNUM : INTEGER); VAR VALUE, TOTAL : INTEGER; BEGIN TOTAL:=0; CASE DECK[PLAYER.CARDS[PLAYER.NUMCARDS]].FACE OF 2..10 : TOTAL:=DECK[PLAYER.CARDS[PLAYER.NUMCARDS]].FACE; 11..13 : TOTAL:=10; 1 : BEGIN IF PLAYERNUM=1 THEN IF TOTAL>10 THEN TOTAL:=TOTAL+1 ELSE TOTAL:=TOTAL+11 ELSE BEGIN REPEAT GOTOXY(1,23);

WRITELN('DO YOU WANT YOUR ACE TO COUNT AS A 1 OR 11?'); READLN(VALUE); WRITELN(VALUE); UNTIL (VALUE IN [1,11]) AND (IORESULT=0); TOTAL:=VALUE; END; END; END; PLAYER.TOTAL:=PLAYER.TOTAL+TOTAL; END; PROCEDURE HITME(VAR PLAYER : PLAYERTYPE; PLAYERNUM : INTEGER); VAR CARD : INTEGER; BEGIN REPEAT CARD:=RANDOM(52); UNTIL ((CARD<>0) AND (DECK[CARD].INDECK<>FALSE)); IF PLAYER.NUMCARDS<>5 THEN BEGIN DECK[CARD].INDECK:=FALSE; PLAYER.CARDS[PLAYER.NUMCARDS+1]:=CARD; PLAYER.NUMCARDS:=PLAYER.NUMCARDS+1; END; VALUE(PLAYER,PLAYERNUM); END; PROCEDURE DISPLAYCARDS (PLAYERNUM, NUMCARDS : INTEGER; PLAYER : PLAYERTYPE); VAR COUNT : INTEGER; BEGIN GOTOXY(20,1); WRITE('COMPUTER''S CARDS'); GOTOXY(40,1); WRITE('HUMAN''S CARDS'); FOR COUNT:=1 TO NUMCARDS DO BEGIN GOTOXY(PLAYERNUM*20,COUNT+1); CASE DECK[PLAYER.CARDS[COUNT]].FACE OF 1 : WRITE('A'); 2..10 : WRITE(DECK[PLAYER.CARDS[COUNT]].FACE); 11 : WRITE('J'); 12 : WRITE('Q'); 13 : WRITE('K'); END; WRITE(DECK[PLAYER.CARDS[COUNT]].SUIT); GOTOXY(PLAYERNUM*20,10); IF PLAYERNUM=2 THEN WRITE('TOTAL OF CARDS: ',PLAYER.TOTAL); END; END; PROCEDURE PLAY(VAR HUMAN,COMPUTER : PLAYERTYPE); VAR DONE : BOOLEAN; YESNO : CHAR; BEGIN DONE:=FALSE; REPEAT REPEAT GOTOXY(1,23); WRITELN('DO YOU WANT ANOTHER CARD?'); READLN(YESNO); YESNO:=UPCASE(YESNO); UNTIL (IORESULT=0) AND (YESNO IN ['Y','N']); IF YESNO='Y' THEN HITME(HUMAN,2) ELSE DONE:=TRUE;

CLRSCR; DISPLAYCARDS(1,1,COMPUTER); DISPLAYCARDS(2,HUMAN.NUMCARDS,HUMAN); UNTIL (DONE=TRUE) OR (HUMAN.TOTAL>20); END; PROCEDURE COMPUTERPLAY(VAR HUMAN,COMPUTER : PLAYERTYPE); VAR DONE : BOOLEAN; BEGIN DISPLAYCARDS(1,COMPUTER.NUMCARDS,COMPUTER); DISPLAYCARDS(2,HUMAN.NUMCARDS,HUMAN); DONE:=FALSE; REPEAT IF COMPUTER.TOTAL>17 THEN DONE:=TRUE ELSE HITME(COMPUTER,1); DISPLAYCARDS(1,COMPUTER.NUMCARDS,COMPUTER); DISPLAYCARDS(2,HUMAN.NUMCARDS,HUMAN); GOTOXY(20,10); WRITE('TOTAL OF CARDS: ',COMPUTER.TOTAL); UNTIL (DONE=TRUE) OR (COMPUTER.TOTAL>20); END; PROCEDURE WINNER(HUMAN, COMPUTER : PLAYERTYPE); VAR COMPWON : BOOLEAN; BEGIN COMPWON:=TRUE; IF (HUMAN.TOTAL>=22) THEN COMPWON:=TRUE ELSE IF (COMPUTER.TOTAL>=22) THEN COMPWON:=FALSE; IF (COMPUTER.TOTAL>=HUMAN.TOTAL) AND (COMPUTER.TOTAL<=21) THEN COMPWON:=TRUE ELSE IF(HUMAN.TOTAL<=21) THEN COMPWON:=FALSE; IF COMPWON THEN BEGIN GOTOXY(37,23); WRITELN('I WIN!'); END ELSE BEGIN GOTOXY(36,23); WRITELN('YOU WIN!'); END; READLN; END; PROCEDURE DEAL; VAR COMPUTER, HUMAN : PLAYERTYPE; COUNT : INTEGER; BEGIN SHUFFLE; MAKEPLAYER(COMPUTER); MAKEPLAYER(HUMAN); FOR COUNT:=1 TO 2 DO BEGIN HITME(COMPUTER,1); HITME(HUMAN,2); CLRSCR; DISPLAYCARDS(1,1,COMPUTER); DISPLAYCARDS(2,HUMAN.NUMCARDS,HUMAN); END;

PLAY(HUMAN,COMPUTER); COMPUTERPLAY(HUMAN,COMPUTER); WINNER(HUMAN,COMPUTER); 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. 1234567890ABCDEF1234567890

You might also like