mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-12 15:50:20 -08:00
Spaces tend to cause annoyances in a Unix-style shell environment. This change fixes that.
153 lines
2.8 KiB
ObjectPascal
153 lines
2.8 KiB
ObjectPascal
program aceyducey;
|
|
|
|
{$IFDEF FPC}
|
|
{$mode objfpc}{$H+}
|
|
{$ENDIF}
|
|
|
|
uses
|
|
Crt;
|
|
|
|
var
|
|
Stash: Integer;
|
|
CardA: Integer;
|
|
CardB: Integer;
|
|
CardC: Integer;
|
|
Bet: Integer;
|
|
|
|
procedure PrintGreeting;
|
|
begin
|
|
WriteLN(' ':26, 'ACEY DUCEY CARD GAME');
|
|
WriteLN(' ':15, 'CREATIVE COMPUTING MORRISTOWN, NEW JERSEY');
|
|
WriteLN;
|
|
WriteLN;
|
|
WriteLN('ACEY-DUCEY IS PLAYED IN THE FOLLOWING MANNER ');
|
|
WriteLN('THE DEALER (COMPUTER) DEALS TWO CARDS FACE UP');
|
|
WriteLN('YOU HAVE AN OPTION TO BET OR NOT BET DEPENDING');
|
|
WriteLN('ON WHETHER OR NOT YOU FEEL THE CARD WILL HAVE');
|
|
WriteLN('A VALUE BETWEEN THE FIRST TWO.');
|
|
WriteLN('IF YOU DO NOT WANT TO BET, INPUT A 0');
|
|
WriteLN;
|
|
end;
|
|
|
|
procedure PrintBalance;
|
|
begin
|
|
WriteLN('YOU NOW HAVE ', Stash,' DOLLARS.');
|
|
WriteLN;
|
|
end;
|
|
|
|
procedure PrintCard(const ACard: Integer);
|
|
begin
|
|
if ACard < 11 then
|
|
begin
|
|
Write(ACard);
|
|
end;
|
|
if ACard = 11 then
|
|
begin
|
|
Write('JACK');
|
|
end;
|
|
if ACard = 12 then
|
|
begin
|
|
Write('QUEEN');
|
|
end;
|
|
if ACard = 13 then
|
|
begin
|
|
Write('KING');
|
|
end;
|
|
if ACard = 14 then
|
|
begin
|
|
Write('ACE');
|
|
end;
|
|
end;
|
|
|
|
procedure DrawDealerCards;
|
|
var
|
|
tmp: Integer;
|
|
begin
|
|
Write('HERE ARE YOUR NEXT TWO CARDS: ');
|
|
repeat
|
|
CardA:= Random(14) + 2;
|
|
until (CardA >= 2) and (CardA <= 14);
|
|
repeat
|
|
CardB:= Random(14) + 2;
|
|
until (CardB >= 2) and (CardB <= 14) and (CardA <> CardB);
|
|
if CardA > CardB then
|
|
begin
|
|
tmp:= CardB;
|
|
CardB:= CardA;
|
|
CardA:= tmp;
|
|
end;
|
|
PrintCard(CardA);
|
|
Write(' ');
|
|
PrintCard(CardB);
|
|
WriteLN;
|
|
WriteLN;
|
|
end;
|
|
|
|
procedure DrawPlayerCard;
|
|
begin
|
|
repeat
|
|
CardC:= Random(14) + 2;
|
|
until (CardC >= 2) and (CardC <= 14);
|
|
PrintCard(CardC);
|
|
WriteLN;
|
|
WriteLN;
|
|
end;
|
|
|
|
function GetBet: Integer;
|
|
begin
|
|
Result:= 0;
|
|
repeat
|
|
Write('WHAT IS YOUR BET: ');
|
|
ReadLN(Result);
|
|
if Result > Stash then
|
|
begin
|
|
WriteLn('SORRY, MY FRIEND, BUT YOU BET TOO MUCH.');
|
|
WriteLn('YOU HAVE ONLY ', Stash,' DOLLARS TO BET.');
|
|
end;
|
|
until (Result >=0) and (Result <= Stash);
|
|
end;
|
|
|
|
function TryAgain: Boolean;
|
|
var
|
|
answer: String;
|
|
begin
|
|
Result:= False;
|
|
Write('TRY AGAIN (YES OR NO)');
|
|
ReadLn(answer);
|
|
Result:= (LowerCase(answer)='yes') or (LowerCase(answer)='y');
|
|
end;
|
|
|
|
begin
|
|
ClrScr;
|
|
PrintGreeting;
|
|
repeat
|
|
Randomize;
|
|
Stash:= 100;
|
|
repeat
|
|
PrintBalance;
|
|
DrawDealerCards;
|
|
Bet:= GetBet;
|
|
if Bet = 0 then
|
|
begin
|
|
WriteLN('CHICKEN!!');
|
|
continue;
|
|
end;
|
|
DrawPlayerCard;
|
|
if (CardC > CardA) and (CardC < CardB) then
|
|
begin
|
|
WriteLN('YOU WIN!!!');
|
|
Inc(Stash, Bet)
|
|
end
|
|
else
|
|
begin
|
|
WriteLN('SORRY, YOU LOSE');
|
|
Dec(Stash, Bet)
|
|
end;
|
|
until Stash = 0;
|
|
WriteLN('SORRY, FRIEND, BUT YOU BLEW YOUR WAD.');
|
|
WriteLN;
|
|
until not TryAgain;
|
|
WriteLN('O.K., HOPE YOU HAD FUN!');
|
|
end.
|
|
|