card-game.el/doc/card-games.texi

647 lines
21 KiB
Text
Raw Normal View History

\input texinfo @c -*- texinfo -*-
@c %**start of header
@setfilename card-games.info
@settitle Card Games for Emacs
@documentencoding UTF-8
@documentlanguage en
@syncodeindex vr cp
@syncodeindex fn cp
@c %**end of header
@set VERSION 1.0.90
@set YEAR 2026
@copying
This manual is for Card Games for Emacs (version @value{VERSION}), an
Emacs package that plays card games as UNICODE text in a terminal and as
SVG cards on a graphical display.
Copyright @copyright{} @value{YEAR} Corwin Brust.
@quotation
This manual is licensed under the Creative Commons Attribution 4.0
International License. To view a copy of this license, visit
@url{https://creativecommons.org/licenses/by/4.0/}.
The Card Games for Emacs @emph{program} is free software, licensed under
the GNU General Public License, version 3 or later.
@end quotation
@end copying
@dircategory Emacs
@direntry
* Card Games: (card-games). Play card games in Emacs (text and SVG).
@end direntry
@titlepage
@title Card Games for Emacs
@subtitle A collection of solitaire, two-player, and partnership games
@subtitle for GNU Emacs, version @value{VERSION}
@author Corwin Brust
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@contents
@ifnottex
@node Top
@top Card Games for Emacs
@insertcopying
@end ifnottex
@menu
* Introduction:: What this package is.
* Installation:: Getting it, and starting to play.
* The Game Menu:: The chooser, and its controls.
* Playing:: Controls shared by every game.
* Customization:: Colours, cards, keys, and opponents.
* Solitaire Games:: One-player patiences.
* Trick-Taking Games:: Hearts, Spades, Bridge, and friends.
* Rummy Games:: Melds, knocks, and books.
* Matching Games:: Go Fish and Old Maid.
* Capturing Games:: Scopa and Casino.
* Climbing Games:: President and Spite & Malice.
* Russian Bank:: The two-player duel.
* Networked Play:: Live 500 over the network.
* Credits:: Sources and thanks.
* License:: Terms for this manual.
* Index:: Commands, variables, and concepts.
@end menu
@node Introduction
@chapter Introduction
@cindex introduction
@cindex about
Card Games for Emacs is a collection of more than thirty card games ---
solitaires, two-player games, and four-handed partnership games ---
played entirely inside GNU Emacs.
Every game draws itself two ways. In a terminal it uses plain UNICODE
text, so it works anywhere Emacs runs, including over @command{ssh} and
on a phone. On a graphical display it draws proper SVG cards, with a
felt table for the four-handed games. You can switch between these
treatments at any time (@pxref{Customization}).
You play with the keyboard, the mouse, or both. A highlighted cursor
marks the card or pile you are about to act on; the arrow keys move it
and @key{RET} acts. Clicking a card does the same thing.
@cindex families of games
The games are grouped into families that share an engine and a feel:
@table @asis
@item Solitaire
Klondike, FreeCell, Spider, Yukon, Canfield, Forty Thieves, Scorpion,
Golf, TriPeaks, Pyramid, Gaps (Montana), and Hell's Half-Acre, plus a
one-player Russian Bank. @xref{Solitaire Games}.
@item Trick-taking
500, Hearts, Spades, Whist, Oh Hell, Euchre, Pitch, Briscola, and
Contract Bridge. @xref{Trick-Taking Games}.
@item Rummy
Gin Rummy, Rummy, Rummy 500, and the partnership game Hand & Foot.
@xref{Rummy Games}.
@item Matching, capturing, and climbing
Go Fish and Old Maid; Scopa and Casino; President, Spite & Malice, and
Cribbage.
@item Two-player Russian Bank
The competitive duel, Crapette, against the computer. @xref{Russian
Bank}.
@end table
To start, type @kbd{M-x card-game}.
@node Installation
@chapter Installation
@cindex installation
@cindex requirements
Card Games for Emacs needs GNU Emacs 26.1 or newer. SVG display
additionally needs an Emacs built with image support (any modern
graphical Emacs has it); in a terminal the games fall back to text.
@menu
* From a package archive:: The easy way.
* From source:: Cloning the repository.
* Building:: Compiling, testing, and the manual.
@end menu
@node From a package archive
@section From a package archive
@cindex ELPA
When the package is available from a package archive, install it the
usual way with @kbd{M-x package-install @key{RET} card-games @key{RET}}.
The autoloads let you run @kbd{M-x card-game} straight away.
@node From source
@section From source
@cindex source, installing from
Clone the repository from @url{https://code.bru.st/corwin/card-game.el},
add it to your @code{load-path}, and load the umbrella file:
@example
(add-to-list 'load-path "/path/to/card-game.el")
(require 'card-games)
@end example
@noindent
Then @kbd{M-x card-game}. You can also build an installable tarball with
@kbd{make package} and install it with @kbd{M-x package-install-file}.
@node Building
@section Building
@cindex Makefile
@cindex tests
The @file{Makefile} provides the usual developer targets:
@table @code
@item make compile
Byte-compile all the sources.
@item make test
Run the ERT test suite.
@item make info
Build this manual (also @code{make html} and @code{make pdf}).
@item make package
Build the installable @file{.tar}.
@end table
@node The Game Menu
@chapter The Game Menu
@findex card-game
@findex card-games
@cindex chooser
@cindex menu
@kbd{M-x card-game} (also available as @code{card-games}) opens the
chooser: a buffer listing every game with a one-line description. Move
between games with @key{TAB} and @kbd{S-@key{TAB}}, or @kbd{n} and
@kbd{p}, and press @key{RET} --- or click a game's name --- to start it.
@kbd{q} buries the menu.
Two controls sit at the top of the list.
@table @asis
@item AI opponents
@vindex cg-ai-level
Sets how hard the computer plays: @code{easy}, @code{normal}, or
@code{hard}. Click it to cycle, or use @kbd{M-x card-games-set-ai-level}.
@xref{Opponents}.
@item Cards
@vindex card-games-treatment
Chooses how the games are drawn: @code{text}, @code{svg}, or @code{full}.
Click it to cycle, or use @kbd{M-x card-games-set-treatment}.
@xref{Display}.
@end table
@node Playing
@chapter Playing
@cindex controls, shared
@cindex keys
Each game has its own rules and a few keys of its own, but the basic
controls are the same everywhere. Press @kbd{?} in any game to see that
game's keys in the echo area.
@table @kbd
@item @key{LEFT} @key{RIGHT} @key{UP} @key{DOWN}
Move the highlighted cursor between cards and piles.
@item @key{RET}
Act on the cursor: pick up or drop a card, play it, or select it. Many
games also accept @key{SPC}.
@item mouse-1
Click a card or pile to do the same as moving the cursor there and
acting.
@item f
Where there are foundations, send the chosen card to one.
@item u
Undo the last move, in the games that support it.
@item n
Deal a new game.
@item g
Redraw the board.
@item ?
Describe the game's controls.
@item q
Leave the game and return to the menu (@pxref{The Game Menu}).
@end table
@cindex zoom
@vindex cg-card-scale
On a graphical display, @kbd{+} and @kbd{-} (and @kbd{=}) make the cards
larger and smaller, and @kbd{0} resets the size. Emacs's own
@code{text-scale-adjust} works too. Many boards show a one-line legend
of the current game's keys along the bottom.
@node Customization
@chapter Customization
@cindex customization
All the options live in the @code{card-games} customization group; type
@kbd{M-x customize-group @key{RET} card-games @key{RET}} to browse them.
The most useful are collected here.
@menu
* Display:: Text, SVG cards, or a full table.
* Cards and colours:: Backs, decks, glyphs, and themes.
* The Emacs emblem:: Which logo the full table shows.
* Keys:: Emacs or classic movement.
* Opponents:: How hard the computer plays.
@end menu
@node Display
@section Display
@vindex card-games-treatment
@findex card-games-set-treatment
@kbd{M-x card-games-set-treatment} switches every game between three
treatments: @code{text} draws UNICODE cards, @code{svg} draws SVG cards,
and @code{full} additionally uses the full-window SVG table for the games
that have one (Gaps and 500). You can also cycle it from the menu
(@pxref{The Game Menu}). A change takes effect the next time a game is
drawn; press @kbd{g} to redraw an open game.
@vindex cg-card-scale
The card size follows @code{cg-card-scale} and the zoom keys
(@pxref{Playing}).
@node Cards and colours
@section Cards and colours
@vindex cg-svg-card-back
@findex cg-svg-shuffle-card-back
@cindex card backs
The pattern on a face-down card is @code{cg-svg-card-back}. Besides
@code{dots}, @code{rings}, and @code{solid} there are the drawn patterns
@code{lattice}, @code{waves}, and @code{diamond}, and four backs stamped
with an Emacs logo: @code{emacs}, @code{emacs-classic}, @code{gnu}, and
@code{splash}. The default, @code{random}, chooses a back for the
session; @kbd{M-x cg-svg-shuffle-card-back} rolls a new one, and
reopening the menu also re-rolls.
@vindex cg-svg-four-color
@cindex four-colour deck
With @code{cg-svg-four-color} non-@code{nil}, clubs are drawn green and
diamonds blue, so all four suits are told apart by colour.
@vindex cg-symbols
@cindex suit glyphs
@code{cg-symbols} maps each suit to the glyph used for it, in both the
text and the SVG cards; customize it to use the outlined suits
@samp{♤ ♧ ♢ ♡}, say, instead of the filled ones.
@findex card-games-set-theme
@vindex card-games-themes
@cindex themes
@kbd{M-x card-games-set-theme} applies a colour preset ---
@code{classic}, @code{dark}, or @code{contrast} --- setting the felt
colour, the card back, and the highlight together. The individual
colours (@code{cg-svg-highlight-color}, @code{cg-bid-felt-color}, and the
rest) can also be set on their own.
@vindex cg-cursor-type
@cindex cursor
Card buffers hide the text cursor by default, since you act on the
highlighted card rather than on point; @code{cg-cursor-type} can bring it
back.
@node The Emacs emblem
@section The Emacs emblem
@vindex cg-svg-emacs-logo
@cindex logo
The full-window tables (500 and Gaps) show an Emacs emblem in a corner.
@code{cg-svg-emacs-logo} chooses it: @code{modern} (the current Emacs
icon, the default), @code{classic} (the older icon), @code{gnu} (a GNU
head), @code{splash} (the startup image), @code{drawn} (a small built-in
emblem), or @code{none}. The image choices embed a logo that ships with
your Emacs, falling back to the drawn emblem when it cannot be found.
@node Keys
@section Keys
@vindex cg-keys
@cindex key scheme
@code{cg-keys} selects a movement scheme. @code{emacs} (the default)
follows Emacs conventions --- the arrow keys move and @key{RET} acts.
@code{classic} additionally enables @kbd{h} @kbd{j} @kbd{k} @kbd{l} and
@key{SPC}. A change takes effect the next time a game starts.
@node Opponents
@section Opponents
@vindex cg-ai-level
@findex card-games-set-ai-level
@cindex difficulty
@code{cg-ai-level} sets how hard the computer plays: @code{easy},
@code{normal}, or @code{hard}. Russian Bank plays all three levels; the
trick-taking games play a random legal card on @code{easy} and their
usual game otherwise. Other games do not yet consult it. Set it with
@kbd{M-x card-games-set-ai-level} or from the menu.
@node Solitaire Games
@chapter Solitaire Games
@cindex solitaire
@cindex patience
The one-player games. Most are @dfn{tableau builders} that share the
same controls; the pile games (Golf, TriPeaks, Pyramid) and the gaps
games (Gaps, Hell's Half-Acre) play a little differently and say so in
their own sections.
@cindex solitaire, controls
The shared keys for the tableau builders are:
@table @kbd
@item @key{LEFT} @key{RIGHT}
Move the cursor between piles.
@item @key{RET} @r{(or} @key{SPC}@r{)}
Pick up the card, or the movable run, under the cursor; press again on a
destination to drop it. On the stock, deal cards to the waste (or, when
the stock is empty, recycle the waste where the game allows).
@item f
Send the card under the cursor to a foundation.
@item a
Auto-play the cards that plainly belong on the foundations.
@item u
Undo the last move.
@item n @r{/} g @r{/} ? @r{/} q
New deal, redraw, describe the keys, and return to the menu.
@end table
@noindent
With @code{cg-keys} set to @code{classic} the vi keys @kbd{h} @kbd{j}
@kbd{k} @kbd{l} move as well (@pxref{Keys}).
@menu
* Klondike:: The classic.
* FreeCell:: A game of pure skill.
* Spider:: Two decks; clear eight suited runs.
* Yukon:: Klondike, but move any group.
* Canfield:: A reserve and a wrapping base rank.
* Forty Thieves:: Two decks, no redeal, and hard.
* Scorpion:: Free four buried runs.
* Russian Bank Solitaire:: Houses and a feeding reserve.
* Golf:: One rank up or down.
* TriPeaks:: Golf with wrapping chains.
* Pyramid:: Remove pairs that sum to thirteen.
* Gaps:: Order the rows through the gaps.
* Hell's Half-Acre:: Gaps, built the other way.
@end menu
@node Klondike
@section Klondike
@findex cg-klondike
@cindex Klondike
The classic. Build the four foundations up in suit, Ace to King. Seven
columns hold a descending, alternating-colour tableau; move a card or an
ordered run onto the next-higher card of the other colour, and fill an
empty column with a King (or a King-headed run). Turn cards from the
stock to the waste --- one at a time by default --- and recycle the
waste when the stock runs out.
@vindex cg-sol-klondike-draw
Set @code{cg-sol-klondike-draw} to @code{3} for the harder
turn-three variant.
@cindex strategy, Klondike
@strong{Strategy.} Uncover face-down cards before anything else, and
keep a column open for a King. Do not rush low cards to the foundations
if you may still need them to receive tableau cards.
@node FreeCell
@section FreeCell
@findex cg-freecell
@cindex FreeCell
Every card is dealt face up into eight columns, and four @dfn{free cells}
each hold a single card. Build the tableau down in alternating colour
and the foundations up in suit. How large a run you can shift at once
depends on how many cells and empty columns are free. Almost every deal
can be won --- this is a game of skill, not luck.
@strong{Strategy.} Plan several moves ahead, free the aces early, and
resist filling all four cells; an empty column is worth more than a full
cell.
@node Spider
@section Spider
@findex cg-spider
@cindex Spider
Two decks, ten columns, no separate foundations. Build down regardless
of suit, but only a same-suit run moves as a block. Complete a
King-to-Ace run in one suit and it is lifted off the table; clear all
eight to win. Press @key{RET} on the stock to deal one card to every
column --- but only when no column is empty.
@strong{Strategy.} Build in suit whenever you have the choice, and empty
a column as soon as you can: it is the key to untangling the rest.
@node Yukon
@section Yukon
@findex cg-yukon
@cindex Yukon
Klondike's layout, dealt mostly face up, with one liberating difference:
you may move @emph{any} face-up card, together with everything piled on
top of it, onto a card one higher of the other colour --- the group need
not be in order. There is no stock.
@strong{Strategy.} Expose the face-down cards; the freedom to lift
buried groups wins many deals that Klondike would lose.
@node Canfield
@section Canfield
@findex cg-canfield
@cindex Canfield
A thirteen-card @dfn{reserve}, four tableau columns, and a stock dealt
three at a time. The first card sets the base rank for the foundations,
which build up in suit and wrap from King round to Ace. The tableau
builds down in alternating colour, and an empty column refills from the
reserve.
@strong{Strategy.} Clear the reserve --- it is the bottleneck --- and
keep the wrapping base rank in mind when you choose what to bank.
@node Forty Thieves
@section Forty Thieves
@findex cg-forty-thieves
@cindex Forty Thieves
Two decks, ten columns, eight foundations. The tableau builds down
@emph{in suit} and moves one card at a time; the foundations build up in
suit; the stock deals to the waste with no redeal. A hard, skilful game.
@strong{Strategy.} Be patient, keep the waste short, and avoid burying
the low cards you will need.
@node Scorpion
@section Scorpion
@findex cg-scorpion
@cindex Scorpion
Seven columns, built down in suit. As in Yukon you may move any card
with everything on top of it, ordered or not. Free four King-to-Ace runs
to win. A small stock deals onto the first columns when you are stuck.
@strong{Strategy.} Dig the buried low cards out early, and think about
which King you can afford to complete first.
@node Russian Bank Solitaire
@section Russian Bank
@findex cg-russian-bank
@cindex Russian Bank, solitaire
The one-player patience: eight @dfn{houses} built down in alternating
colour, four foundations built up in suit from the Ace, and a
thirteen-card reserve that feeds an empty house. (For the competitive
two-player game, @pxref{Russian Bank}.)
@strong{Strategy.} Play to the foundations first and empty the reserve;
the houses are just working space.
@node Golf
@section Golf
@findex cg-golf
@cindex Golf
A layout of thirty-five cards over a single waste pile. Play any exposed
card onto the waste when it is one rank above @emph{or} below the waste's
top card; the sequence does @emph{not} wrap, so nothing follows a King.
Turn a fresh card from the stock when you are stuck. Clear the whole
layout to win.
@cindex controls, pile games
Use the arrow keys or the mouse to choose a card, @key{RET} to play it
(or, on the stock, to deal), @kbd{u} to undo, and @kbd{n} for a new deal.
@strong{Strategy.} Look for long up-and-down chains before you spend a
card from the stock.
@node TriPeaks
@section TriPeaks
@findex cg-tripeaks
@cindex TriPeaks
Golf played over three overlapping peaks, with one change: the sequence
@emph{wraps}, so an Ace follows a King and a King follows an Ace. That
lets you run long chains across the peaks. Clear all three to win. The
keys are the same as Golf.
@strong{Strategy.} Plan the chain that uncovers the most cards, and hold
the stock in reserve for when the board truly stalls.
@node Pyramid
@section Pyramid
@findex cg-pyramid
@cindex Pyramid
A twenty-eight-card pyramid. Remove pairs of exposed cards whose ranks
sum to thirteen --- Ace counts 1, Jack 11, Queen 12, and a King is 13, so
a King leaves on its own. Mark one card and then its partner to remove
them, and deal from the stock for more matches. Clear the pyramid to
win.
@strong{Strategy.} Free the cards that block two others at once, and do
not strand a card whose only partner is already gone.
@node Gaps
@section Gaps
@findex cg-montana
@findex cg-gaps
@cindex Gaps
@cindex Montana
Also called Montana. The pack is dealt into four rows with gaps between
the cards. Each row is built as one suit, with a Two at the head, rising
Two, Three, @dots{}, up to the King. Move a card into a gap when it
continues the row --- the card one higher, in the same suit, than the
card to the gap's left. Fillable gaps are ringed and marked with a green
@samp{+}.
When no move remains, @kbd{r} reshuffles the misplaced cards for another
try; you get a limited number of these redeals. @kbd{v} toggles the
full-window layout. Order every row to win.
@strong{Strategy.} Open the gaps that let a Two, then a Three, begin
each row, and spend redeals only when you are truly stuck.
@node Hell's Half-Acre
@section Hell's Half-Acre
@findex cg-hells-half-acre
@cindex Hell's Half-Acre
The same game as Gaps, built the other way: a King anchors the head of
each row and the rows descend King, Queen, @dots{}, down to the Two. The
controls are identical.
@node Trick-Taking Games
@chapter Trick-Taking Games
@c TODO(pass 4): 500, Hearts, Spades, Whist, Oh Hell, Euchre, Pitch,
@c Briscola, Bridge.
@node Rummy Games
@chapter Rummy Games
@c TODO(pass 5): Gin Rummy, Rummy, Rummy 500, Hand & Foot.
@node Matching Games
@chapter Matching Games
@c TODO(pass 5): Go Fish, Old Maid.
@node Capturing Games
@chapter Capturing Games
@c TODO(pass 5): Scopa, Casino.
@node Climbing Games
@chapter Climbing Games
@c TODO(pass 5): President, Spite & Malice, Cribbage.
@node Russian Bank
@chapter Russian Bank
@c TODO(pass 6): Crapette -- the two-player duel, foundations, houses,
@c loading, the stop rule, sequenced moves, the difficulty dial.
@node Networked Play
@chapter Networked Play
@c TODO(pass 6): live 500 over TCP -- cg-bid-host, cg-bid-join, lobbies.
@node Credits
@chapter Credits
@c TODO(pass 6): rules sources (Wikipedia, Pagat); thanks to testers;
@c a credit for Claude (the AI assistant who helped build much of this).
@node License
@appendix License
This manual is licensed under the Creative Commons Attribution 4.0
International License. To view a copy of this license, visit
@url{https://creativecommons.org/licenses/by/4.0/}.
@node Index
@unnumbered Index
@printindex cp
@bye