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.
137 lines
2.5 KiB
ObjectPascal
137 lines
2.5 KiB
ObjectPascal
unit Game;
|
|
|
|
{$IFDEF FPC}
|
|
{$mode objfpc}{$H+}
|
|
{$ENDIF}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes
|
|
, SysUtils
|
|
, Crt
|
|
, Deck
|
|
;
|
|
|
|
type
|
|
{ TGame }
|
|
TGame = class
|
|
private
|
|
FStash: Integer;
|
|
FBet: Integer;
|
|
FDeck: TDeck;
|
|
|
|
procedure PrintGreeting;
|
|
procedure PrintBalance;
|
|
function GetBet: Integer;
|
|
function TryAgain: Boolean;
|
|
protected
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
|
|
procedure Run;
|
|
published
|
|
end;
|
|
|
|
implementation
|
|
|
|
{ TGame }
|
|
|
|
procedure TGame.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 TGame.PrintBalance;
|
|
begin
|
|
WriteLN('YOU NOW HAVE ', FStash,' DOLLARS.');
|
|
WriteLN;
|
|
end;
|
|
|
|
function TGame.GetBet: Integer;
|
|
begin
|
|
Result:= 0;
|
|
repeat
|
|
Write('WHAT IS YOUR BET: ');
|
|
ReadLN(Result);
|
|
if Result > FStash then
|
|
begin
|
|
WriteLn('SORRY, MY FRIEND, BUT YOU BET TOO MUCH.');
|
|
WriteLn('YOU HAVE ONLY ', FStash,' DOLLARS TO BET.');
|
|
end;
|
|
until (Result >=0) and (Result <= FStash);
|
|
end;
|
|
|
|
function TGame.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;
|
|
|
|
constructor TGame.Create;
|
|
begin
|
|
FDeck:= TDeck.Create;
|
|
end;
|
|
|
|
destructor TGame.Destroy;
|
|
begin
|
|
FDeck.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TGame.Run;
|
|
begin
|
|
ClrScr;
|
|
PrintGreeting;
|
|
repeat
|
|
Randomize;
|
|
FStash:= 100;
|
|
repeat
|
|
PrintBalance;
|
|
FDeck.DrawCards;
|
|
//DrawDealerCards;
|
|
FDeck.ShowDealerCards;
|
|
FBet:= GetBet;
|
|
if FBet = 0 then
|
|
begin
|
|
WriteLN('CHICKEN!!');
|
|
continue;
|
|
end;
|
|
//DrawPlayerCard;
|
|
FDeck.ShowPlayerCard;
|
|
//if (FCardC > FCardA) and (FCardC < FCardB) then
|
|
if FDeck.PlayerWins then
|
|
begin
|
|
WriteLN('YOU WIN!!!');
|
|
Inc(FStash, FBet)
|
|
end
|
|
else
|
|
begin
|
|
WriteLN('SORRY, YOU LOSE');
|
|
Dec(FStash, FBet)
|
|
end;
|
|
until FStash = 0;
|
|
WriteLN('SORRY, FRIEND, BUT YOU BLEW YOUR WAD.');
|
|
WriteLN;
|
|
until not TryAgain;
|
|
WriteLN('O.K., HOPE YOU HAD FUN!');
|
|
end;
|
|
|
|
end.
|
|
|