2026-06-23 19:34:36 -05:00
|
|
|
#+TITLE: card-games -- Play card games in Emacs
|
|
|
|
|
#+AUTHOR: Corwin Brust
|
|
|
|
|
|
|
|
|
|
Card games for Emacs.
|
|
|
|
|
|
|
|
|
|
Renders SVG by default when ~display-graphic-p~ is t and rsvg is
|
|
|
|
|
available. The default (UNICODE) symbols maybe customized by
|
|
|
|
|
configuring ~card-game-symbols~.
|
|
|
|
|
|
|
|
|
|
* Games
|
|
|
|
|
|
2026-06-23 21:56:31 -05:00
|
|
|
To open the game menu type ~M-x card-game~, or start a game directly
|
Add 16 games and known-games research; bump to 1.0.60
Console UNICODE games on the cg-core EIEIO engine, all ERT-tested (88/88):
- Tableau solitaire (cg-solitaire.el): Klondike, FreeCell, Spider, Yukon,
Canfield, Forty Thieves, Scorpion.
- Pile solitaire (cg-patience.el): Golf, TriPeaks, Pyramid.
- Trick-taking (cg-trick.el): Hearts, Spades, Whist, Oh Hell.
- Shedding/climbing: Crazy Eights (cg-eights.el), President (cg-president.el).
Wire all into the card-game chooser, Makefile, and README; add
known-games.org research collation; bump every file to 1.0.60.
2026-06-25 01:58:24 -05:00
|
|
|
with its command.
|
|
|
|
|
|
|
|
|
|
** Trick-taking
|
|
|
|
|
- ~cg-bid~ -- 500 (Bid). Win the auction, name the trump suit, then take
|
|
|
|
|
tricks with your partner to reach 500 points before the opposing pair.
|
|
|
|
|
Also playable live over the network (~M-x cg-bid-host~ / ~cg-bid-join~).
|
|
|
|
|
- ~cg-hearts~ -- Hearts. Avoid taking hearts and the Queen of Spades, or
|
|
|
|
|
take them all to "shoot the moon"; lowest score loses.
|
|
|
|
|
- ~cg-spades~ -- Spades. Partnership bidding to 500; spades are always
|
|
|
|
|
trump. Make your side's combined bid, mind the bags, dare a nil.
|
|
|
|
|
- ~cg-whist~ -- Whist. Trump is the turned card, there is no bidding;
|
|
|
|
|
score one point for each trick past the book of six.
|
|
|
|
|
- ~cg-ohhell~ -- Oh Hell. The hand shrinks each round; bid the exact
|
|
|
|
|
number of tricks you will take, no more and no fewer.
|
|
|
|
|
|
|
|
|
|
** Solitaire
|
2026-06-23 21:56:31 -05:00
|
|
|
- ~cg-montana~ -- Montana (also called Gaps). Each row is anchored by a
|
|
|
|
|
Two and built upward in one suit, 2 through King; slide cards into the
|
|
|
|
|
gaps until all four rows are sorted.
|
|
|
|
|
- ~cg-gaps~ -- an alias for ~cg-montana~.
|
|
|
|
|
- ~cg-hells-half-acre~ -- the build-down variant: each row is anchored by
|
|
|
|
|
a King and built downward, King through 2.
|
Add 16 games and known-games research; bump to 1.0.60
Console UNICODE games on the cg-core EIEIO engine, all ERT-tested (88/88):
- Tableau solitaire (cg-solitaire.el): Klondike, FreeCell, Spider, Yukon,
Canfield, Forty Thieves, Scorpion.
- Pile solitaire (cg-patience.el): Golf, TriPeaks, Pyramid.
- Trick-taking (cg-trick.el): Hearts, Spades, Whist, Oh Hell.
- Shedding/climbing: Crazy Eights (cg-eights.el), President (cg-president.el).
Wire all into the card-game chooser, Makefile, and README; add
known-games.org research collation; bump every file to 1.0.60.
2026-06-25 01:58:24 -05:00
|
|
|
- ~cg-klondike~ -- Klondike, the classic "Solitaire": build the four
|
|
|
|
|
foundations up by suit from the Ace.
|
|
|
|
|
- ~cg-freecell~ -- FreeCell: every card in view, four free cells, a game
|
|
|
|
|
of nearly pure skill.
|
|
|
|
|
- ~cg-spider~ -- Spider (two decks): build down regardless of suit, but
|
|
|
|
|
only same-suit runs move; clear eight King-to-Ace runs.
|
|
|
|
|
- ~cg-yukon~ -- Yukon: Klondike's layout dealt mostly face up, with any
|
|
|
|
|
buried group movable and no stock.
|
|
|
|
|
- ~cg-canfield~ -- Canfield: a 13-card reserve and a foundation base rank
|
|
|
|
|
set by the deal; foundations wrap King to Ace.
|
|
|
|
|
- ~cg-forty-thieves~ -- Forty Thieves: two decks, ten columns, eight
|
|
|
|
|
foundations, build down by suit, and no second pass through the stock.
|
|
|
|
|
- ~cg-scorpion~ -- Scorpion: build down by suit and free any buried group
|
|
|
|
|
to assemble four King-to-Ace runs.
|
|
|
|
|
- ~cg-golf~ -- Golf: clear the layout by playing exposed cards one rank
|
|
|
|
|
above or below the waste top.
|
|
|
|
|
- ~cg-tripeaks~ -- TriPeaks: the same, on three overlapping peaks, with
|
|
|
|
|
Ace-King wrapping for long chains.
|
|
|
|
|
- ~cg-pyramid~ -- Pyramid: remove pairs of exposed cards whose ranks sum
|
|
|
|
|
to thirteen; Kings go alone.
|
|
|
|
|
|
|
|
|
|
** Shedding and climbing
|
|
|
|
|
- ~cg-eights~ -- Crazy Eights. Match the suit or rank of the discard;
|
|
|
|
|
eights are wild and let you name the next suit.
|
|
|
|
|
- ~cg-president~ -- President (Scum). Climb: play one to four of a rank,
|
|
|
|
|
beat it or pass; first out rules, last out scrubs, and the roles trade
|
|
|
|
|
cards on the next deal.
|
2026-06-23 19:34:36 -05:00
|
|
|
|
Add the rummy family: meld engine + Gin, Rummy, Rummy 500, Hand & Foot
Introduce a shared meld engine and four games built on it, all on
cg-core/EIEIO with console UNICODE rendering.
* cg-rummy.el: the meld engine and Gin Rummy. Set/run validation,
candidate-meld enumeration, a bitmask-DP minimum-deadwood partition,
and a layoff finder, plus the abstract cg-rummy-game base and shared
render helpers. Gin is two-handed with draw/take/discard/knock, gin
and undercut bonuses, opponent layoffs, and play to 100.
* cg-rum500.el: the abstract cg-tablemeld-game (one mode and command
set, dispatching on the subclass) driving Basic Rummy (meld out;
score the cards left in other hands; to 100) and Rummy 500 (score the
cards you lay down, lose those left in hand; ace high and worth 15;
to 500).
* cg-handfoot.el: Hand & Foot, a partnership Canasta cousin. Hand and
foot packets, Twos and Jokers wild, rank books with clean/dirty piles,
go-out bonus, and partnership scoring to 5000. Deliberately
2026-06-25 05:53:02 -05:00
|
|
|
** Rummy
|
|
|
|
|
- ~cg-gin~ -- Gin Rummy. A two-handed duel: draw or take the discard,
|
|
|
|
|
build sets and runs, and knock once your deadwood is ten or less, or go
|
|
|
|
|
gin with none; your opponent then lays off and may undercut you. First
|
|
|
|
|
to 100 wins.
|
|
|
|
|
- ~cg-rummy-basic~ -- Rummy. Meld sets and runs onto the table and lay
|
|
|
|
|
cards off onto them; empty your hand to go out and score the cards left
|
|
|
|
|
in the other hands.
|
|
|
|
|
- ~cg-rum500~ -- Rummy 500. As above, but you score the cards you lay
|
2026-06-26 16:34:02 -05:00
|
|
|
down and lose the cards left in your hand; first past 500 wins. Take a
|
|
|
|
|
buried discard card with ~T~: you take it and every card above it, and
|
|
|
|
|
meld the chosen card at once.
|
Add the rummy family: meld engine + Gin, Rummy, Rummy 500, Hand & Foot
Introduce a shared meld engine and four games built on it, all on
cg-core/EIEIO with console UNICODE rendering.
* cg-rummy.el: the meld engine and Gin Rummy. Set/run validation,
candidate-meld enumeration, a bitmask-DP minimum-deadwood partition,
and a layoff finder, plus the abstract cg-rummy-game base and shared
render helpers. Gin is two-handed with draw/take/discard/knock, gin
and undercut bonuses, opponent layoffs, and play to 100.
* cg-rum500.el: the abstract cg-tablemeld-game (one mode and command
set, dispatching on the subclass) driving Basic Rummy (meld out;
score the cards left in other hands; to 100) and Rummy 500 (score the
cards you lay down, lose those left in hand; ace high and worth 15;
to 500).
* cg-handfoot.el: Hand & Foot, a partnership Canasta cousin. Hand and
foot packets, Twos and Jokers wild, rank books with clean/dirty piles,
go-out bonus, and partnership scoring to 5000. Deliberately
2026-06-25 05:53:02 -05:00
|
|
|
- ~cg-handfoot~ -- Hand & Foot. A partnership Canasta cousin: play a hand
|
|
|
|
|
and then a foot, build books of a rank with Twos and Jokers wild, and go
|
2026-06-26 16:34:02 -05:00
|
|
|
out once your side has completed two of them. Each round opens with a
|
|
|
|
|
rising go-down minimum (50, 90, 120, 150); red threes are bonus cards;
|
|
|
|
|
and you can pick up the discard pile (~p~) by melding its top card with
|
|
|
|
|
two matching naturals.
|
Add the rummy family: meld engine + Gin, Rummy, Rummy 500, Hand & Foot
Introduce a shared meld engine and four games built on it, all on
cg-core/EIEIO with console UNICODE rendering.
* cg-rummy.el: the meld engine and Gin Rummy. Set/run validation,
candidate-meld enumeration, a bitmask-DP minimum-deadwood partition,
and a layoff finder, plus the abstract cg-rummy-game base and shared
render helpers. Gin is two-handed with draw/take/discard/knock, gin
and undercut bonuses, opponent layoffs, and play to 100.
* cg-rum500.el: the abstract cg-tablemeld-game (one mode and command
set, dispatching on the subclass) driving Basic Rummy (meld out;
score the cards left in other hands; to 100) and Rummy 500 (score the
cards you lay down, lose those left in hand; ace high and worth 15;
to 500).
* cg-handfoot.el: Hand & Foot, a partnership Canasta cousin. Hand and
foot packets, Twos and Jokers wild, rank books with clean/dirty piles,
go-out bonus, and partnership scoring to 5000. Deliberately
2026-06-25 05:53:02 -05:00
|
|
|
|
Add nine games: Go Fish, Old Maid, Cribbage, Scopa, Casino,
Euchre, Pitch, Briscola, and Spite & Malice
Five new files, each reusing or extending an existing engine.
* cg-match.el: Go Fish and Old Maid, matching games on a shared
helper set (completes the original wishlist).
* cg-cribbage.el: two-handed Cribbage to 121 -- the crib, the cut,
pegging, and a full show scorer (fifteens, pairs, runs, flush, nobs).
* cg-scopa.el: a capture-by-sum engine driving Scopa (40-card, sette
bello, primiera, scopas) and Casino (pairs and sums, big/little
casino, aces, sweeps). Casino omits builds.
* cg-trick-ext.el: Euchre (24-card with both bowers), Auction Pitch
(bid, pitch sets trump, High/Low/Jack/Game), and Briscola (fixed
trump, no follow), as subclasses of the cg-trick engine.
* cg-spite.el: Spite & Malice, a competitive patience to empty the
goal pile onto shared Ace-to-Queen centre piles; Kings are wild.
Wire all nine commands into the card-game chooser, extend the Makefile
EL list, and add README sections. Add ten ERT tests covering each
game's engine and a full AI-driven game; the suite is now 107/107 and
every file byte-compiles cleanly.
New files at Version 1.0.60 to match the tree; post-1.0.60 work
toward 1.0.90.
2026-06-25 06:31:44 -05:00
|
|
|
** Matching
|
|
|
|
|
- ~cg-go-fish~ -- Go Fish. Ask another player for a rank you hold;
|
|
|
|
|
collect all four to lay down a book, and make the most books.
|
|
|
|
|
- ~cg-old-maid~ -- Old Maid. One Queen is set aside; discard pairs and
|
|
|
|
|
draw blind from your neighbour, and do not be left with the odd Queen.
|
|
|
|
|
|
|
|
|
|
** Pegging
|
|
|
|
|
- ~cg-cribbage~ -- Cribbage. Lay two cards to the crib, cut a starter,
|
|
|
|
|
peg toward 31, then count fifteens, pairs, runs, flushes, and his nobs.
|
|
|
|
|
Two-handed to 121.
|
|
|
|
|
|
|
|
|
|
** Capturing
|
|
|
|
|
- ~cg-scopa~ -- Scopa. A 40-card deck; capture table cards by value and
|
|
|
|
|
sweep the board for a scopa. Score cards, coins, the sette bello, and
|
|
|
|
|
primiera to 11.
|
|
|
|
|
- ~cg-casino~ -- Casino. The full deck; capture by pairs and sums and
|
|
|
|
|
score cards, spades, the casinos, and aces to 21.
|
|
|
|
|
|
|
|
|
|
** More trick-taking
|
|
|
|
|
- ~cg-euchre~ -- Euchre. A 24-card deck with the two bowers; order up or
|
|
|
|
|
call trump and take three of five tricks. Partnership to 10.
|
|
|
|
|
- ~cg-pitch~ -- Auction Pitch. Bid for the pitch; your first lead sets
|
|
|
|
|
trump. Score High, Low, Jack, and Game; first to 7.
|
|
|
|
|
- ~cg-briscola~ -- Briscola. A fixed trump turned from the deal and no
|
|
|
|
|
obligation to follow suit; capture the Aces and Threes. Partnership to
|
|
|
|
|
61 of the 120 points.
|
|
|
|
|
|
|
|
|
|
** Climbing patience
|
|
|
|
|
- ~cg-spite~ -- Spite & Malice. Race the computer to empty your goal
|
|
|
|
|
pile onto shared centre piles that build Ace to Queen; Kings are wild.
|
|
|
|
|
|
Add Contract Bridge: auction, dummy play, and rubber scoring
New cg-bridge.el: a four-handed Bridge game (you are South, partnering
North against East and West) on the shared cg-game base.
* Auction: level/strain bids plus pass, double, and redouble, with the
three-pass end rule, pass-outs, doubling state, and declarer
determination (first of the side to name the strain).
* Play: follow-suit with the dummy exposed after the opening lead; the
declarer plays both hands. Trick resolution honours trump and no-trump.
* Scoring: classic rubber -- trick points below the line toward game;
overtricks, slam, insult, and undertrick penalties above; vulnerability
and the rubber bonus. Verified against known results.
* A small natural bidding AI (openings, NT, raises with a fit, simple
overcalls) that always terminates the auction, plus a greedy
card-play AI.
Wire cg-bridge into the chooser, the Makefile, and the README, and add
two ERT tests (scoring math and a dozen full AI-driven deals). The suite
is now 109/109 and every file byte-compiles cleanly.
2026-06-25 06:53:51 -05:00
|
|
|
** Bridge
|
|
|
|
|
- ~cg-bridge~ -- Contract Bridge. A full auction (bids, pass, double,
|
|
|
|
|
redouble), play with the dummy exposed, and classic rubber scoring with
|
|
|
|
|
vulnerability. You are South; when you declare you play the dummy too.
|
|
|
|
|
The bidding AI is a small natural system, sensible but no expert.
|
|
|
|
|
|
2026-06-23 19:34:36 -05:00
|
|
|
* TODO
|
2026-06-23 21:56:31 -05:00
|
|
|
- [X] make the suit symbols customizable (~cg-symbols~) and obey them
|
|
|
|
|
- [ ] a Texinfo manual
|
Cut 1.0.90 pretest: 500 mouse UX, version bump, NEWS, docs
Full-SVG 500 made mouse-operable for newcomers: kitty Discard button and
five-card cap, on-table phase banner, ? Help/Rules overlay with the bid
legend, legal-play dimming, card-size slider, and a layout pass that
moves the Help and size controls into the log panel so nothing overlaps.
Bump all files to 1.0.90, add NEWS, a README testing quick-start, and
make the shared engine files checkdoc-clean.
2026-06-26 18:48:31 -05:00
|
|
|
- [ ] finish ~checkdoc~ docstrings across the per-game files
|
|
|
|
|
(the shared engine files are clean; ~make compile~ is warning-free)
|
2026-06-23 21:56:31 -05:00
|
|
|
- [ ] renderer "skins": let games subclass the display components (text,
|
|
|
|
|
SVG, full-window SVG)
|
Cut 1.0.90 pretest: 500 mouse UX, version bump, NEWS, docs
Full-SVG 500 made mouse-operable for newcomers: kitty Discard button and
five-card cap, on-table phase banner, ? Help/Rules overlay with the bid
legend, legal-play dimming, card-size slider, and a layout pass that
moves the Help and size controls into the log panel so nothing overlaps.
Bump all files to 1.0.90, add NEWS, a README testing quick-start, and
make the shared engine files checkdoc-clean.
2026-06-26 18:48:31 -05:00
|
|
|
- [X] a manual card-size control for the full-window SVG UI
|
2026-06-23 21:56:31 -05:00
|
|
|
- [ ] more games
|
2026-06-23 19:34:36 -05:00
|
|
|
|
|
|
|
|
* Install
|
|
|
|
|
** From the package tarball
|
|
|
|
|
#+begin_src
|
Cut 1.0.90 pretest: 500 mouse UX, version bump, NEWS, docs
Full-SVG 500 made mouse-operable for newcomers: kitty Discard button and
five-card cap, on-table phase banner, ? Help/Rules overlay with the bid
legend, legal-play dimming, card-size slider, and a layout pass that
moves the Help and size controls into the log panel so nothing overlaps.
Bump all files to 1.0.90, add NEWS, a README testing quick-start, and
make the shared engine files checkdoc-clean.
2026-06-26 18:48:31 -05:00
|
|
|
make package # builds card-games-1.0.90.tar
|
2026-06-23 19:34:36 -05:00
|
|
|
#+end_src
|
Cut 1.0.90 pretest: 500 mouse UX, version bump, NEWS, docs
Full-SVG 500 made mouse-operable for newcomers: kitty Discard button and
five-card cap, on-table phase banner, ? Help/Rules overlay with the bid
legend, legal-play dimming, card-size slider, and a layout pass that
moves the Help and size controls into the log panel so nothing overlaps.
Bump all files to 1.0.90, add NEWS, a README testing quick-start, and
make the shared engine files checkdoc-clean.
2026-06-26 18:48:31 -05:00
|
|
|
Then in Emacs: ~M-x package-install-file RET card-games-1.0.90.tar~.
|
2026-06-23 19:34:36 -05:00
|
|
|
|
|
|
|
|
** From a local ELPA archive
|
|
|
|
|
#+begin_src
|
|
|
|
|
make elpa # builds dist/ (archive-contents + tar)
|
|
|
|
|
#+end_src
|
|
|
|
|
#+begin_src emacs-lisp
|
|
|
|
|
(add-to-list 'package-archives '("cg" . "/path/to/dist/"))
|
|
|
|
|
(package-refresh-contents)
|
|
|
|
|
(package-install 'card-games)
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
** Manually
|
|
|
|
|
Put the ~cg-*.el~ and ~card-games.el~ files on your ~load-path~ and
|
|
|
|
|
~(require 'card-games)~.
|
|
|
|
|
|
|
|
|
|
* Playing
|
|
|
|
|
Both games work with the keyboard everywhere and with the mouse on a
|
|
|
|
|
graphical display.
|
|
|
|
|
|
|
|
|
|
- 500: ~b~ bid, ~p~ pass, arrows + ~RET~ to play (or click a card),
|
|
|
|
|
~n~ next hand / new game, ~?~ help.
|
2026-06-23 21:56:31 -05:00
|
|
|
- Gaps: arrows to move (or ~hjkl~ when ~cg-keys~ is ~classic~), ~RET~ to
|
|
|
|
|
fill a gap (or click it), ~r~ redeal, ~u~ undo, ~n~ new, ~?~ help.
|
Add 16 games and known-games research; bump to 1.0.60
Console UNICODE games on the cg-core EIEIO engine, all ERT-tested (88/88):
- Tableau solitaire (cg-solitaire.el): Klondike, FreeCell, Spider, Yukon,
Canfield, Forty Thieves, Scorpion.
- Pile solitaire (cg-patience.el): Golf, TriPeaks, Pyramid.
- Trick-taking (cg-trick.el): Hearts, Spades, Whist, Oh Hell.
- Shedding/climbing: Crazy Eights (cg-eights.el), President (cg-president.el).
Wire all into the card-game chooser, Makefile, and README; add
known-games.org research collation; bump every file to 1.0.60.
2026-06-25 01:58:24 -05:00
|
|
|
- Klondike / FreeCell / Spider / Yukon: arrows move between piles, ~RET~
|
|
|
|
|
picks up a movable run and drops it, ~f~ sends a card to a foundation,
|
|
|
|
|
~a~ auto-plays everything it can, ~u~ undo, ~n~ new, ~?~ help. On the
|
|
|
|
|
stock pile, ~RET~ deals or recycles.
|
|
|
|
|
- Hearts / Spades: arrows choose a card, ~RET~ plays it (in Hearts, ~RET~
|
|
|
|
|
marks a card to pass and ~p~ sends the three), ~n~ new match, ~?~ help.
|
|
|
|
|
- Crazy Eights: arrows choose, ~RET~ plays, ~d~ draws, ~x~ passes, ~n~
|
|
|
|
|
new deal, ~?~ help.
|
2026-06-23 21:56:31 -05:00
|
|
|
|
Cut 1.0.90 pretest: 500 mouse UX, version bump, NEWS, docs
Full-SVG 500 made mouse-operable for newcomers: kitty Discard button and
five-card cap, on-table phase banner, ? Help/Rules overlay with the bid
legend, legal-play dimming, card-size slider, and a layout pass that
moves the Help and size controls into the log panel so nothing overlaps.
Bump all files to 1.0.90, add NEWS, a README testing quick-start, and
make the shared engine files checkdoc-clean.
2026-06-26 18:48:31 -05:00
|
|
|
On a graphical display, ~v~ toggles the full-window SVG table. A
|
|
|
|
|
*Card size* slider (and the ~+~ / ~-~ / ~0~ keys) resizes the cards, and
|
|
|
|
|
in 500 the ~? Help / Rules~ button explains play. Every game accepts the
|
|
|
|
|
mouse: click cards, board slots, buttons, and the slider.
|
|
|
|
|
|
|
|
|
|
* Testing
|
|
|
|
|
This is a 1.0.90 pre-test snapshot. To try it:
|
|
|
|
|
1. ~make compile && make test~ -- should be warning-free and all green.
|
|
|
|
|
2. ~M-x card-game~ opens the menu, or jump straight in, e.g.
|
|
|
|
|
~M-x cg-klondike~, ~M-x cg-bid~ (500), ~M-x cg-gin~, ~M-x cg-handfoot~.
|
|
|
|
|
3. On a graphical display, press ~v~ in 500 for the full-window SVG
|
|
|
|
|
table and play entirely with the mouse: click a bid, click five kitty
|
|
|
|
|
cards and the *Discard* button, click cards to play, move the *Card
|
|
|
|
|
size* slider, and open ~? Help / Rules~.
|
|
|
|
|
|
|
|
|
|
Feedback most wanted: anything a mouse-only player who is new to Emacs
|
|
|
|
|
finds confusing or unreachable, rules bugs, and rendering glitches.
|
2026-06-23 19:34:36 -05:00
|
|
|
|
|
|
|
|
* Customization
|
|
|
|
|
~M-x customize-group RET cg-svg~ and ~RET card-games~:
|
|
|
|
|
- ~cg-svg-theme-colors~ -- derive the highlight ring and card backs
|
|
|
|
|
from your theme (on by default).
|
|
|
|
|
- ~cg-bid-felt-color~ -- the 500 table felt.
|
|
|
|
|
- ~cg-svg-card-width~, ~cg-svg-card-height~, ~cg-svg-card-shadow~,
|
|
|
|
|
~cg-svg-font-family~ -- card appearance.
|
|
|
|
|
- ~cg-svg-card-back~ -- card-back pattern: dots, rings, or solid.
|
2026-06-23 21:56:31 -05:00
|
|
|
- ~cg-symbols~ -- the Unicode suit glyphs (and the joker) drawn on cards.
|
|
|
|
|
- ~cg-svg-four-color~ -- draw a four-colour deck (clubs green, diamonds
|
|
|
|
|
blue-purple).
|
|
|
|
|
- ~cg-keys~ -- ~emacs~ (default) or ~classic~ (adds vi-style ~hjkl~ and
|
|
|
|
|
~SPC~).
|
2026-06-23 19:34:36 -05:00
|
|
|
- ~cg-bid-animate~, ~cg-bid-ai-delay~, ~cg-bid-trick-pause~ -- pace the
|
|
|
|
|
500 AI so play is watchable and completed tricks linger.
|
|
|
|
|
- ~M-x card-games-set-theme~ -- apply a preset (classic, dark, contrast).
|
|
|
|
|
|
|
|
|
|
* Development
|
|
|
|
|
#+begin_src
|
|
|
|
|
make compile # byte-compile (should be warning-free)
|
|
|
|
|
make test # run the ERT suite
|
|
|
|
|
make checkdoc # documentation lint
|
|
|
|
|
make release # clean + test + package + source tarball
|
|
|
|
|
#+end_src
|
|
|
|
|
|
|
|
|
|
* License
|
|
|
|
|
GPL-3.0-or-later. See the file headers; add a COPYING file with the
|
|
|
|
|
full GPLv3 text for distribution.
|