PROGRAM BLACKJACK;
USES CRT,GRAPH;
VAR
NAME1,NAME2:STRING;
C:CHAR;
CARDS:ARRAY[1..13] OF INTEGER;
GD,GM,PTS1,PTS2,ACE1,ACE2,N,N1,N2:INTEGER;
PROCEDURE POINTS(VAR X,Y,Z:INTEGER);
BEGIN
IF Z=1 THEN BEGIN
Y:=Y+1;
X:=X+11;
END;
IF Z>10 THEN X:=X+10;
IF (Z>1) AND (Z<11) THEN X:=X+Z;
IF (X>21) AND (Y>0) THEN BEGIN
X:=X-10;
Y:=Y-1;
END;
END;
PROCEDURE DEAL;
VAR
P:INTEGER;
BEGIN
WRITELN('DEALING CARDS:');
FOR P:=1 TO 2 DO
BEGIN
WRITE(NAME1,':');
N1:=1+RANDOM(12);
CARDS[N1]:=CARDS[N1]+1;
WRITELN(N1);
POINTS(PTS1,ACE1,N1);
IF PTS1=21 THEN WRITE(NAME1,' HAS WON!') ELSE
BEGIN
WRITE(NAME2,':');
N2:=1+RANDOM(12);
CARDS[N2]:=CARDS[N2]+1;
WRITELN(N2);
POINTS(PTS2,ACE2,N2);
IF PTS2=21 THEN WRITE(NAME2,' HAS WON!');
END;
END;
END;
PROCEDURE HIT(VAR A,B,D:INTEGER);
BEGIN
D:=1+RANDOM(12);
WHILE CARDS[D]=4 DO
D:=1+RANDOM(12);
CARDS[D]:=CARDS[D]+1;
WRITELN('YOUR CARD:',D);
POINTS(A,B,D);
END;
BEGIN
RANDOMIZE;
FOR N:=1 TO 13 DO
CARDS[N]:=0;
ACE1:=0;
ACE2:=0;
PTS1:=0;
PTS2:=0;
GD:=DETECT;
INITGRAPH(GD,GM,'C:\TURBO\BGI');
SETCOLOR(BLACK);
CLRSCR;
OUTTEXTXY(270,1,'BLACKJACK');
LINE(5,70,5,270);
LINE(155,70,155,270);
LINE(5,70,155,70);
LINE(5,270,155,270);
OUTTEXTXY(10,80,CHR(3));
OUTTEXTXY(145,255,CHR(3));
LINE(165,70,165,270);
LINE(315,70,315,270);
LINE(165,70,315,70);
LINE(165,270,315,270);
OUTTEXTXY(170,80,CHR(4));
OUTTEXTXY(305,255,CHR(4));
LINE(325,70,325,270);
LINE(475,70,475,270);
LINE(325,70,475,70);
LINE(325,270,475,270);
OUTTEXTXY(330,80,CHR(5));
OUTTEXTXY(465,255,CHR(5));
LINE(485,70,485,270);
LINE(635,70,635,270);
LINE(485,70,635,70);
LINE(485,270,635,270);
OUTTEXTXY(490,80,CHR(6));
OUTTEXTXY(625,255,CHR(6));
DELAY(24000);
CLOSEGRAPH;
CLRSCR;
WRITE('INPUT YOUR NAME,PLAYER1:');
READLN(NAME1);
WRITE('INPUT YOUR NAME,PLAYER2:');
READ(NAME2);
CLRSCR;
DEAL;
WHILE (PTS1<21) AND (PTS2<21) DO
BEGIN
WRITELN('WANT A ''HIT'' ',NAME1,' ?(Y/N):PTS=',PTS1);
READLN(C);
IF C='Y' THEN HIT(PTS1,ACE1,N1);
IF PTS1>21 THEN WRITE(NAME1,' IS DISQUALIFIED-',NAME2,' WINS!') ELSE
IF PTS1=21 THEN WRITE(NAME1,' WINS!') ELSE
BEGIN
WRITELN('WANT A ''HIT'' ',NAME2,' ?(Y/N):PTS=',PTS2);
READLN(C);
IF C='Y' THEN HIT(PTS2,ACE2,N2);
IF PTS2>21 THEN WRITE(NAME2,' IS DISQUALIFIED-',NAME1,' WINS!');
IF PTS2=21 THEN WRITE(NAME2,' WINS!');
END;
END;
READLN;
END.