|
|
1.1 root 1: # DEAL(6)
2: #
3: # Shuffle and deal bridge hands
4: #
5: # Ralph E. Griswold
6: #
7: # Last modified 7/10/83
8: #
9:
10: global deckimage
11:
12: procedure main(x)
13: local deck, handsize, Table, hands, bar, i, s
14: deck := deckimage := &lcase || &ucase
15: bar := repl("-",33)
16: handsize := *deck / 4
17: hands := 1
18: i := 0
19: while i < *x do {
20: s := x[i +:= 1] | break
21: case s of {
22: "-h": hands := integer(x[i +:= 1]) |
23: stop("usage: deal [-h n] [-s n]")
24: "-s": &random := integer(x[i +:= 1]) |
25: stop("usage: deal [-h n] [-s n]")
26: default: stop("usage: deal [-h n] [-s n]")
27: }
28: }
29: write(bar,"\n")
30: every 1 to hands do {
31: deck := shuffle(deck)
32: Table := [
33: show(deck[1+:handsize]),
34: show(deck[handsize + 1+:handsize]),
35: show(deck[2 * handsize + 1+:handsize]),
36: show(deck[3 * handsize + 1+:handsize])
37: ]
38: every write(repl(" ",10),!Table[1])
39: write()
40: every i := 1 to 4 do
41: write(left(Table[4][i],20),Table[2][i])
42: write()
43: every write(repl(" ",10),!Table[3])
44: write("\n",bar,"\n")
45: }
46: end
47:
48: # shuffle deck
49: #
50: procedure shuffle(deck)
51: local m
52: every m := *deck to 2 by -1 do
53: deck[?m] :=: deck[m]
54: return deck
55: end
56:
57: # display the hands
58: #
59: procedure show(hand)
60: static clubs, diamonds, hearts, spades, denom, blanker, suitsize
61: initial {
62: suitsize := *deckimage / 4
63: blanker := repl(" ",suitsize)
64: denom := &lcase[1+:suitsize]
65: clubs := denom || repl(blanker,3)
66: diamonds := blanker || denom || repl(blanker,2)
67: hearts := repl(blanker,2) || denom || blanker
68: spades := repl(blanker,3) || denom
69: }
70: # if a hand consists of all 13 cards of one
71: # suit, that suit will be misformatted slightly
72: return [
73: "S:" || arrange(hand,spades),
74: "H:" || arrange(hand,hearts),
75: "D:" || arrange(hand,diamonds),
76: "C:" || arrange(hand,clubs)
77: ]
78: write("\n")
79: end
80:
81: # arrange hands for presentation
82: #
83: procedure arrange(hand,suit)
84: static denom, rank, suitsize
85: initial {
86: suitsize := *deckimage / 4
87: denom := &lcase[1+:suitsize]
88: rank := "AKQJT98765432"
89: }
90: return trim(map(cset(map(hand,deckimage,suit)),denom,rank))
91: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.