diff options
Diffstat (limited to 'ipl/progs/deal.icn')
-rw-r--r-- | ipl/progs/deal.icn | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/ipl/progs/deal.icn b/ipl/progs/deal.icn new file mode 100644 index 0000000..dc9d9a2 --- /dev/null +++ b/ipl/progs/deal.icn @@ -0,0 +1,121 @@ +############################################################################ +# +# File: deal.icn +# +# Subject: Program to deal bridge hands +# +# Author: Ralph E. Griswold +# +# Date: August 14, 1996 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# This program shuffles, deals, and displays hands in the game +# of bridge. An example of the output of deal is +# --------------------------------- +# +# S: KQ987 +# H: 52 +# D: T94 +# C: T82 +# +# S: 3 S: JT4 +# H: T7 H: J9863 +# D: AKQ762 D: J85 +# C: QJ94 C: K7 +# +# S: A652 +# H: AKQ4 +# D: 3 +# C: A653 +# +# --------------------------------- +# +# Options: The following options are available: +# +# -h n Produce n hands. The default is 1. +# +# -s n Set the seed for random generation to n. Different +# seeds give different hands. The default seed is 0. +# +############################################################################ +# +# Links: options, random +# +############################################################################ + +link options +link random + +global deck, deckimage, handsize, suitsize, denom, rank, blanker + +procedure main(args) + local hands, opts + + deck := deckimage := string(&letters) # initialize global variables + handsize := suitsize := *deck / 4 + rank := "AKQJT98765432" + blanker := repl(" ",suitsize) + denom := &lcase[1+:suitsize] + + opts := options(args,"h+s+") + hands := \opts["h"] | 1 + &random := \opts["s"] + + every 1 to hands do + disphand() + +end + +# Display the hands +# +procedure disphand() + local layout, i + static bar, offset + + initial { + bar := "\n" || repl("-",33) + offset := repl(" ",10) + } + + deck := shuffle(deck) + layout := [] + every push(layout,show(deck[(0 to 3) * handsize + 1 +: handsize])) + + write() + every write(offset,!layout[1]) + write() + every i := 1 to 4 do + write(left(layout[4][i],20),layout[2][i]) + write() + every write(offset,!layout[3]) + write(bar) +end + +# Put the hands in a form to display +# +procedure show(hand) + static clubmap, diamondmap, heartmap, spademap + initial { + clubmap := denom || repl(blanker,3) + diamondmap := blanker || denom || repl(blanker,2) + heartmap := repl(blanker,2) || denom || blanker + spademap := repl(blanker,3) || denom + } + return [ + "S: " || arrange(hand,spademap), + "H: " || arrange(hand,heartmap), + "D: " || arrange(hand,diamondmap), + "C: " || arrange(hand,clubmap) + ] +end + +# Arrange hands for presentation +# +procedure arrange(hand,suit) + return map(map(hand,deckimage,suit) -- ' ',denom,rank) +end |