home *** CD-ROM | disk | FTP | other *** search
- { Included File: CRIBBAGE.PS2 }
-
- procedure makedeck; { creates deck }
- var
- cardnum: 0..decksize;
- rank: ranktype;
- suit: suitype;
- begin
- cardnum:=0;
- for suit:=hearts to spades do
- for rank:=1 to ranksize do
- begin
- cardnum:=cardnum+1;
- deck[cardnum].rank:=rank;
- deck[cardnum].suit:=suit
- end
- end; {makedeck}
-
- procedure shuffle;
- var
- curcard, { current card number }
- newcard: 1..decksize; { where to shuffle the current card to }
- tmp: card;
- begin
- for curcard:=1 to decksize do
- begin
- newcard:=random(decksize)+1;
- tmp:=deck[newcard];
- deck[newcard]:=deck[curcard];
- deck[curcard]:=tmp
- end
- end; {shuffle}
-
- procedure deal; { deal the first six cards to the human }
- var { the next six to the computer }
- i: 1..dealsize;
- begin
- common.rank:=0;
- for i:=1 to dealsize do
- begin
- human[i]:=deck[i];
- comp[i]:=deck[i+dealsize];
- end
- end; {deal}
-
- procedure showcard(toshow: card); { prints card in semi-readable format }
- begin
- case toshow.rank of
- 1: write('A');
- 2,3,4,5,6,7,8,9: write(toshow.rank:1);
- 10: write('T');
- 11: write('J');
- 12: write('Q');
- 13: write('K')
- end; {case}
- case toshow.suit of
- hearts: write('H');
- clubs: write('C');
- diamonds: write('D');
- spades: write('S')
- end; {suit}
- write(' ')
- end; {showcard}
-
-
- function getelement:integer;
- label retry;
- var irank, { rank input by user }
- isuit: char; { suit input by user }
- rank: ranktype; { rank from user }
- suit: suitype; { suit from user }
- which: integer; { which number to return }
- index: 1..dealsize;
- many: -5..4; { how many cards correspond }
-
- procedure getcard(VAR rankchar:char; VAR suitchar:char);
- var ch: char;
- s: str80;
- i: integer;
- begin
- repeat
- write('__',chr(8),chr(8));
- getln(s);
- rankchar:=' '; suitchar:=' ';
- for i:=1 to length(s) do
- begin
- ch:=s[i];
- if (ch in ['A','2'..'9','T','J','Q','K']) then rankchar:=ch;
- if (ch in ['S','H','D','C']) then suitchar:=ch
- end;
- if (rankchar=' ') or (suitchar=' ') then
- begin
- gotoxy(1,18);
- writeln(s,'?');
- writeln('Suits = S,H,D,C (Spades,Hearts,Diamonds,Clubs)');
- writeln('Ranks = A,2,3,4,5,6,7,8,9,T,J,Q,K (Ace is A, 10 is T!)');
- writeln('Example: 8D (eight of Diamonds) or TH (ten of Hearts)');
- writeln;
- write('Try again from the start. Which card? ');
- cluttered:=true
- end
- until (rankchar<>' ') and (suitchar<>' ');
- gotoxy(1,6);
- end; {getcard}
-
- begin
- retry:
- getcard(irank,isuit);
- case upcase(irank) of
- 'A': rank:=1;
- '2','3','4','5','6','7','8','9': rank:=ord(irank)-ord('0');
- 'T': rank:=10;
- 'J': rank:=11;
- 'Q': rank:=12;
- 'K': rank:=13
- end; {case}
- case upcase(isuit) of
- 'S': suit := spades;
- 'H': suit := hearts;
- 'D': suit := diamonds;
- 'C': suit := clubs
- end; {case}
- many:=0;
- which:=0;
- for index:=1 to dealsize do
- begin
- if human[index].rank = rank then
- begin
- many:=many+1;
- if many>0 then which:=index;
- if isuit<>' ' then
- if human[index].suit = suit then
- many:=-5
- end
- end;
- if many=0 then
- begin
- gotoxy(1,18);
- writeln('What?! No such card exists.');
- write('Which card? ');
- cluttered:=true;
- goto retry
- end;
- if many>1 then
- begin
- gotoxy(1,18);
- writeln('There is more than one ',irank);
- write('Please be more specific: ');
- cluttered:=true;
- goto retry
- end;
- if (many=1) or (many<0) then getelement:=which;
- end; {getelement}
-
- { End of included file }