New puzzle! 'Keen', a clone of KenKen.

[originally from svn r8796]
This commit is contained in:
Simon Tatham
2009-12-27 10:01:23 +00:00
parent a79ab34941
commit 514bd502be
6 changed files with 2588 additions and 3 deletions

2
dsf.c
View File

@ -165,7 +165,7 @@ void edsf_merge(int *dsf, int v1, int v2, int inverse)
* We always make the smaller of v1 and v2 the new canonical * We always make the smaller of v1 and v2 the new canonical
* element. This ensures that the canonical element of any * element. This ensures that the canonical element of any
* class in this structure is always the first element in * class in this structure is always the first element in
* it. * it. 'Keen' depends critically on this property.
* *
* (Jonas Koelker previously had this code choosing which * (Jonas Koelker previously had this code choosing which
* way round to connect the trees by examining the sizes of * way round to connect the trees by examining the sizes of

View File

@ -1,8 +1,8 @@
# Makefile for Puzzles icons. # Makefile for Puzzles icons.
PUZZLES = blackbox bridges cube dominosa fifteen filling flip galaxies guess \ PUZZLES = blackbox bridges cube dominosa fifteen filling flip galaxies guess \
inertia lightup loopy map mines net netslide pattern pegs rect \ inertia keen lightup loopy map mines net netslide pattern pegs \
samegame sixteen slant solo tents twiddle unequal untangle rect samegame sixteen slant solo tents twiddle unequal untangle
BASE = $(patsubst %,%-base.png,$(PUZZLES)) BASE = $(patsubst %,%-base.png,$(PUZZLES))
WEB = $(patsubst %,%-web.png,$(PUZZLES)) WEB = $(patsubst %,%-web.png,$(PUZZLES))
@ -60,6 +60,7 @@ flip-ibase.png : override CROP=288x288 145x145+120+72
galaxies-ibase.png : override CROP=288x288 165x165+0+0 galaxies-ibase.png : override CROP=288x288 165x165+0+0
guess-ibase.png : override CROP=263x420 178x178+75+17 guess-ibase.png : override CROP=263x420 178x178+75+17
inertia-ibase.png : override CROP=321x321 128x128+193+0 inertia-ibase.png : override CROP=321x321 128x128+193+0
keen-ibase.png : override CROP=288x288 96x96+24+120
lightup-ibase.png : override CROP=256x256 112x112+144+0 lightup-ibase.png : override CROP=256x256 112x112+144+0
loopy-ibase.png : override CROP=257x257 113x113+0+0 loopy-ibase.png : override CROP=257x257 113x113+0+0
mines-ibase.png : override CROP=240x240 110x110+130+130 mines-ibase.png : override CROP=240x240 110x110+130+130

62
icons/keen.sav Normal file
View File

@ -0,0 +1,62 @@
SAVEFILE:41:Simon Tatham's Portable Puzzle Collection
VERSION :1:1
GAME :4:Keen
PARAMS :3:5de
CPARAMS :3:5de
SEED :15:846699649745236
DESC :48:a__a_3a_5a_a_a_3b_bac_,a5m15a7a10s2s2d2s3m40m2s2
AUXINFO :52:6105af67c6ebc8de056b59ebc9a463aa54e75f647055c0a6c1bd
NSTATES :2:53
STATEPOS:2:39
MOVE :6:P0,4,2
MOVE :6:P0,4,4
MOVE :6:P0,4,5
MOVE :6:P1,4,2
MOVE :6:P1,4,4
MOVE :6:P1,4,5
MOVE :6:P1,3,2
MOVE :6:P1,3,4
MOVE :6:P1,3,5
MOVE :6:R2,2,4
MOVE :6:R1,2,2
MOVE :6:P1,3,2
MOVE :6:P1,4,2
MOVE :6:R0,4,2
MOVE :6:R2,3,2
MOVE :6:R2,4,1
MOVE :6:R1,4,4
MOVE :6:R1,3,5
MOVE :6:P3,4,3
MOVE :6:P3,4,5
MOVE :6:P4,4,3
MOVE :6:P4,4,5
MOVE :6:R4,4,5
MOVE :6:R3,4,3
MOVE :6:P3,1,2
MOVE :6:P3,1,5
MOVE :6:P3,0,2
MOVE :6:P3,0,5
MOVE :6:R3,2,1
MOVE :6:R3,3,4
MOVE :6:P2,0,3
MOVE :6:P2,0,5
MOVE :6:P2,1,3
MOVE :6:P2,1,5
MOVE :6:P0,1,1
MOVE :6:P0,1,3
MOVE :6:P1,1,1
MOVE :6:P1,1,3
MOVE :6:R2,0,3
MOVE :6:R2,1,5
MOVE :6:R3,0,5
MOVE :6:R3,1,2
MOVE :6:R4,1,4
MOVE :6:R4,2,3
MOVE :6:R4,0,2
MOVE :6:R4,3,1
MOVE :6:R0,2,5
MOVE :6:R0,3,3
MOVE :6:R1,1,3
MOVE :6:R0,1,1
MOVE :6:R1,0,1
MOVE :6:R0,0,4

25
keen.R Normal file
View File

@ -0,0 +1,25 @@
# -*- makefile -*-
KEEN_LATIN_EXTRA = tree234 maxflow dsf
KEEN_EXTRA = latin KEEN_LATIN_EXTRA
keen : [X] GTK COMMON keen KEEN_EXTRA keen-icon|no-icon
keen : [G] WINDOWS COMMON keen KEEN_EXTRA keen.res|noicon.res
keensolver : [U] keen[STANDALONE_SOLVER] latin[STANDALONE_SOLVER] KEEN_LATIN_EXTRA STANDALONE
keensolver : [C] keen[STANDALONE_SOLVER] latin[STANDALONE_SOLVER] KEEN_LATIN_EXTRA STANDALONE
ALL += keen[COMBINED] KEEN_EXTRA
!begin gtk
GAMES += keen
!end
!begin >list.c
A(keen) \
!end
!begin >wingames.lst
keen.exe:Keen
!end

2387
keen.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -22,6 +22,12 @@
\define{dash} \u2013{-} \define{dash} \u2013{-}
\define{times} \u00D7{*}
\define{divide} \u00F7{/}
\define{minus} \u2212{-}
This is a collection of small one-player puzzle games. This is a collection of small one-player puzzle games.
\copyright This manual is copyright 2004-2009 Simon Tatham. All rights \copyright This manual is copyright 2004-2009 Simon Tatham. All rights
@ -2450,6 +2456,110 @@ Filling allows you to configure the number of rows and columns of the
grid, through the \q{Type} menu. grid, through the \q{Type} menu.
\C{keen} \i{Keen}
\cfg{winhelp-topic}{games.keen}
You have a square grid; each square may contain a digit from 1 to
the size of the grid. The grid is divided into blocks of varying
shape and size, with arithmetic clues written in them. Your aim is
to fully populate the grid with digits such that:
\b Each row contains only one occurrence of each digit
\b Each column contains only one occurrence of each digit
\b The digits in each block can be combined to form the number
stated in the clue, using the arithmetic operation given in the
clue. That is:
\lcont{
\b An addition clue means that the sum of the digits in the block
must be the given number. For example, \q{15+} means the contents of
the block adds up to fifteen.
\b A multiplication clue (e.g. \q{60\times}), similarly, means that
the product of the digits in the block must be the given number.
\b A subtraction clue will always be written in a block of size two,
and it means that one of the digits in the block is greater than the
other by the given amount. For example, \q{2\minus} means that one
of the digits in the block is 2 more than the other, or equivalently
that one digit minus the other one is 2. The two digits could be
either way round, though.
\b A division clue (e.g. \q{3\divide}), similarly, is always in a
block of size two and means that one digit divided by the other is
equal to the given amount.
Note that a block may contain more than one digit the same (provided
the identical ones are not in the same row and column). This rule is
precisely the opposite of the rule in Solo's \q{Killer} mode (see
\k{solo}).
}
This puzzle appears in the Times under the name \q{KenKen}.
\H{keen-controls} \i{Keen controls}
\IM{Keen controls} controls, for Keen
Keen shares much of its control system with Solo (and Unequal).
To play Keen, simply click the mouse in any empty square and then
type a digit on the keyboard to fill that square. If you make a
mistake, click the mouse in the incorrect square and press Space to
clear it again (or use the Undo feature).
If you \e{right}-click in a square and then type a number, that
number will be entered in the square as a \q{pencil mark}. You can
have pencil marks for multiple numbers in the same square. Squares
containing filled-in numbers cannot also contain pencil marks.
The game pays no attention to pencil marks, so exactly what you use
them for is up to you: you can use them as reminders that a
particular square needs to be re-examined once you know more about a
particular number, or you can use them as lists of the possible
numbers in a given square, or anything else you feel like.
To erase a single pencil mark, right-click in the square and type
the same number again.
All pencil marks in a square are erased when you left-click and type
a number, or when you left-click and press space. Right-clicking and
pressing space will also erase pencil marks.
As for Solo, the cursor keys can be used in conjunction with the
digit keys to set numbers or pencil marks. Use the cursor keys to
move a highlight around the grid, and type a digit to enter it in
the highlighted square. Pressing return toggles the highlight into a
mode in which you can enter or remove pencil marks.
Pressing M will fill in a full set of pencil marks in every square
that does not have a main digit in it.
(All the actions described in \k{common-actions} are also available.)
\H{keen-parameters} \I{parameters, for Keen}Keen parameters
These parameters are available from the \q{Custom...} option on the
\q{Type} menu.
\dt \e{Grid size}
\dd Specifies the size of the grid. Lower limit is 3; upper limit is
9 (because the user interface would become more difficult with
\q{digits} bigger than 9!).
\dt \e{Difficulty}
\dd Controls the difficulty of the generated puzzle. At Unreasonable
level, some backtracking will be required, but the solution should
still be unique. The remaining levels require increasingly complex
reasoning to avoid having to backtrack.
\A{licence} \I{MIT licence}\ii{Licence} \A{licence} \I{MIT licence}\ii{Licence}