Playing cards: Difference between revisions

m
Line 149:
out
);
 
PROC shuffle = (REF []CARD deck)VOID:
FOR card TO UPB deck DO
CARD this card = deck[card];
Line 159:
 
# class members #
MODE CLASSCARD = STRUCT(PROC(REF CARD, STRING, STRING)VOID init, PROC(REF CARD)STRING repr,
FLEX[1:0]STRING suits, pips);
 
CLASSCARD card class methodcard = (
# PROC init = # (REF CARD self, STRING pip, suit)VOID:(
pip OF self:=pip;
Line 169:
# PROC repr = # (REF CARD self)STRING:
pip OF self+" "+suit OF self,
# suits = # []STRING(("Clubs","Hearts","Spades","Diamonds")),
# pips = # []STRING(("2","3","4","5","6","7","8","9","10","Jack","Queen","King","Ace"))
);
 
MODE CARD = STRUCT(STRING pip, suit); # instance members #
 
# class members #
MODE CLASSDECK = STRUCT( PROC(REF DECK)VOID init, shuffle, PROC(REF DECK)STRING repr, PROC(REF DECK)CARD deal);
 
CLASSDECK deck class methoddeck = (
 
# PROC deck init = # (REF DECK self)VOID:(
HEAP[ UPB suits OF card class methodcard * UPB pips OF card class methodcard ]CARD new;
FOR suit TO UPB suits OF card class methodcard DO
FOR pip TO UPB pips OF card class methodcard DO
new[(suit-1)*UPB pips OF card class methodcard + pip] :=
((pips OF card class methodcard)[pip], (suits OF card class methodcard)[suit])
OD
OD;
deck OF self := new
),
 
# PROC shuffle = # (REF DECK self)VOID:
shuffle(deck OF self),
 
# PROC repr = # (REF DECK self)STRING:
"[" + sprintf($"("g","g"),"$, deck OF self) +"]",
 
# PROC deal = # (REF DECK self)CARD: (
(shuffle OF deck class methoddeck)(self);
(deck OF self)[UPB deck OF self]
)
Line 206:
 
DECK deck;
(init OF deck class methoddeck)(deck);
(shuffle OF deck class methoddeck)(deck);
print (((repr OF deck class methoddeck)(deck), new line))
</pre>
Example output:<br>