├── .gitignore ├── LICENSE ├── README.md ├── aces ├── aces.png ├── aces.rkt └── info.rkt ├── blackjack ├── blackjack.png ├── blackjack.rkt └── info.rkt ├── cards.rkt ├── cards ├── base.rkt ├── card-class.rkt ├── cards.rkt ├── cards.scrbl ├── classes.rkt ├── constants.rkt ├── generate.rkt ├── hicolor │ ├── card-0-0.png │ ├── card-0-0@2x.png │ ├── card-0-1.png │ ├── card-0-1@2x.png │ ├── card-0-2.png │ ├── card-0-2@2x.png │ ├── card-0-3.png │ ├── card-0-3@2x.png │ ├── card-1-0.png │ ├── card-1-0@2x.png │ ├── card-1-1.png │ ├── card-1-1@2x.png │ ├── card-1-2.png │ ├── card-1-2@2x.png │ ├── card-1-3.png │ ├── card-1-3@2x.png │ ├── card-10-0.png │ ├── card-10-0@2x.png │ ├── card-10-1.png │ ├── card-10-1@2x.png │ ├── card-10-2.png │ ├── card-10-2@2x.png │ ├── card-10-3.png │ ├── card-10-3@2x.png │ ├── card-11-0.png │ ├── card-11-0@2x.png │ ├── card-11-1.png │ ├── card-11-1@2x.png │ ├── card-11-2.png │ ├── card-11-2@2x.png │ ├── card-11-3.png │ ├── card-11-3@2x.png │ ├── card-12-0.png │ ├── card-12-0@2x.png │ ├── card-12-1.png │ ├── card-12-1@2x.png │ ├── card-12-2.png │ ├── card-12-2@2x.png │ ├── card-12-3.png │ ├── card-12-3@2x.png │ ├── card-2-0.png │ ├── card-2-0@2x.png │ ├── card-2-1.png │ ├── card-2-1@2x.png │ ├── card-2-2.png │ ├── card-2-2@2x.png │ ├── card-2-3.png │ ├── card-2-3@2x.png │ ├── card-3-0.png │ ├── card-3-0@2x.png │ ├── card-3-1.png │ ├── card-3-1@2x.png │ ├── card-3-2.png │ ├── card-3-2@2x.png │ ├── card-3-3.png │ ├── card-3-3@2x.png │ ├── card-4-0.png │ ├── card-4-0@2x.png │ ├── card-4-1.png │ ├── card-4-1@2x.png │ ├── card-4-2.png │ ├── card-4-2@2x.png │ ├── card-4-3.png │ ├── card-4-3@2x.png │ ├── card-5-0.png │ ├── card-5-0@2x.png │ ├── card-5-1.png │ ├── card-5-1@2x.png │ ├── card-5-2.png │ ├── card-5-2@2x.png │ ├── card-5-3.png │ ├── card-5-3@2x.png │ ├── card-6-0.png │ ├── card-6-0@2x.png │ ├── card-6-1.png │ ├── card-6-1@2x.png │ ├── card-6-2.png │ ├── card-6-2@2x.png │ ├── card-6-3.png │ ├── card-6-3@2x.png │ ├── card-7-0.png │ ├── card-7-0@2x.png │ ├── card-7-1.png │ ├── card-7-1@2x.png │ ├── card-7-2.png │ ├── card-7-2@2x.png │ ├── card-7-3.png │ ├── card-7-3@2x.png │ ├── card-8-0.png │ ├── card-8-0@2x.png │ ├── card-8-1.png │ ├── card-8-1@2x.png │ ├── card-8-2.png │ ├── card-8-2@2x.png │ ├── card-8-3.png │ ├── card-8-3@2x.png │ ├── card-9-0.png │ ├── card-9-0@2x.png │ ├── card-9-1.png │ ├── card-9-1@2x.png │ ├── card-9-2.png │ ├── card-9-2@2x.png │ ├── card-9-3.png │ ├── card-9-3@2x.png │ ├── card-back.png │ └── card-back@2x.png ├── info.rkt ├── locolor │ ├── card-0-0.png │ ├── card-0-1.png │ ├── card-0-2.png │ ├── card-0-3.png │ ├── card-1-0.png │ ├── card-1-1.png │ ├── card-1-2.png │ ├── card-1-3.png │ ├── card-10-0.png │ ├── card-10-1.png │ ├── card-10-2.png │ ├── card-10-3.png │ ├── card-11-0.png │ ├── card-11-1.png │ ├── card-11-2.png │ ├── card-11-3.png │ ├── card-12-0.png │ ├── card-12-1.png │ ├── card-12-2.png │ ├── card-12-3.png │ ├── card-2-0.png │ ├── card-2-1.png │ ├── card-2-2.png │ ├── card-2-3.png │ ├── card-3-0.png │ ├── card-3-1.png │ ├── card-3-2.png │ ├── card-3-3.png │ ├── card-4-0.png │ ├── card-4-1.png │ ├── card-4-2.png │ ├── card-4-3.png │ ├── card-5-0.png │ ├── card-5-1.png │ ├── card-5-2.png │ ├── card-5-3.png │ ├── card-6-0.png │ ├── card-6-1.png │ ├── card-6-2.png │ ├── card-6-3.png │ ├── card-7-0.png │ ├── card-7-1.png │ ├── card-7-2.png │ ├── card-7-3.png │ ├── card-8-0.png │ ├── card-8-1.png │ ├── card-8-2.png │ ├── card-8-3.png │ ├── card-9-0.png │ ├── card-9-1.png │ ├── card-9-2.png │ ├── card-9-3.png │ └── card-back.png ├── main.rkt ├── make-cards.rkt ├── region.rkt ├── snipclass.rkt └── utils.rkt ├── chat-noir ├── 3x3-empty-board.png ├── 7x7-empty-board.png ├── cat-distance-example.png ├── chat-noir-literate.rkt ├── chat-noir-unit.rkt ├── chat-noir.png ├── hash.rkt └── info.rkt ├── checkers ├── checkers.png ├── checkers.rkt ├── dark.jpg ├── honu-bitmaps.rkt ├── info.rkt └── light.jpg ├── crazy8s ├── crazy8s.png ├── crazy8s.rkt ├── images │ ├── club.png │ ├── diamond.png │ ├── heart.png │ └── spade.png └── info.rkt ├── doors ├── doors.rkt ├── graph.rkt ├── private │ └── utils.rkt └── utils.rkt ├── gcalc ├── gcalc-examples.rktd ├── gcalc.png ├── gcalc.rkt └── info.rkt ├── ginrummy ├── ginrummy.png ├── ginrummy.rkt └── info.rkt ├── gl-board-game.rkt ├── gl-board-game ├── gl-board-game.scrbl ├── gl-board.rkt ├── info.rkt └── main.rkt ├── gobblet ├── check.rkt ├── explore.rkt ├── gobblet.png ├── gobblet.rkt ├── gui.rkt ├── heuristics.rkt ├── info.rkt ├── model.rkt ├── plays-3x3.rkt ├── robot.rkt ├── sig.rkt ├── test-explore.rkt ├── test-model.rkt └── test.rkt ├── gofish ├── gofish.png ├── gofish.rkt └── info.rkt ├── info.rkt ├── jewel ├── array.rkt ├── info.rkt ├── jewel.png ├── jewel.rkt ├── shapes.rkt └── text.rkt ├── lights-out ├── board.rkt ├── boards.rkt ├── info.rkt ├── lights-out.png └── lights-out.rkt ├── main.icns ├── main.ico ├── main.png ├── main.rkt ├── memory ├── images │ ├── club.png │ ├── diamond.png │ ├── fish.png │ ├── happy.png │ ├── heart.png │ ├── jack.png │ ├── spade.png │ ├── star.png │ ├── two-fish.png │ └── unhappy.png ├── info.rkt ├── memory.png └── memory.rkt ├── mines ├── gen-tiles.rkt ├── images │ ├── bg.png │ ├── bomb.png │ ├── explode.png │ ├── flag.png │ ├── hilite-tile.png │ ├── lclick-tile.png │ ├── local-tile.png │ ├── near-tile.png │ ├── rclick-tile.png │ └── tile.png ├── info.rkt ├── mines.png └── mines.rkt ├── paint-by-numbers ├── all-problems.rkt ├── gui.rkt ├── hattori │ ├── 1.gif │ ├── 10.gif │ ├── 100.gif │ ├── 101.gif │ ├── 102.gif │ ├── 103.gif │ ├── 104.gif │ ├── 105.gif │ ├── 106.gif │ ├── 107.gif │ ├── 108.gif │ ├── 109.gif │ ├── 11.gif │ ├── 110.gif │ ├── 111.gif │ ├── 112.gif │ ├── 113.gif │ ├── 114.gif │ ├── 115.gif │ ├── 116.gif │ ├── 117.gif │ ├── 118.gif │ ├── 119.gif │ ├── 12.gif │ ├── 120.gif │ ├── 121.gif │ ├── 122.gif │ ├── 123.gif │ ├── 124.gif │ ├── 125.gif │ ├── 126.gif │ ├── 127.gif │ ├── 128.gif │ ├── 129.gif │ ├── 13.gif │ ├── 130.gif │ ├── 131.gif │ ├── 132.gif │ ├── 133.gif │ ├── 134.gif │ ├── 135.gif │ ├── 136.gif │ ├── 137.gif │ ├── 138.gif │ ├── 139.gif │ ├── 14.gif │ ├── 15.gif │ ├── 16.gif │ ├── 17.gif │ ├── 18.gif │ ├── 19.gif │ ├── 2.gif │ ├── 20.gif │ ├── 21.gif │ ├── 22.gif │ ├── 23.gif │ ├── 24.gif │ ├── 25.gif │ ├── 26.gif │ ├── 27.gif │ ├── 28.gif │ ├── 29.gif │ ├── 3.gif │ ├── 30.gif │ ├── 31.gif │ ├── 32.gif │ ├── 33.gif │ ├── 34.gif │ ├── 35.gif │ ├── 36.gif │ ├── 37.gif │ ├── 38.gif │ ├── 39.gif │ ├── 4.gif │ ├── 40.gif │ ├── 41.gif │ ├── 42.gif │ ├── 43.gif │ ├── 44.gif │ ├── 45.gif │ ├── 46.gif │ ├── 47.gif │ ├── 48.gif │ ├── 49.gif │ ├── 5.gif │ ├── 50.gif │ ├── 51.gif │ ├── 52.gif │ ├── 53.gif │ ├── 54.gif │ ├── 55.gif │ ├── 56.gif │ ├── 57.gif │ ├── 58.gif │ ├── 59.gif │ ├── 6.gif │ ├── 60.gif │ ├── 61.gif │ ├── 62.gif │ ├── 63.gif │ ├── 64.gif │ ├── 65.gif │ ├── 66.gif │ ├── 67.gif │ ├── 68.gif │ ├── 69.gif │ ├── 7.gif │ ├── 70.gif │ ├── 71.gif │ ├── 72.gif │ ├── 73.gif │ ├── 74.gif │ ├── 75.gif │ ├── 76.gif │ ├── 77.gif │ ├── 78.gif │ ├── 79.gif │ ├── 8.gif │ ├── 80.gif │ ├── 81.gif │ ├── 82.gif │ ├── 83.gif │ ├── 84.gif │ ├── 85.gif │ ├── 86.gif │ ├── 87.gif │ ├── 88.gif │ ├── 89.gif │ ├── 9.gif │ ├── 90.gif │ ├── 91.gif │ ├── 92.gif │ ├── 93.gif │ ├── 94.gif │ ├── 95.gif │ ├── 96.gif │ ├── 97.gif │ ├── 98.gif │ └── 99.gif ├── info.rkt ├── paint-by-numbers.png ├── paint-by-numbers.rkt ├── problem.rkt ├── problems │ ├── directory │ ├── games │ ├── h1-30 │ ├── h121-138 │ ├── h31-60 │ ├── h61-90 │ ├── h91-120 │ ├── k15x15 │ ├── k15x20 │ ├── k15x25 │ ├── k20x15 │ ├── k20x20 │ ├── k20x25 │ ├── k20x30 │ ├── k25x15 │ ├── k25x20 │ ├── k25x25 │ ├── k25x30 │ ├── k25x35 │ ├── k30x20 │ ├── k30x25 │ ├── k30x30 │ ├── k30x35 │ ├── k30x40 │ ├── k35x25 │ ├── k35x30 │ ├── k35x35 │ ├── k35x40 │ ├── k40x30 │ ├── k40x35 │ ├── k40x40 │ └── misc ├── raw-problems │ ├── allowed-email │ ├── build-final.rkt │ ├── build-hattori.rkt │ ├── build-rows-cols.rkt │ ├── build-solution-sets.rkt │ ├── raw-hattori.rkt │ ├── raw-kajitani.rkt │ ├── raw-misc.rkt │ ├── raw-problems.rkt │ └── size-calculation.rkt ├── solution-sets │ ├── directory │ ├── games │ ├── h1-30 │ ├── h31-60 │ ├── h61-90 │ ├── h91-99 │ ├── k15x15 │ ├── k15x20 │ ├── k15x25 │ ├── k20x15 │ ├── k20x20 │ ├── k20x25 │ ├── k20x30 │ ├── k25x15 │ ├── k25x20 │ ├── k25x25 │ ├── k25x30 │ ├── k25x35 │ ├── k30x20 │ ├── k30x25 │ ├── k30x30 │ ├── k30x35 │ ├── k30x40 │ ├── k35x25 │ ├── k35x30 │ ├── k35x35 │ ├── k35x40 │ ├── k40x30 │ ├── k40x35 │ ├── k40x40 │ └── misc └── solve.rkt ├── parcheesi ├── admin-gui.rkt ├── admin.rkt ├── best-players.rkt ├── board.rkt ├── die.rkt ├── gui.rkt ├── info.rkt ├── interfaces.rkt ├── make-bitmap.rkt ├── moves.rkt ├── parcheesi.png ├── parcheesi.rkt ├── play-game.rkt ├── rules.rkt └── test │ ├── moves-test.rkt │ └── test.rkt ├── pousse ├── board-size.rkt ├── board.rkt ├── counter.rkt ├── help.txt ├── info.rkt ├── left.gif ├── pousse.png ├── pousse.rkt ├── right.gif ├── robot.rkt ├── robots.txt └── utils.rkt ├── same ├── info.rkt ├── same-lib.rkt ├── same.png └── same.rkt ├── scribblings ├── aces.scrbl ├── blackjack.scrbl ├── chat-noir.scrbl ├── checkers.scrbl ├── common.rkt ├── crazy8s.scrbl ├── games.scrbl ├── gcalc.scrbl ├── ginrummy.scrbl ├── gobblet.scrbl ├── gofish.scrbl ├── jewel.scrbl ├── lights-out.scrbl ├── memory.scrbl ├── mines.scrbl ├── paint-by-numbers.scrbl ├── parcheesi.scrbl ├── pousse.scrbl ├── same.scrbl ├── slidey.scrbl ├── spider.scrbl ├── std-games.scrbl └── tally-maze.scrbl ├── show-help.rkt ├── show-scribbling.rkt ├── slidey ├── 11.jpg ├── info.rkt ├── slidey-main.rkt ├── slidey.png └── slidey.rkt ├── spider ├── info.rkt ├── spider.png └── spider.rkt ├── tally-maze.rkt ├── tally-maze ├── game.rkt ├── images │ ├── pumpkin │ │ ├── pumpkin-48x48.png │ │ └── pumpkin-64x64.png │ └── very-emotional │ │ ├── 01.png │ │ ├── 19.png │ │ ├── 20.png │ │ ├── 21.png │ │ ├── 35.png │ │ ├── 36.png │ │ └── 37.png ├── info.rkt ├── maze.rkt ├── state.rkt └── tally-maze.png └── tests └── test-docs-complete.rkt /.gitignore: -------------------------------------------------------------------------------- 1 | # Racket compiled files 2 | compiled/ 3 | 4 | # common backups, autosaves, lock files, OS meta-files 5 | *~ 6 | \#* 7 | .#* 8 | .DS_Store 9 | *.bak 10 | TAGS 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This component of Racket is distributed under the under the Apache 2.0 2 | and MIT licenses. The user can choose the license under which they 3 | will be using the software. There may be other licenses within the 4 | distribution with which the user must also comply. 5 | 6 | See the files 7 | https://github.com/racket/racket/blob/master/racket/src/LICENSE-APACHE.txt 8 | and 9 | https://github.com/racket/racket/blob/master/racket/src/LICENSE-MIT.txt 10 | for the full text of the licenses. 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # games 2 | 3 | This the source for the Racket package: "games". 4 | 5 | ### Contributing 6 | 7 | Contribute to Racket by submitting a [pull request], reporting an 8 | [issue], joining the [development mailing list], or visiting the 9 | IRC or Slack channels. 10 | 11 | ### License 12 | 13 | Racket, including these packages, is free software, see [LICENSE] 14 | for more details. 15 | 16 | By making a contribution, you are agreeing that your contribution 17 | is licensed under the [Apache 2.0] license and the [MIT] license. 18 | 19 | [MIT]: https://github.com/racket/racket/blob/master/racket/src/LICENSE-MIT.txt 20 | [Apache 2.0]: https://www.apache.org/licenses/LICENSE-2.0.txt 21 | [pull request]: https://github.com/racket/games/pulls 22 | [issue]: https://github.com/racket/games/issues 23 | [development mailing list]: https://lists.racket-lang.org 24 | [LICENSE]: LICENSE 25 | -------------------------------------------------------------------------------- /aces/aces.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/aces/aces.png -------------------------------------------------------------------------------- /aces/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "aces.rkt") 4 | (define game-set "Card Games") 5 | -------------------------------------------------------------------------------- /blackjack/blackjack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/blackjack/blackjack.png -------------------------------------------------------------------------------- /blackjack/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "blackjack.rkt") 4 | (define game-set "Card Games") 5 | -------------------------------------------------------------------------------- /cards.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | 3 | (require "cards/cards.rkt") 4 | (provide (all-from-out "cards/cards.rkt")) 5 | -------------------------------------------------------------------------------- /cards/base.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require racket/class 4 | racket/contract 5 | "make-cards.rkt" 6 | "classes.rkt" 7 | "card-class.rkt") 8 | 9 | (provide make-card 10 | table<%> 11 | card<%> 12 | make-deck 13 | (contract-out 14 | [make-table 15 | (->* {} 16 | {string? 17 | real? 18 | real? 19 | #:mixin (make-mixin-contract table<%>)} 20 | any)] 21 | )) 22 | 23 | (define table<%> (class->interface table%)) 24 | (define card<%> (class->interface card%)) 25 | 26 | (define (make-table [title "Cards"] 27 | [w 7] 28 | [h 3] 29 | #:mixin [mixin values]) 30 | (make-object (mixin table%) title w h)) 31 | 32 | (define (make-deck) 33 | (map (lambda (l) (send l copy)) deck-of-cards)) 34 | -------------------------------------------------------------------------------- /cards/cards.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require racket/contract 4 | racket/class 5 | racket/draw 6 | "base.rkt" 7 | "utils.rkt" 8 | "region.rkt") 9 | 10 | ;add contracts for region.rkt here to avoid cyclic dependencies 11 | 12 | (define make-region/c 13 | (-> real? 14 | real? 15 | (and/c real? (not/c negative?)) 16 | (and/c real? (not/c negative?)) 17 | (or/c string? #f) 18 | (or/c #f (-> (listof (is-a?/c card<%>)) any)) 19 | any)) 20 | 21 | (provide table<%> 22 | card<%> 23 | make-deck 24 | make-card 25 | make-table 26 | shuffle-list 27 | struct:region 28 | region? 29 | region-button? 30 | region-hilite? 31 | region-x 32 | region-y 33 | region-w 34 | region-h 35 | region-label 36 | (contract-out 37 | [region make-region/c] 38 | [make-region make-region/c] 39 | [region-interactive-callback 40 | (-> region? (or/c #f (-> any/c (listof (is-a?/c card<%>)) any)))] 41 | [set-region-interactive-callback! 42 | (-> region? (or/c #f (-> any/c (listof (is-a?/c card<%>)) any)) 43 | any)] 44 | [region-paint-callback 45 | (-> region? (or/c #f (-> (is-a?/c dc<%>) real? real? real? real? any)))] 46 | [set-region-paint-callback! 47 | (-> region? (or/c #f (-> (is-a?/c dc<%>) real? real? real? real? any)) 48 | any)] 49 | [region-callback 50 | (->i ([rgn region?]) 51 | [callback (rgn) 52 | (or/c #f (if (region-button? rgn) 53 | (-> any) 54 | (-> (listof (is-a?/c card<%>)) any)))])] 55 | [set-region-callback! 56 | (->i ([rgn region?] 57 | [callback (rgn) 58 | (or/c #f (if (region-button? rgn) 59 | (-> any) 60 | (-> (listof (is-a?/c card<%>)) any)))]) 61 | any)] 62 | [make-button-region 63 | (-> real? 64 | real? 65 | (and/c real? (not/c negative?)) 66 | (and/c real? (not/c negative?)) 67 | (or/c string? (is-a?/c bitmap%) #f) 68 | (or/c #f (-> any)) 69 | any)] 70 | [make-background-region 71 | (-> real? 72 | real? 73 | (and/c real? (not/c negative?)) 74 | (and/c real? (not/c negative?)) 75 | (-> (is-a?/c dc<%>) real? real? real? real? any) 76 | any)])) 77 | -------------------------------------------------------------------------------- /cards/constants.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require racket/class 4 | racket/gui/base) 5 | 6 | (provide ANIMATION-STEPS 7 | ANIMATION-TIME 8 | 9 | PRETTY-CARD-SEP-AMOUNT 10 | 11 | white-brush 12 | hilite-brush 13 | black-pen 14 | dark-gray-pen 15 | no-pen 16 | black-color 17 | nice-font) 18 | 19 | (define ANIMATION-STEPS 5) 20 | (define ANIMATION-TIME 0.3) 21 | 22 | (define PRETTY-CARD-SEP-AMOUNT 5) 23 | 24 | (define black-color 25 | (make-object color% "black")) 26 | 27 | (define white-brush 28 | (send the-brush-list 29 | find-or-create-brush 30 | "white" 'solid)) 31 | 32 | (define hilite-brush 33 | (send the-brush-list 34 | find-or-create-brush 35 | black-color 'hilite)) 36 | 37 | (define black-pen 38 | (send the-pen-list 39 | find-or-create-pen 40 | black-color 1 'solid)) 41 | 42 | (define dark-gray-pen 43 | (send the-pen-list 44 | find-or-create-pen 45 | "dark gray" 1 'solid)) 46 | 47 | (define no-pen 48 | (send the-pen-list 49 | find-or-create-pen 50 | black-color 1 'transparent)) 51 | 52 | (define nice-font 53 | (send the-font-list 54 | find-or-create-font 55 | 12 'decorative 'normal 'bold 56 | #f 'default #t)) 57 | 58 | -------------------------------------------------------------------------------- /cards/hicolor/card-0-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-0-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-0-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-1-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-1-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-10-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-10-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-11-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-11-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-12-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-12-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-2-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-2-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-3-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-3-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-4-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-4-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-5-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-5-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-6-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-6-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-7-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-7-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-8-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-8-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-0.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-0@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-1.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-1@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-2.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-2@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-3.png -------------------------------------------------------------------------------- /cards/hicolor/card-9-3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-9-3@2x.png -------------------------------------------------------------------------------- /cards/hicolor/card-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-back.png -------------------------------------------------------------------------------- /cards/hicolor/card-back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/hicolor/card-back@2x.png -------------------------------------------------------------------------------- /cards/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define scribblings '(("cards.scrbl" () (gui-library)))) 4 | -------------------------------------------------------------------------------- /cards/locolor/card-0-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-0-0.png -------------------------------------------------------------------------------- /cards/locolor/card-0-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-0-1.png -------------------------------------------------------------------------------- /cards/locolor/card-0-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-0-2.png -------------------------------------------------------------------------------- /cards/locolor/card-0-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-0-3.png -------------------------------------------------------------------------------- /cards/locolor/card-1-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-1-0.png -------------------------------------------------------------------------------- /cards/locolor/card-1-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-1-1.png -------------------------------------------------------------------------------- /cards/locolor/card-1-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-1-2.png -------------------------------------------------------------------------------- /cards/locolor/card-1-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-1-3.png -------------------------------------------------------------------------------- /cards/locolor/card-10-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-10-0.png -------------------------------------------------------------------------------- /cards/locolor/card-10-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-10-1.png -------------------------------------------------------------------------------- /cards/locolor/card-10-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-10-2.png -------------------------------------------------------------------------------- /cards/locolor/card-10-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-10-3.png -------------------------------------------------------------------------------- /cards/locolor/card-11-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-11-0.png -------------------------------------------------------------------------------- /cards/locolor/card-11-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-11-1.png -------------------------------------------------------------------------------- /cards/locolor/card-11-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-11-2.png -------------------------------------------------------------------------------- /cards/locolor/card-11-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-11-3.png -------------------------------------------------------------------------------- /cards/locolor/card-12-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-12-0.png -------------------------------------------------------------------------------- /cards/locolor/card-12-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-12-1.png -------------------------------------------------------------------------------- /cards/locolor/card-12-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-12-2.png -------------------------------------------------------------------------------- /cards/locolor/card-12-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-12-3.png -------------------------------------------------------------------------------- /cards/locolor/card-2-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-2-0.png -------------------------------------------------------------------------------- /cards/locolor/card-2-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-2-1.png -------------------------------------------------------------------------------- /cards/locolor/card-2-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-2-2.png -------------------------------------------------------------------------------- /cards/locolor/card-2-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-2-3.png -------------------------------------------------------------------------------- /cards/locolor/card-3-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-3-0.png -------------------------------------------------------------------------------- /cards/locolor/card-3-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-3-1.png -------------------------------------------------------------------------------- /cards/locolor/card-3-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-3-2.png -------------------------------------------------------------------------------- /cards/locolor/card-3-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-3-3.png -------------------------------------------------------------------------------- /cards/locolor/card-4-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-4-0.png -------------------------------------------------------------------------------- /cards/locolor/card-4-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-4-1.png -------------------------------------------------------------------------------- /cards/locolor/card-4-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-4-2.png -------------------------------------------------------------------------------- /cards/locolor/card-4-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-4-3.png -------------------------------------------------------------------------------- /cards/locolor/card-5-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-5-0.png -------------------------------------------------------------------------------- /cards/locolor/card-5-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-5-1.png -------------------------------------------------------------------------------- /cards/locolor/card-5-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-5-2.png -------------------------------------------------------------------------------- /cards/locolor/card-5-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-5-3.png -------------------------------------------------------------------------------- /cards/locolor/card-6-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-6-0.png -------------------------------------------------------------------------------- /cards/locolor/card-6-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-6-1.png -------------------------------------------------------------------------------- /cards/locolor/card-6-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-6-2.png -------------------------------------------------------------------------------- /cards/locolor/card-6-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-6-3.png -------------------------------------------------------------------------------- /cards/locolor/card-7-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-7-0.png -------------------------------------------------------------------------------- /cards/locolor/card-7-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-7-1.png -------------------------------------------------------------------------------- /cards/locolor/card-7-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-7-2.png -------------------------------------------------------------------------------- /cards/locolor/card-7-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-7-3.png -------------------------------------------------------------------------------- /cards/locolor/card-8-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-8-0.png -------------------------------------------------------------------------------- /cards/locolor/card-8-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-8-1.png -------------------------------------------------------------------------------- /cards/locolor/card-8-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-8-2.png -------------------------------------------------------------------------------- /cards/locolor/card-8-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-8-3.png -------------------------------------------------------------------------------- /cards/locolor/card-9-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-9-0.png -------------------------------------------------------------------------------- /cards/locolor/card-9-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-9-1.png -------------------------------------------------------------------------------- /cards/locolor/card-9-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-9-2.png -------------------------------------------------------------------------------- /cards/locolor/card-9-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-9-3.png -------------------------------------------------------------------------------- /cards/locolor/card-back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/cards/locolor/card-back.png -------------------------------------------------------------------------------- /cards/main.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require "cards.rkt") 4 | (provide (all-from-out "cards.rkt")) 5 | -------------------------------------------------------------------------------- /cards/region.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | ;no contracts here because the callback contract uses card<%> 4 | 5 | (provide (struct-out region) 6 | make-button-region 7 | make-background-region) 8 | 9 | (struct region (x 10 | y 11 | w 12 | h 13 | label 14 | [callback #:mutable] 15 | [interactive-callback #:auto #:mutable] 16 | [paint-callback #:auto #:mutable] 17 | [button? #:auto #:mutable] 18 | [hilite? #:auto #:mutable] 19 | [decided-start? #:auto #:mutable] 20 | [can-select? #:auto #:mutable]) 21 | #:extra-constructor-name make-region) 22 | 23 | (define (make-background-region x y w h paint-callback) 24 | (let ([r (make-region x y w h #f #f)]) 25 | (set-region-paint-callback! r paint-callback) 26 | r)) 27 | 28 | (define (make-button-region x y w h label callback) 29 | (let ([r (make-region x y w h label callback)]) 30 | (set-region-button?! r #t) 31 | r)) 32 | -------------------------------------------------------------------------------- /cards/snipclass.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require racket/gui/base 4 | racket/class) 5 | 6 | (provide sc) 7 | 8 | (define sc (make-object snip-class%)) 9 | (send sc set-classname "card") 10 | (send (get-the-snip-class-list) add sc) 11 | 12 | -------------------------------------------------------------------------------- /cards/utils.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | 3 | (require racket/contract) 4 | 5 | (provide (contract-out 6 | [shuffle-list 7 | (-> list? natural-number/c list?)] 8 | )) 9 | 10 | (define (shuffle-list l c) 11 | (if (zero? c) 12 | l 13 | (let-values ([(a b) 14 | (let ([half (floor (/ (length l) 2))]) 15 | (values 16 | (let loop ([l l][n half]) 17 | (if (zero? n) 18 | null 19 | (cons (car l) (loop (cdr l) (sub1 n))))) 20 | (list-tail l half)))]) 21 | (shuffle-list 22 | (let loop ([a a][b b][l null]) 23 | (cond 24 | [(null? a) (append (reverse b) l)] 25 | [(null? b) (append (reverse a) l)] 26 | [(zero? (random 2)) 27 | (loop (cdr a) b (cons (car a) l))] 28 | [else 29 | (loop a (cdr b) (cons (car b) l))])) 30 | (sub1 c))))) 31 | -------------------------------------------------------------------------------- /chat-noir/3x3-empty-board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/chat-noir/3x3-empty-board.png -------------------------------------------------------------------------------- /chat-noir/7x7-empty-board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/chat-noir/7x7-empty-board.png -------------------------------------------------------------------------------- /chat-noir/cat-distance-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/chat-noir/cat-distance-example.png -------------------------------------------------------------------------------- /chat-noir/chat-noir-unit.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | (require racket/unit 3 | racket/runtime-path 4 | racket/gui/base 5 | racket/class 6 | "../show-scribbling.rkt" 7 | string-constants/string-constant 8 | (prefix-in x: lang/htdp-intermediate-lambda) 9 | (prefix-in y: htdp/world)) 10 | 11 | (provide game@) 12 | (define orig-namespace (current-namespace)) 13 | (define-runtime-path chat-noir "chat-noir-literate.rkt") 14 | 15 | (define-unit game@ 16 | (import) 17 | (export) 18 | 19 | (define sub-custodian (make-custodian)) 20 | (define main-custodian (current-custodian)) 21 | 22 | (define (find-windows) 23 | (let loop ([cust sub-custodian]) 24 | (let o-loop ([objs (custodian-managed-list cust main-custodian)]) 25 | (cond 26 | [(null? objs) null] 27 | [else 28 | (let ([obj (car objs)]) 29 | (cond 30 | [(custodian? obj) 31 | (append (loop obj) 32 | (o-loop (cdr objs)))] 33 | [(eventspace? obj) 34 | (append (parameterize ([current-eventspace obj]) 35 | (get-top-level-windows)) 36 | (o-loop (cdr objs)))] 37 | [else 38 | (o-loop (cdr objs))]))])))) 39 | 40 | ;; a hack. 41 | ;; this adds a help button to the world.rkt window 42 | (thread 43 | (λ () 44 | (let loop ([n 0]) 45 | (cond 46 | [(n . < . 100) 47 | (sleep 1/10) 48 | (let ([fs (find-windows)]) 49 | (cond 50 | [(null? fs) 51 | (loop (+ n 1))] 52 | [else 53 | (let ([f (car fs)] 54 | [show-help 55 | (show-scribbling 56 | '(lib "games/scribblings/games.scrbl") 57 | "chat-noir")]) 58 | (new button% 59 | [parent f] 60 | [callback (λ (x y) (show-help))] 61 | [label (string-constant help)]))]))] 62 | [else (eprintf "never found a window\n")])))) 63 | 64 | 65 | ;; start up the game 66 | 67 | (parameterize ([current-custodian sub-custodian]) 68 | (parameterize ([current-eventspace (make-eventspace)] 69 | [current-namespace (make-base-namespace)]) 70 | (namespace-attach-module orig-namespace 'racket/gui) 71 | (namespace-attach-module orig-namespace 'racket/class) 72 | (queue-callback 73 | (λ () 74 | ((dynamic-require chat-noir 'main))))))) 75 | -------------------------------------------------------------------------------- /chat-noir/chat-noir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/chat-noir/chat-noir.png -------------------------------------------------------------------------------- /chat-noir/hash.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | (provide make-immutable-hash/list-init 3 | hash-set hash-ref hash-map) 4 | 5 | (define (make-immutable-hash/list-init [init '()]) 6 | (make-immutable-hash 7 | (map (λ (x) (cons (car x) (cadr x))) 8 | init))) 9 | -------------------------------------------------------------------------------- /chat-noir/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "chat-noir-unit.rkt") 4 | (define game-set "Puzzle Games") 5 | (define compile-omit-files '("chat-noir.rkt")) 6 | (define name "Chat Noir") 7 | 8 | (define test-responsibles '((all (robby matthias)))) 9 | -------------------------------------------------------------------------------- /checkers/checkers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/checkers/checkers.png -------------------------------------------------------------------------------- /checkers/dark.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/checkers/dark.jpg -------------------------------------------------------------------------------- /checkers/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "checkers.rkt") 4 | (define game-set "Board Games") 5 | -------------------------------------------------------------------------------- /checkers/light.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/checkers/light.jpg -------------------------------------------------------------------------------- /crazy8s/crazy8s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/crazy8s/crazy8s.png -------------------------------------------------------------------------------- /crazy8s/images/club.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/crazy8s/images/club.png -------------------------------------------------------------------------------- /crazy8s/images/diamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/crazy8s/images/diamond.png -------------------------------------------------------------------------------- /crazy8s/images/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/crazy8s/images/heart.png -------------------------------------------------------------------------------- /crazy8s/images/spade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/crazy8s/images/spade.png -------------------------------------------------------------------------------- /crazy8s/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define name "Crazy 8s") 4 | (define game "crazy8s.rkt") 5 | (define game-set "Card Games") 6 | -------------------------------------------------------------------------------- /doors/private/utils.rkt: -------------------------------------------------------------------------------- 1 | 2 | (module utils racket 3 | (provide alternates 4 | interleave) 5 | 6 | (define (alternates l) 7 | (let loop ([l l]) 8 | (cond 9 | [(null? l) (values null null)] 10 | [(null? (cdr l)) (values l null)] 11 | [else 12 | (let-values ([(as bs) (loop (cddr l))]) 13 | (values (cons (car l) as) 14 | (cons (cadr l) bs)))]))) 15 | 16 | (define (interleave l1 l2) 17 | (cond 18 | [(null? l2) l1] 19 | [else (list* (car l1) 20 | (car l2) 21 | (interleave (cdr l1) (cdr l2)))]))) 22 | -------------------------------------------------------------------------------- /gcalc/gcalc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/gcalc/gcalc.png -------------------------------------------------------------------------------- /gcalc/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define name "GCalc") 4 | (define game "gcalc.rkt") 5 | -------------------------------------------------------------------------------- /ginrummy/ginrummy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/ginrummy/ginrummy.png -------------------------------------------------------------------------------- /ginrummy/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define name "Rummy") 4 | (define game "ginrummy.rkt") 5 | (define game-set "Card Games") 6 | -------------------------------------------------------------------------------- /gl-board-game.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require "gl-board-game/gl-board.rkt") 4 | (provide (all-from-out "gl-board-game/gl-board.rkt")) 5 | -------------------------------------------------------------------------------- /gl-board-game/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define scribblings '(("gl-board-game.scrbl" () (gui-library)))) 4 | -------------------------------------------------------------------------------- /gl-board-game/main.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require "gl-board.rkt") 4 | (provide (all-from-out "gl-board.rkt")) 5 | -------------------------------------------------------------------------------- /gobblet/check.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | ;; Checks that all paths in a tree of games leads to the expected 3 | ;; winner. It also generates information for known plays to be used to 4 | ;; speed up future games (i.e., converts learned strategy to a compact 5 | ;; form). 6 | 7 | (require racket/unit 8 | "sig.rkt" 9 | (only-in "model.rkt" model-unit@) 10 | (only-in "explore.rkt" explore-unit@) 11 | (only-in "heuristics.rkt" heuristics-unit@)) 12 | 13 | (define board-size 3) 14 | (define cannon-size +inf.0) 15 | 16 | (define-unit board-config@ 17 | (import) 18 | (export config^) 19 | (define BOARD-SIZE board-size)) 20 | 21 | (define-unit robot-unit@ 22 | (import config^ explore^ model^ heuristics^) 23 | (export) 24 | (define (mv b p fi fj ti tj k) 25 | (move b p fi fj ti tj k void)) 26 | 27 | (define big (sub1 BOARD-SIZE)) 28 | (define med (- BOARD-SIZE 2)) 29 | 30 | (define 3x3-one-step-win 31 | ;; One-step win 32 | (mv empty-board (list-ref red-pieces big) #f #f 0 0 33 | (lambda (board) 34 | (mv board (list-ref red-pieces big) #f #f 1 1 35 | values)))) 36 | 37 | (define 3x3-two-step-win 38 | (mv empty-board (list-ref red-pieces big) #f #f 0 0 39 | (lambda (board) 40 | (mv board (list-ref yellow-pieces big) #f #f 1 0 41 | (lambda (board) 42 | (mv board (list-ref red-pieces big) #f #f 1 1 43 | (lambda (board) 44 | (mv board (list-ref yellow-pieces big) 1 0 2 2 45 | (lambda (board) 46 | (mv board (list-ref red-pieces med) #f #f 1 0 47 | (lambda (board) 48 | (mv board (list-ref yellow-pieces big) #f #f 1 0 49 | values)))))))))))) 50 | 51 | (define (test-search depth board who history) 52 | ((make-search (if (= BOARD-SIZE 3) 53 | make-3x3-rate-board 54 | make-4x4-rate-board) 55 | (if (= BOARD-SIZE 3) 56 | make-3x3-no-canned-moves 57 | make-4x4-canned-moves)) 58 | +inf.0 1 59 | depth ; depth 60 | who board history)) 61 | 62 | (when (= BOARD-SIZE 3) 63 | (test-search 1 3x3-one-step-win 'red null) 64 | (test-search 3 3x3-one-step-win 'red null) 65 | (test-search 3 3x3-two-step-win 'red null)) 66 | 67 | ;; Time test 68 | (let ([start (current-inexact-milliseconds)] 69 | [m (test-search 5 empty-board 'red null)]) 70 | (printf "[~a secs]\n" (/ (- (current-inexact-milliseconds) start) 71 | 1000.0)))) 72 | 73 | (invoke-unit 74 | (compound-unit/infer 75 | (import) 76 | (export) 77 | (link 78 | [((CONFIG : config^)) board-config@] 79 | [((MODEL : model^)) model-unit@] 80 | [((HEURISTICS : heuristics^)) heuristics-unit@] 81 | [((EXPLORE : explore^)) explore-unit@] 82 | [() robot-unit@]))) 83 | -------------------------------------------------------------------------------- /gobblet/gobblet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/gobblet/gobblet.png -------------------------------------------------------------------------------- /gobblet/gobblet.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/gui 3 | "sig.rkt" 4 | "model.rkt" 5 | "gui.rkt" 6 | "heuristics.rkt" 7 | "explore.rkt" 8 | "../show-scribbling.rkt") 9 | 10 | (provide game@) 11 | 12 | 13 | 14 | (define-unit game@ 15 | (import) 16 | (export) 17 | 18 | (define (make-gobblet-unit size) 19 | (define-unit board-config@ 20 | (import) 21 | (export config^) 22 | (define BOARD-SIZE size)) 23 | 24 | (define-unit restart-unit@ 25 | (import) 26 | (export restart^) 27 | (define (new-game n) 28 | (put-preferences '(gobblet:board-size) (list n) void) 29 | (parameterize ([current-eventspace orig-eventspace]) 30 | (queue-callback 31 | (lambda () 32 | (start-gobblet n))))) 33 | (define (show-gobblet-help) 34 | (parameterize ([current-eventspace orig-eventspace]) 35 | (queue-callback 36 | (lambda () 37 | (unless help 38 | (set! help (show-scribbling '(lib "games/scribblings/games.scrbl") 39 | "gobblet"))) 40 | (help)))))) 41 | 42 | (compound-unit/infer 43 | (import) 44 | (link [((CONFIG : config^)) board-config@] 45 | [((RESTART : restart^)) restart-unit@] 46 | [((MODEL : model^)) model-unit@] 47 | [((HEURISTICS : heuristics^)) heuristics-unit@] 48 | [((EXPLORE : explore^)) explore-unit@] 49 | [() gui-unit@]) 50 | (export))) 51 | 52 | (define help #f) 53 | 54 | (define orig-eventspace (current-eventspace)) 55 | 56 | (define (start-gobblet board-size) 57 | ;; Start a new game as a child process: 58 | (parameterize* ([current-custodian (make-custodian)] 59 | [exit-handler 60 | (lambda (v) 61 | (custodian-shutdown-all (current-custodian)))] 62 | [current-eventspace (make-eventspace)]) 63 | (queue-callback 64 | (lambda () (invoke-unit (make-gobblet-unit board-size)))))) 65 | 66 | (start-gobblet (get-preference 'gobblet:board-size (lambda () 3)))) 67 | -------------------------------------------------------------------------------- /gobblet/heuristics.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | ;; Supplies canned moves and board-rating functions for the state 3 | ;; explorer. 4 | 5 | (require racket/unit 6 | "sig.rkt" 7 | "plays-3x3.rkt") 8 | 9 | (provide heuristics-unit@) 10 | 11 | (define-unit heuristics-unit@ 12 | (import config^ model^ explore^) 13 | (export heuristics^) 14 | 15 | (define (make-3x3-canned-moves canonicalize init-memory) 16 | ;; Add known good plays to init-memory. These plays define 17 | ;; a perfect red player. 18 | (for-each (lambda (play) 19 | (let ([key+xform (canonicalize (list->bytes (vector->list (car play))) #f)]) 20 | (hash-set! init-memory 21 | (car key+xform) 22 | (let-values ([(from-i from-j) 23 | (if (list-ref play 2) 24 | (unapply-xform (cdr key+xform) (list-ref play 2)) 25 | (values #f #f))] 26 | [(to-i to-j) 27 | (unapply-xform (cdr key+xform) (list-ref play 3))]) 28 | (list 29 | (cons +inf.0 30 | (plan 31 | (list-ref play 1) 32 | from-i from-j to-i to-j 33 | (cdr key+xform) 34 | (list-ref play 4)))))))) 35 | 3x3-plays) 36 | (lambda (board me k xform) 37 | null)) 38 | 39 | (define (make-3x3-no-canned-moves canonicalize init-memory) 40 | (lambda (board me k xform) 41 | null)) 42 | 43 | (define (make-3x3-rate-board canon) 44 | (lambda (board me to-i to-j) 45 | (+ (random) 46 | ;; Occupying the middle cell seems good 47 | (rate-cell board me 1 1)))) 48 | 49 | (define (make-4x4-canned-moves canon init-memory) 50 | (lambda (board me k xform) 51 | null)) 52 | 53 | (define (make-4x4-rate-board canon) 54 | (lambda (board me to-i to-j) 55 | (+ (random) 56 | (if (and (top-color? board to-i to-j (other me)) 57 | (3-in-a-row? board to-i to-j (other me))) 58 | -10 59 | 0) 60 | ;; Controlling the middle cells seems good 61 | (rate-cell board me 1 1) 62 | (rate-cell board me 1 2) 63 | (rate-cell board me 2 1) 64 | (rate-cell board me 2 2)))) 65 | 66 | (define (rate-cell board me i j) 67 | (let ([l (board-ref board i j)]) 68 | (if (pair? l) 69 | (if (eq? (piece-color (car l)) me) 70 | 2 71 | -2) 72 | 0))) 73 | 74 | (define (top-color? board i j c) 75 | (let ([l (board-ref board i j)]) 76 | (and (pair? l) 77 | (eq? (piece-color (car l)) c))))) 78 | -------------------------------------------------------------------------------- /gobblet/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "gobblet.rkt") 4 | (define game-set "Board Games") 5 | -------------------------------------------------------------------------------- /gobblet/plays-3x3.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (provide 3x3-plays) 3 | (define 3x3-plays 4 | ;; This list is generated by "check.rkt". 5 | ;; Generate it only when red knows how to win 6 | ;; from all boards. 7 | '((#9(15 0 0 21 9 0 0 0 18) 1 #f 6 2) 8 | (#9(15 0 0 21 9 0 0 0 6) 1 #f 1 3) 9 | (#9(0) 2 #f 4 8) 10 | (#9(0 1 0 6 9 21 0 18 0) 2 #f 0 2) 11 | (#9(0 1 21 8 9 15 0 18 0) 1 #f 0 2) 12 | (#9(15 21 0 21 9 0 0 0 6) 0 #f 2 2) 13 | (#9(23 18 0 0 9 0 0 9 0) 1 #f 2 2) 14 | (#9(9 18 3 9 0 0 18 0) 2 0 5 2) 15 | (#9(0 0 18 0 9 0 15 0) 1 #f 1 3) 16 | (#9(0 7 0 0 9 21 0) 2 #f 1 4) 17 | (#9(0 0 3 9 9 18 18 0) 2 4 0 3) 18 | (#9(0 0 15 0 18 0 15 19 0) 1 #f 1 2) 19 | (#9(0 16 0 6 9 21 0 18 0) 1 #f 0 2) 20 | (#9(0 0 0 15 18 15 0 0 21) 1 #f 0 2) 21 | (#9(6 0 0 3 9 18 0) 2 #f 0 2) 22 | (#9(18 0 0 6 9 15 0) 2 4 3 4) 23 | (#9(0 0 6 18 9 0 15 0) 0 #f 7 4) 24 | (#9(0 0 21 9 9 18 0) 1 #f 8 2) 25 | (#9(0 19 21 8 9 15 0) 1 #f 0 2) 26 | (#9(0 0 0 18 9 15 21 0) 1 #f 0 2) 27 | (#9(21 0 0 9 9 18 0) 1 #f 6 2) 28 | (#9(0 0 21 20 9 15 0 0 7) 0 #f 0 2) 29 | (#9(0 0 6 18 9 0 15 19 0) 2 4 2 3) 30 | (#9(0 0 18 18 9 15 3 0) 1 6 8 3) 31 | (#9(0 16 0 0 9 21 0 18 0) 1 #f 0 2) 32 | (#9(9 0 21 9 0 0 18 0) 1 #f 4 2) 33 | (#9(2 0 0 0 9 0) 2 #f 7 6) 34 | (#9(21 0 9 0 9 0 18 0) 1 #f 3 2) 35 | (#9(18 0 0 9 9 6 0) 2 3 5 5) 36 | (#9(19 16 0 0 9 21 0 6 0) 1 #f 2 2) 37 | (#9(0 0 0 18 9 15 0 0 21) 1 #f 2 2) 38 | (#9(0 0 0 15 18 15 0) 1 #f 2 3) 39 | (#9(6 0 0 21 9 0) 2 #f 0 4) 40 | (#9(0 0 0 6 9 0) 1 #f 5 6) 41 | (#9(0 0 21 20 9 15 0 6 0) 0 #f 8 3) 42 | (#9(0 0 18 18 9 0 15 0) 1 #f 1 3) 43 | (#9(0 0 21 20 9 15 0) 0 #f 8 3) 44 | (#9(0 0 9 18 9 0 6 0) 2 2 6 5) 45 | (#9(0 3 18 0 9 0 15 18 0) 1 #f 0 2) 46 | (#9(0 0 21 11 9 18 0 6 0) 1 #f 8 2) 47 | (#9(0 9 0 2 9 0 0 18 0) 1 #f 2 3) 48 | (#9(0 0 0 18 9 15 0) 1 #f 2 3) 49 | (#9(0 0 0 6 9 21 0) 0 #f 1 5) 50 | (#9(0 9 21 2 9 0 0 18 0) 1 #f 0 2) 51 | (#9(0 16 0 0 9 21 0 6 0) 0 #f 0 3) 52 | (#9(0 0 0 9 9 18 0) 1 #f 0 3) 53 | (#9(0 9 21 2 9 0 0 6 0) 2 1 3 5) 54 | (#9(0 19 0 6 9 21 0) 1 #f 0 2) 55 | (#9(0 0 9 18 9 0 18 0) 1 #f 0 3) 56 | (#9(0 0 9 0 9 0 18 0) 2 2 7 6) 57 | (#9(0 0 21 8 9 15 0) 0 #f 1 3) 58 | (#9(0 21 18 0 9 0 15 0) 1 #f 0 2) 59 | (#9(0 7 0 6 9 21 0) 2 #f 1 4) 60 | (#9(2 18 0 0 9 0 0 9 0) 1 #f 0 3) 61 | (#9(23 6 0 0 9 0 0 9 0) 2 7 1 4) 62 | (#9(18 0 0 18 9 15 0) 1 #f 6 4) 63 | (#9(0 0 0 2 9 0) 2 #f 1 7) 64 | (#9(0 0 21 11 9 6 0 6 0) 2 3 5 4) 65 | (#9(0 0 6 0 9 0 15 19 0) 2 4 2 3) 66 | (#9(0 0 21 11 9 6 0) 2 3 5 4) 67 | (#9(0 9 0 2 9 0 0 6 0) 1 #f 2 6) 68 | (#9(0 0 0 24 9 3 0) 2 #f 2 2) 69 | (#9(5 6 0 0 9 0 0 9 18) 2 4 1 2) 70 | (#9(0 0 18 15 18 15 0 0 3) 1 #f 6 2) 71 | (#9(23 15 0 0 18 0 0 15 0) 1 #f 8 2) 72 | (#9(18 0 0 0 9 0) 2 #f 3 6) 73 | (#9(18 0 0 15 18 15 0) 1 #f 8 3) 74 | (#9(0 0 0 18 9 0) 2 #f 2 7) 75 | (#9(2 6 0 0 9 0 0 9 0) 1 #f 0 5) 76 | (#9(23 15 0 0 9 0 0 18 0) 1 #f 2 2) 77 | (#9(6 0 0 0 9 0) 1 #f 3 5) 78 | (#9(5 18 0 0 9 0 0 9 18) 2 7 3 2) 79 | (#9(18 0 0 9 9 18 0) 1 #f 2 4) 80 | (#9(23 15 0 0 9 0 0 6 0) 2 4 7 3))) 81 | -------------------------------------------------------------------------------- /gobblet/sig.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/unit) 3 | 4 | (provide config^ 5 | heuristics^ explore^ 6 | model^ restart^) 7 | 8 | (define-signature config^ 9 | (BOARD-SIZE)) 10 | 11 | (define-signature heuristics^ 12 | (make-3x3-rate-board 13 | make-3x3-canned-moves 14 | make-3x3-no-canned-moves 15 | make-4x4-rate-board 16 | make-4x4-canned-moves)) 17 | 18 | (define-signature explore^ 19 | (make-search 20 | apply-play ; a play is (list piece from-i from-j to-i to-j) 21 | (struct plan (size from-i from-j to-i to-j xform)))) 22 | 23 | (define-signature model^ 24 | (move 25 | winner? 3-in-a-row? 26 | red-pieces yellow-pieces 27 | piece-color piece-size 28 | empty-board 29 | board-ref 30 | fold-board 31 | fold-rowcol 32 | other 33 | available-off-board 34 | compact-board 35 | make-canonicalize 36 | apply-xform unapply-xform 37 | board->string)) 38 | 39 | (define-signature restart^ 40 | (new-game 41 | show-gobblet-help)) 42 | 43 | 44 | -------------------------------------------------------------------------------- /gobblet/test-explore.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/unit 3 | "sig.rkt" 4 | (only-in "model.rkt" model-unit@) 5 | (only-in "explore.rkt" explore-unit@) 6 | (only-in "heuristics.rkt" heuristics-unit@)) 7 | 8 | (define board-size 3) 9 | 10 | (define-unit board-config@ 11 | (import) 12 | (export config^) 13 | (define BOARD-SIZE board-size)) 14 | 15 | (define-unit robot-unit@ 16 | (import config^ explore^ model^ heuristics^) 17 | (export) 18 | (define (mv b p fi fj ti tj k) 19 | (move b p fi fj ti tj k void)) 20 | 21 | (define big (sub1 BOARD-SIZE)) 22 | (define med (- BOARD-SIZE 2)) 23 | 24 | (define 3x3-one-step-win 25 | ;; One-step win 26 | (mv empty-board (list-ref red-pieces big) #f #f 0 0 27 | (lambda (board) 28 | (mv board (list-ref red-pieces big) #f #f 1 1 29 | values)))) 30 | 31 | (define 3x3-two-step-win 32 | (mv empty-board (list-ref red-pieces big) #f #f 0 0 33 | (lambda (board) 34 | (mv board (list-ref yellow-pieces big) #f #f 1 0 35 | (lambda (board) 36 | (mv board (list-ref red-pieces big) #f #f 1 1 37 | (lambda (board) 38 | (mv board (list-ref yellow-pieces big) 1 0 2 2 39 | (lambda (board) 40 | (mv board (list-ref red-pieces med) #f #f 1 0 41 | (lambda (board) 42 | (mv board (list-ref yellow-pieces big) #f #f 1 0 43 | values)))))))))))) 44 | 45 | (define (test-search depth board who history) 46 | ((make-search (if (= BOARD-SIZE 3) 47 | make-3x3-rate-board 48 | make-4x4-rate-board) 49 | (if (= BOARD-SIZE 3) 50 | make-3x3-no-canned-moves 51 | make-4x4-canned-moves)) 52 | +inf.0 1 53 | depth ; depth 54 | who board history)) 55 | 56 | (when (= BOARD-SIZE 3) 57 | (test-search 1 3x3-one-step-win 'red null) 58 | (test-search 3 3x3-one-step-win 'red null) 59 | (test-search 3 3x3-two-step-win 'red null)) 60 | 61 | ;; Time test 62 | (let ([start (current-inexact-milliseconds)] 63 | [m (test-search 5 empty-board 'red null)]) 64 | (printf "[~a secs]\n" (/ (- (current-inexact-milliseconds) start) 65 | 1000.0)) 66 | )) 67 | 68 | (invoke-unit 69 | (compound-unit/infer 70 | (import) 71 | (export) 72 | (link 73 | [((CONFIG : config^)) board-config@ CONFIG] 74 | [((MODEL : model^)) model-unit@] 75 | [((HEURISTICS : heuristics^)) heuristics-unit@] 76 | [((EXPLORE : explore^)) explore-unit@] 77 | [() robot-unit@]))) 78 | -------------------------------------------------------------------------------- /gobblet/test.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (provide test report-test-results) 3 | 4 | (define failed? #f) 5 | (define (set-failed!) (set! failed? #t)) 6 | 7 | (define-syntax test 8 | (syntax-rules () 9 | [(_ expect expr) 10 | (begin 11 | (printf "~s =>" 'expr) 12 | (flush-output) 13 | (let ([v expr] 14 | [ex expect]) 15 | (printf " ~s" v) 16 | (unless (equal? v ex) 17 | (set-failed!) 18 | (printf " EXPECTED ~s" ex) 19 | (exit)) 20 | (printf "\n")))])) 21 | 22 | (define (report-test-results) 23 | (printf (if failed? 24 | "\nTESTS FAILED\n" 25 | "\nAll tests passed.\n"))) 26 | 27 | -------------------------------------------------------------------------------- /gofish/gofish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/gofish/gofish.png -------------------------------------------------------------------------------- /gofish/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define name "Go Fish") 4 | (define game "gofish.rkt") 5 | (define game-set "Card Games") 6 | -------------------------------------------------------------------------------- /info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define collection "games") 4 | 5 | (define scribblings '(("scribblings/games.scrbl" (multi-page) (gui-library)))) 6 | 7 | (define gracket-launcher-libraries (list "main.rkt")) 8 | (define gracket-launcher-names (list "PLT Games")) 9 | (define deps '("base" 10 | "draw-lib" 11 | "drracket" 12 | ("gui-lib" #:version "1.16") 13 | "net-lib" 14 | "htdp-lib" 15 | "math-lib" 16 | "scribble-lib" 17 | "racket-index" 18 | "sgl" 19 | "srfi-lib" 20 | "string-constants-lib" 21 | ("data-enumerate-lib" #:version "1.2") 22 | "typed-racket-lib" 23 | "typed-racket-more")) 24 | (define build-deps '("draw-doc" 25 | "gui-doc" 26 | "racket-doc" 27 | "pict-lib" 28 | "rackunit-lib" 29 | "htdp-doc")) 30 | 31 | (define pkg-desc "Games") 32 | 33 | (define pkg-authors '(mflatt robby)) 34 | 35 | (define version "1.1") 36 | 37 | (define license 38 | '(Apache-2.0 OR MIT)) 39 | -------------------------------------------------------------------------------- /jewel/array.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | 3 | (provide array-make array-ref array-set! 4 | array-mult array-mult-vector 5 | array-det array-sub array-inv) 6 | 7 | ;; creates a square matrix, nxn 8 | (define (array-make n) 9 | (define a (make-vector n #f)) 10 | (for ([i (in-range n)]) 11 | (vector-set! a i (make-vector n 0.0))) 12 | a) 13 | 14 | ;; returns an array element 15 | (define (array-ref m i j) 16 | (vector-ref (vector-ref m i) j)) 17 | 18 | ;; sets an array element 19 | (define (array-set! m i j val) 20 | (vector-set! (vector-ref m i) j val)) 21 | 22 | ;; matrix - matrix multiplication 23 | (define (array-mult a b) 24 | (define n (vector-length a)) 25 | (define m (array-make n)) 26 | (for* ([i (in-range n)] 27 | [j (in-range n)] 28 | [k (in-range n)]) 29 | (array-set! m i j (+ (array-ref m i j) 30 | (* (array-ref a i k) 31 | (array-ref b k j))))) 32 | m) 33 | 34 | ;; vector - matrix multiplication 35 | (define (array-mult-vector m v) 36 | (define r (make-vector 4 0)) 37 | (for* ([i (in-range 4)] 38 | [j (in-range 4)]) 39 | (vector-set! r i (+ (* (array-ref m i j) (vector-ref v j)) 40 | (vector-ref r i)))) 41 | r) 42 | 43 | ;; calculates the determinant of a matrix 44 | (define (array-det a) 45 | (cond [(= (vector-length a) 1) 46 | (array-ref a 0 0)] 47 | [(= (vector-length a) 2) 48 | (- (* (array-ref a 0 0) (array-ref a 1 1)) 49 | (* (array-ref a 1 0) (array-ref a 0 1)))] 50 | [else 51 | (define n (vector-length a)) 52 | (define det 0.0) 53 | (define m #f) 54 | (define j2 #f) 55 | (for ([j1 (in-range n)]) 56 | ;; create sub-matrix 57 | (set! m (array-make (- n 1))) 58 | (for ([i (in-range 1 n)]) 59 | (set! j2 0) 60 | (for ([j (in-range n)] #:unless (= j j1)) 61 | (array-set! m (- i 1) j2 (array-ref a i j)) 62 | (set! j2 (+ j2 1)))) 63 | (set! det (+ det (* (expt -1 (+ 1 j1 1)) 64 | (array-ref a 0 j1) 65 | (array-det m))))) 66 | ;; return the determinant 67 | det])) 68 | 69 | ;; creates a sub-matrix, except row 'in' and column 'jn' 70 | (define (array-sub a in jn) 71 | (define n (vector-length a)) 72 | (define m (array-make (- n 1))) 73 | (define ii 0) 74 | (define jj 0) 75 | (for ([i (in-range n)] #:unless (= i in)) 76 | (set! jj 0) 77 | (for ([j (in-range n)] #:unless (= j jn)) 78 | (array-set! m ii jj (array-ref a i j)) 79 | (set! jj (+ jj 1))) 80 | (set! ii (+ ii 1))) 81 | m) 82 | 83 | ;; calculates the inverse of a matrix 84 | (define (array-inv a) 85 | (define n (vector-length a)) 86 | (define m (array-make n)) 87 | (define det (array-det a)) 88 | (for* ([i (in-range n)] 89 | [j (in-range n)]) 90 | (array-set! m j i (/ (* (expt -1 (+ i j)) 91 | (array-det (array-sub a i j))) 92 | det))) 93 | m) 94 | 95 | ;; (define aa '#(#(1 2 3) #(4 4 0) #(0 0 10))) 96 | ;; (define bb (array-inv aa)) 97 | ;; (array-mult aa bb) 98 | -------------------------------------------------------------------------------- /jewel/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "jewel.rkt") 4 | (define game-set "Puzzle Games") 5 | -------------------------------------------------------------------------------- /jewel/jewel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/jewel/jewel.png -------------------------------------------------------------------------------- /lights-out/boards.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | (require racket/vector) 3 | 4 | (provide boards 5 | (struct-out board)) 6 | 7 | (define-struct board (name board)) 8 | 9 | (define (build-board name vec) 10 | (make-board name (vector-map vector-copy vec))) 11 | 12 | (define boards 13 | (list 14 | (make-board 15 | "1" 16 | '((o o o o o) 17 | (o o o o o) 18 | (x o x o x) 19 | (o o o o o) 20 | (o o o o o))) 21 | (make-board 22 | "2" 23 | '((x o x o x) 24 | (x o x o x) 25 | (o o o o o) 26 | (x o x o x) 27 | (x o x o x))) 28 | (make-board 29 | "3" 30 | '((o x o x o) 31 | (x x o x x) 32 | (x x o x x) 33 | (x x o x x) 34 | (o x o x o))) 35 | (make-board 36 | "4" 37 | '((o o o o o) 38 | (x x o x x) 39 | (o o o o o) 40 | (x o o o x) 41 | (x x o x x))) 42 | (make-board 43 | "5" 44 | '((x x x x o) 45 | (x x x o x) 46 | (x x x o x) 47 | (o o o x x) 48 | (x x o x x))) 49 | (make-board 50 | "6" 51 | '((o o o o o) 52 | (o o o o o) 53 | (x o x o x) 54 | (x o x o x) 55 | (o x x x o))) 56 | (make-board 57 | "7" 58 | '((x x x x o) 59 | (x o o o x) 60 | (x o o o x) 61 | (x o o o x) 62 | (x x x x o))) 63 | (make-board 64 | "Diagonal" 65 | '((o o o o x) 66 | (o o o x o) 67 | (o o x o o) 68 | (o x o o o) 69 | (x o o o o))))) 70 | -------------------------------------------------------------------------------- /lights-out/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game-set "Puzzle Games") 4 | (define game "lights-out.rkt") 5 | -------------------------------------------------------------------------------- /lights-out/lights-out.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/lights-out/lights-out.png -------------------------------------------------------------------------------- /main.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/main.icns -------------------------------------------------------------------------------- /main.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/main.ico -------------------------------------------------------------------------------- /main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/main.png -------------------------------------------------------------------------------- /memory/images/club.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/club.png -------------------------------------------------------------------------------- /memory/images/diamond.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/diamond.png -------------------------------------------------------------------------------- /memory/images/fish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/fish.png -------------------------------------------------------------------------------- /memory/images/happy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/happy.png -------------------------------------------------------------------------------- /memory/images/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/heart.png -------------------------------------------------------------------------------- /memory/images/jack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/jack.png -------------------------------------------------------------------------------- /memory/images/spade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/spade.png -------------------------------------------------------------------------------- /memory/images/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/star.png -------------------------------------------------------------------------------- /memory/images/two-fish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/two-fish.png -------------------------------------------------------------------------------- /memory/images/unhappy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/images/unhappy.png -------------------------------------------------------------------------------- /memory/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "memory.rkt") 4 | (define game-set "Card Games") 5 | -------------------------------------------------------------------------------- /memory/memory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/memory/memory.png -------------------------------------------------------------------------------- /mines/images/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/bg.png -------------------------------------------------------------------------------- /mines/images/bomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/bomb.png -------------------------------------------------------------------------------- /mines/images/explode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/explode.png -------------------------------------------------------------------------------- /mines/images/flag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/flag.png -------------------------------------------------------------------------------- /mines/images/hilite-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/hilite-tile.png -------------------------------------------------------------------------------- /mines/images/lclick-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/lclick-tile.png -------------------------------------------------------------------------------- /mines/images/local-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/local-tile.png -------------------------------------------------------------------------------- /mines/images/near-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/near-tile.png -------------------------------------------------------------------------------- /mines/images/rclick-tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/rclick-tile.png -------------------------------------------------------------------------------- /mines/images/tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/images/tile.png -------------------------------------------------------------------------------- /mines/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define name "Minesweeper") 4 | (define game-set "Puzzle Games") 5 | (define game "mines.rkt") 6 | -------------------------------------------------------------------------------- /mines/mines.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/mines/mines.png -------------------------------------------------------------------------------- /paint-by-numbers/hattori/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/1.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/10.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/100.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/100.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/101.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/101.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/102.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/102.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/103.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/103.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/104.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/104.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/105.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/105.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/106.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/106.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/107.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/107.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/108.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/108.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/109.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/109.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/11.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/110.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/110.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/111.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/111.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/112.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/112.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/113.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/113.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/114.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/114.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/115.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/115.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/116.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/116.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/117.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/117.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/118.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/118.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/119.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/119.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/12.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/120.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/120.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/121.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/121.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/122.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/122.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/123.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/123.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/124.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/124.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/125.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/125.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/126.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/126.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/127.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/127.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/128.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/128.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/129.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/129.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/13.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/130.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/130.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/131.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/131.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/132.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/132.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/133.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/133.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/134.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/134.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/135.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/135.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/136.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/136.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/137.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/137.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/138.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/138.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/139.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/139.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/14.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/15.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/16.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/17.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/18.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/19.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/2.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/20.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/21.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/22.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/23.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/24.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/25.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/26.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/27.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/28.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/29.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/3.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/30.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/31.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/32.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/33.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/34.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/35.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/36.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/37.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/38.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/39.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/4.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/40.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/41.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/42.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/43.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/44.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/45.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/46.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/47.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/48.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/49.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/5.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/50.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/51.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/52.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/53.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/54.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/55.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/56.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/57.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/58.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/59.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/6.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/60.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/61.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/62.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/63.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/64.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/65.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/66.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/67.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/68.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/69.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/7.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/70.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/71.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/72.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/72.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/73.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/73.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/74.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/74.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/75.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/75.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/76.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/76.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/77.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/77.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/78.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/78.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/79.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/79.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/8.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/80.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/80.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/81.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/81.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/82.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/82.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/83.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/83.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/84.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/84.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/85.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/85.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/86.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/86.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/87.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/87.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/88.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/88.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/89.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/89.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/9.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/90.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/90.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/91.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/91.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/92.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/92.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/93.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/93.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/94.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/94.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/95.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/95.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/96.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/96.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/97.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/97.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/98.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/98.gif -------------------------------------------------------------------------------- /paint-by-numbers/hattori/99.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/hattori/99.gif -------------------------------------------------------------------------------- /paint-by-numbers/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "paint-by-numbers.rkt") 4 | (define game-set "Puzzle Games") 5 | (define compile-omit-paths 6 | '("hattori" 7 | "problems" 8 | "solution-sets")) 9 | -------------------------------------------------------------------------------- /paint-by-numbers/paint-by-numbers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/paint-by-numbers/paint-by-numbers.png -------------------------------------------------------------------------------- /paint-by-numbers/problem.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (provide (struct-out problem)) 3 | (define-struct problem (name rows cols solution) #:mutable) 4 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/directory: -------------------------------------------------------------------------------- 1 | ("games" 2 | "misc" 3 | "h1-30" 4 | "h31-60" 5 | "h61-90" 6 | "h91-120" 7 | "h121-138" 8 | "k15x15" 9 | "k15x20" 10 | "k15x25" 11 | "k20x15" 12 | "k20x20" 13 | "k20x25" 14 | "k20x30" 15 | "k25x15" 16 | "k25x20" 17 | "k25x25" 18 | "k25x30" 19 | "k25x35" 20 | "k30x20" 21 | "k30x25" 22 | "k30x30" 23 | "k30x35" 24 | "k30x40" 25 | "k35x25" 26 | "k35x30" 27 | "k35x35" 28 | "k35x40" 29 | "k40x30" 30 | "k40x35" 31 | "k40x40") 32 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/k15x20: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 15x20") (define problems (list (make-problem "19990127aLLO (1)" (quote ((6 2) (1 1 6) (1 1 2 2) (2 2 1 1) (1 2 1) (6 1 4 1) (1 1 1 1 1) (1 1 1 1) (3 1 1 1 1 1) (1 1 1 1) (5 1 1 1 1) (1 1 1 1 1 1) (3 1 1 1 1) (1 1 1 1) (1 1 1 1 1 1) (6 1 1 1) (1 1 1 1 1) (1 2 2 1) (5 4 1) (1 1 2 1))) (quote ((4 2 1 1 3 2) (1 1 1 1 1 1 1) (1 1 1 3 1 1) (1 1 1 1 1 3) (1 1 1 1 3 1 1) (4 1 3) () (16) (2 2) (1 10 2) (2 2 2) (2 2 2) (1 13) (2) (18))) (quote ("xxxx xx x x xxx xx" "x x x x x x x " "x x x xxx x x " "x x x x x xxx" "x x x x xxx x x " "xxxx x xxx " " " " xxxxxxxxxxxxxxxx " " xx xx " " x xxxxxxxxxx xx" "xx xx xx" "xx xx xx " " x xxxxxxxxxxxxx " " xx " " xxxxxxxxxxxxxxxxxx"))) (make-problem "19990127bLLO (2)" (quote ((3) (5) (7) (1 7) (2 4) (7) (5) (5) (5) (8) (6 2) (2 3 1 1) (2 2 2) (8) (5) (5) (5) (7) (7) (5))) (quote ((1) (3) (2 2) (2 3 1) (1 2 3 1 2) (3 15) (4 6 8) (4 5 1 7) (11 8) (19) (4 2) (2) () () ())) (quote (" x " " xxx " " xx xx " " xx xxx x " " x xx xxx x xx " " xxx xxxxxxxxxxxxxxx" "xxxx xxxxxx xxxxxxxx" "xxxx xxxxx x xxxxxxx" "xxxxxxxxxxx xxxxxxxx" " xxxxxxxxxxxxxxxxxxx" " xxxx xx " " xx " " " " " " "))) (make-problem "19990421bMIJ (3)" (quote (() (1 1 1) (2 2) (1 1 1) (2 1) (1 1) (1 1) (1) (1) (1 1 1 1) (3 1 3) (3 4) (1 3) (1 2) (1 1 1) (2 1 1) (2 1) (1 1) (15) (15))) (quote ((2) (1 2) (3 1 2) (10) (3 1 2) (5 1 2) (1 1 1 2) (1 1 13) (1 1 3 2) (5 3 2) (2 2) (2 2) (2) (2) (2))) (quote (" xx" " x xx" " xxx x xx" " xxxxxxxxxx" " xxx x xx" " xxxxx x xx" " x x x xx" " x x xxxxxxxxxxxxx" " x x xxx xx" " xxxxx xxx xx" " xx xx" " xx xx" " xx" " xx" " xx")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/k15x25: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 15x25") (define problems (list (make-problem "19990804aVAC (1)" (quote ((3) (4) (4 4) (7 3) (7 3) (2 2 2) (1 2) (4 2) (7) (8) (2 1 3) (1 2) (2 2) (2 2) (1 1 1 2) (1 1 1 2) (1 1 1 1 2) (6 2 1) (1 1 1 4) (1 3 1 4) (1 1 3 1) (1 6 2) (1 4 2) (1 2 2) (1 2))) (quote ((2 5) (3 1 1) (4 6 1 1) (3 4 3 1 1) (3 2 1 1 2 1) (4 2 6 3) (7 3) (4 3 1) (3 3 3 1) (2 3 1 1) (3 3 2) (5 14 2) (7 10 1) (4 3) (3))) (quote (" xx xxxxx " " xxx x x " " xxxx xxxxxx x x " " xxx xxxx xxx x x " " xxx xx x x xx x" " xxxx xx xxxxxx xxx " " xxxxxxx xxx " " xxxx xxx x" " xxx xxx xxx x" "xx xxx x x " "xxx xxx xx " "xxxxx xxxxxxxxxxxxxx xx " " xxxxxxx xxxxxxxxxx x " " xxxx xxx " " xxx ")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/k20x15: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 20x15") (define problems (list (make-problem "19990524-KHO (1)" (quote ((1) (2 2 1) (1 1 2) (3 1) (5 2) (3 3 1) (8 1) (19) (1 14) (1 13) (13) (2 1 1 3 3) (4 1 1 2 2) (4 1 1 1 1) (2 1 1 2 2))) (quote ((2) (3 1 4) (1 4 4) (1 4 2) (3 2) (6 1) (12) (1 7 1) (1 8) (4) (4) (4) (5) (6 1) (8) (4) (6 1) (3 8) (3 5) (4))) (quote (" xx " " xxx x xxxx" " x xxxx xxxx" " x xxxx xx " " xxx xx " " xxxxxx x" " xxxxxxxxxxxx " " x xxxxxxx x" " x xxxxxxxx " " xxxx " " xxxx " " xxxx " " xxxxx " " xxxxxx x" " xxxxxxxx" " xxxx " " xxxxxx x" "xxx xxxxxxxx" " xxx xxxxx " " xxxx ")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/k25x15: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 25x15") (define problems (list (make-problem "19990709-DAH (1)" (quote ((25) (1 1) (1 3 1) (1 3 1 3 1) (1 3 1 1 1 1) (1 1 1 1 1 1) (1 1 1 1 1 1) (1 1 1 3 1 1) (1 1 3 4 3 1) (1 3 4 4 4 1) (1 4 4 2 4 1) (1 4 2 2 1) (1 2 1) (1 1) (25))) (quote ((15) (1 1) (1 2 1) (1 4 1) (1 4 1) (1 8 1) (1 1 1) (1 1 2 1) (1 1 4 1) (1 1 4 1) (1 8 1) (1 1) (1 1) (1 2 1) (1 4 1) (1 4 1) (1 8 1) (1 1 1) (1 1 2 1) (1 1 4 1) (1 1 4 1) (1 8 1) (1 1) (1 1) (15))) (quote ("xxxxxxxxxxxxxxx" "x x" "x xx x" "x xxxx x" "x xxxx x" "x xxxxxxxx x" "x x x" "x x xx x" "x x xxxx x" "x x xxxx x" "x xxxxxxxx x" "x x" "x x" "x xx x" "x xxxx x" "x xxxx x" "x xxxxxxxx x" "x x x" "x x xx x" "x x xxxx x" "x x xxxx x" "x xxxxxxxx x" "x x" "x x" "xxxxxxxxxxxxxxx")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/k30x25: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 30x25") (define problems (list (make-problem "19980715-GAS (1)" (quote ((30) (30) (30) (13 15) (12 14) (12 14) (12 14) (12 14) (12 14) (13 15) (13 12) (7 6) (4 3) (1 1) (1 2) (3 1 3 4) (3 3 4 3) (2 4 4 3) (2 3 3 2) (1 2 2 1 2) (1 1 1 1 3 1) (3 4 1) (4 5) () ())) (quote ((11 7) (11 4) (11 2) (12) (13) (14) (13 2) (13 3) (12 2) (12 1 1) (11 3) (11 4) (4 2 6) (3) (3) (4 2) (11 6) (11 5) (11 4) (11 2 1) (12 2) (12 3) (13 4) (13 3) (13) (12) (11 1) (10 3) (10 6) (10 9))) (quote ("xxxxxxxxxxx xxxxxxx " "xxxxxxxxxxx xxxx " "xxxxxxxxxxx xx " "xxxxxxxxxxxx " "xxxxxxxxxxxxx " "xxxxxxxxxxxxxx " "xxxxxxxxxxxxx xx " "xxxxxxxxxxxxx xxx " "xxxxxxxxxxxx xx " "xxxxxxxxxxxx x x " "xxxxxxxxxxx xxx " "xxxxxxxxxxx xxxx " "xxxx xx xxxxxx " "xxx " "xxx " "xxxx xx " "xxxxxxxxxxx xxxxxx " "xxxxxxxxxxx xxxxx " "xxxxxxxxxxx xxxx " "xxxxxxxxxxx xx x " "xxxxxxxxxxxx xx " "xxxxxxxxxxxx xxx " "xxxxxxxxxxxxx xxxx " "xxxxxxxxxxxxx xxx " "xxxxxxxxxxxxx " "xxxxxxxxxxxx " "xxxxxxxxxxx x " "xxxxxxxxxx xxx " "xxxxxxxxxx xxxxxx " "xxxxxxxxxx xxxxxxxxx ")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/k30x35: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 30x35") (define problems (list (make-problem "19990507aJOJ (1)" (quote ((6 2 1 3 1 2 1 1 4) (5 1 1 1 4 1 1 1 1 3) (5 1 1 1 1 1 1 1 1 1) (4 1 1 1 1 1 2 1 1 1 3) (2 1 1 3 2 2 3 3 1) (1 2 18 2) (1 23) (2 21 2) (1 25) (3 22 2) (3 11 8 3) (2 10 7 2) (2 5 6 1) (1 5 2 2 5) (3 1 1 1 1 2) (2 1 1 1 1 1 1 1 1 1) (2 1 1 1 2 1 1 1 1) (2 1 2 4 2 1 1) (2 1 6 1 2) (1 3 6 3) (2 2 6 2 1) (3 2 2 4 2 2 1) (3 2 3 3 2 1) (4 2 5 5 2 2) (4 2 12 2 3) (3 4 6 3 3) (1 7 5 2) (3 4 3 2 1) (29) (1 8 2) (12 10) () (30) () (30))) (quote ((7 6 3 8 3 1 1) (5 1 4 5 6 2 1 1 1) (4 1 1 2 2 2 5 2 1 1 1) (4 1 1 4 2 2 3 1 1 1) (3 1 1 6 3 4 2 1 1 1 1) (1 1 8 1 6 1 1 1 1) (1 1 8 4 1 1 1 1) (1 1 8 1 2 1 1 1 1) (2 1 7 2 3 1 1 1) (1 8 2 3 1 1 1) (2 9 2 3 2 1 1 1) (1 8 1 1 2 2 1 1 1) (2 1 7 1 1 1 2 2 1 1) (2 7 1 1 3 3 2 1 1) (2 8 2 5 2 2 1 1) (2 5 6 2 2 1 1) (1 7 6 2 2 1 1) (9 2 5 2 2 1 1) (1 6 1 1 3 3 2 1 1) (1 8 1 1 1 2 2 1 1) (2 8 1 1 2 2 1 1 1) (1 9 2 3 2 1 1 1) (1 8 2 3 1 1 1) (1 10 2 2 1 1 1 1) (1 1 10 1 3 1 1 1 1) (1 1 8 1 4 1 1 1 1) (1 1 1 1 3 3 5 3 1 1 1) (2 1 1 1 1 3 4 2 2 1 1 1) (2 1 1 1 3 2 2 4 3 1 1) (3 1 1 4 4 8 2 1 1))) (quote ("xxxxxxx xxxxxx xxx xxxxxxxx xxx x x" "xxxxx x xxxx xxxxx xxxxxx xx x x x" "xxxx x x xx xx xx xxxxx xx x x x" "xxxx x x xxxx xx xx xxx x x x" "xxx x x xxxxxx xxx xxxx xx x x x x" "x x xxxxxxxx x xxxxxx x x x x" " x x xxxxxxxx xxxx x x x x" "x x xxxxxxxx x xx x x x x" "xx x xxxxxxx xx xxx x x x" " x xxxxxxxx xx xxx x x x" "xx xxxxxxxxx xx xxx xx x x x" " x xxxxxxxx x x xx xx x x x" "xx x xxxxxxx x x x xx xx x x" "xx xxxxxxx x x xxx xxx xx x x" "xx xxxxxxxx xx xxxxx xx xx x x" " xx xxxxx xxxxxx xx xx x x" "x xxxxxxx xxxxxx xx xx x x" " xxxxxxxxx xx xxxxx xx xx x x" "x xxxxxx x x xxx xxx xx x x" "x xxxxxxxx x x x xx xx x x" " xx xxxxxxxx x x xx xx x x x" "x xxxxxxxxx xx xxx xx x x x" " x xxxxxxxx xx xxx x x x" " x xxxxxxxxxx xx xx x x x x" "x x xxxxxxxxxx x xxx x x x x" " x x xxxxxxxx x xxxx x x x x" "x x x x xxx xxx xxxxx xxx x x x" "xx x x x x xxx xxxx xx xx x x x" "xx x x x xxx xx xx xxxx xxx x x" "xxx x x xxxx xxxx xxxxxxxx xx x x")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/problems/misc: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Misc") (define problems (list (make-problem "Happy Happy Joy Joy" (quote ((5) (9) (2 7) (4 8) (4 7) (6 7) (7 7) (7 6) (7 5) (5 1 4) (4 2 3) (2 4 1) (9) (5))) (quote ((4) (8) (10) (12) (1 8 1) (2 5 2) (4 3 3) (5 4) (7 5) (8 3) (9 1) (10 1) (10) (8) (4))) (quote (" xxxx " " xxxxxxxx " " xxxxxxxxxx " " xxxxxxxxxxxx " " x xxxxxxxx x " "xx xxxxx xx" "xxxx xxx xxx" "xxxxx xxxx" "xxxxxxx xxxxx" "xxxxxxxx xxx" " xxxxxxxxx x " " xxxxxxxxxx x " " xxxxxxxxxx " " xxxxxxxx " " xxxx "))) (make-problem "Solver Breaker" (quote ((1) (2 2) (1) (2) (2 2) (1))) (quote ((1) (2 2) (1 1) (1) (2 2) (1))) (quote ("UUUUUU" "UUUUUU" "UUUUUU" "UUUUUU" "UUUUUU" "UUUUUU")))))) 2 | -------------------------------------------------------------------------------- /paint-by-numbers/raw-problems/allowed-email: -------------------------------------------------------------------------------- 1 | ; -*- Scheme -*- 2 | 3 | ("snordmey@dayton.net" 4 | "jtraub@dragoncat.net" 5 | ("snicker@tmbg.org" "e0gb258s@mail.erin.utoronto.ca") 6 | "mattingly@bigfoot.com" 7 | "jennifer.forman@umb.edu" 8 | "karen.hoover@bigfoot.com" 9 | "sssstree@ix.netcom.com" 10 | "we_bakers_3@earthlink.net" 11 | "bbart@cs.sfu.ca" 12 | "jonesjk@thegrid.net" 13 | "rrichard@lexitech.ca" 14 | "helena.montauban@auroraenergy.com.au" 15 | "barblane@ionsys.com" 16 | ("rman@mishkei.org.il" "m5rammy@maale5.com") 17 | "nmbauer@sprynet.com" 18 | "ncfrench@aol.com" 19 | ("blumbergk@auhs.edu" "km29@drexel.edu") 20 | "jjl@stanford.edu" 21 | "disneyfan13@hotmail.com" 22 | "adjusting@yahoo.com" 23 | "richard@condor-post.com" 24 | "lady_tabitha@yahoo.com" 25 | "vaa@psulias.psu.edu" 26 | "kimbhall@yahoo.com" 27 | "kcottam@cusa.com" 28 | "karganov@hotmail.com" 29 | "jdmaynard@excite.com" 30 | "mnemoy@gameworks.com" 31 | "arrelless@jayco.net" 32 | "azisi@skiathos.physics.auth.gr" 33 | "whoaleo@hotmail.com" 34 | "tucker1999@earthlink.net" 35 | "bergles@yahoo.com" 36 | "elisabeth.springfelter@lanab.amv.se" 37 | "ewhaynes@mit.edu" 38 | "mjcarroll@ccnmail.com" 39 | ("dahu@chez.com" "dahu@netcourrier.com") 40 | "joy@dcs.gla.ac.uk" 41 | "piobst@wam.umd.edu" 42 | "dani681@aol.com" 43 | ("pixel@bga.com" "Talzhemir pixel@realtime.net") 44 | "hkittredge@hotmail.com" 45 | "allraft@sccoast.net" 46 | "karlvonl@geocities.com" 47 | ("ailsa@worldonline.nl" "alisa@euronet.nl") 48 | ("nievmelody@aol.com" "Carey Willis N8NRG@hotmail.com") 49 | "citragreen@hotmail.com" 50 | "dhalayko@cgocable.net" 51 | "jontive1@elp.rr.com" 52 | "hublan@rocketmail.com" 53 | "barbridgway@compuserve.com" 54 | "mijoy@mailcity.com" 55 | "joostdh@sci.kun.nl" 56 | ("steven.paradise@m.cc.utah.edu" "gossamer_kwaj@hotmail.com") 57 | "williamson@proaxis.com" 58 | "vacko_6@hotmail.com" 59 | "jojess@earthlink.net" 60 | 61 | ) 62 | -------------------------------------------------------------------------------- /paint-by-numbers/raw-problems/build-final.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | 3 | #| 4 | 5 | This script constructs the contents of the problems directory 6 | from the solutions directory. This process merely consists of 7 | reading in each file in the solutions directory (based on the 8 | directory file) and rewriting it into the format described 9 | in ... 10 | 11 | |# 12 | 13 | (module test racket/base) 14 | 15 | ;; shrink-file : string -> string 16 | (define (shrink-file filename) 17 | (printf "shrinking ~a..." filename) 18 | (flush-output) 19 | (let ([shrunk (shrink-set (call-with-input-file (build-path 'up "solution-sets" filename) read))]) 20 | (call-with-output-file (build-path 'up "problems" filename) 21 | (lambda (port) 22 | (write shrunk port) 23 | (newline port)))) 24 | (printf "done\n")) 25 | 26 | ;; shrink-set sexp[set] -> sexp[set] 27 | (define (shrink-set set) 28 | (match set 29 | [`(unit 30 | (import paint-by-numbers:problem^) 31 | (export paint-by-numbers:problem-set^) 32 | (define set-name ,set-name) 33 | (define problems (list ,problems ...))) 34 | `(unit 35 | (import paint-by-numbers:problem^) 36 | (export paint-by-numbers:problem-set^) 37 | (define set-name ,set-name) 38 | (define problems (list ,@(map shrink-problem problems))))])) 39 | 40 | ;; shrink-problem : sexp[problem] -> sexp[problem] 41 | (define (shrink-problem problem) 42 | (match problem 43 | [`(make-problem ,name ,rows ,cols ',solution) 44 | `(make-problem ,name ,rows ,cols ',(shrink-solution solution))])) 45 | 46 | ;; shrink-soution : (union #f (vectorof (vectorof (union 'on 'off 'unknown)))) 47 | ;; -> (union #f (listof string)) 48 | ;; produces the data in a representation that is much smaller when written 49 | (define (shrink-solution soln) 50 | (and soln 51 | (map (lambda (line) 52 | (apply string (map (lambda (x) 53 | (case x 54 | [(on) #\x] 55 | [(off) #\space] 56 | [(unknown) #\U])) 57 | (vector->list line)))) 58 | (vector->list soln)))) 59 | 60 | 61 | ;; erase old contents of the solutions directory 62 | (for-each 63 | (lambda (file) (when (file-exists? (build-path 'up "problems" file)) 64 | (delete-file (build-path 'up "problems" file)))) 65 | (directory-list (build-path 'up "problems"))) 66 | 67 | (copy-file (build-path 'up "solution-sets" "directory") 68 | (build-path 'up "problems" "directory")) 69 | 70 | (provide main) 71 | (define (main) 72 | (for-each shrink-file (call-with-input-file (build-path 'up "problems" "directory") read))) 73 | -------------------------------------------------------------------------------- /paint-by-numbers/raw-problems/build-rows-cols.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require racket/gui 3 | racket/class) 4 | (define argv (current-command-line-arguments)) 5 | 6 | (module test racket/base) 7 | 8 | (when (equal? (vector) argv) 9 | (error 'build-rows-cols.rkt 10 | "expected an image file on the command-line")) 11 | 12 | (define image (vector-ref argv 0)) 13 | (eprintf "processing ~a\n" image) 14 | 15 | (define bitmap (make-object bitmap% image)) 16 | (when (send bitmap is-color?) 17 | (eprintf "expected a monochrome bitmap -- all non-black spaces will be considered white\n")) 18 | 19 | (newline (current-error-port)) 20 | 21 | (define bitmap-dc (make-object bitmap-dc% bitmap)) 22 | 23 | (define on-off-lists 24 | (let ([color (make-object color%)]) 25 | (let loop ([i (send bitmap get-height)] 26 | [ans null]) 27 | (cond 28 | [(zero? i) ans] 29 | [else 30 | (loop 31 | (- i 1) 32 | (cons 33 | (let loop ([j (send bitmap get-width)] 34 | [ans null]) 35 | (cond 36 | [(zero? j) ans] 37 | [else 38 | (send bitmap-dc get-pixel (- j 1) (- i 1) color) 39 | (loop (- j 1) 40 | (cons 41 | (if (and (= 0 (send color red)) 42 | (= 0 (send color blue)) 43 | (= 0 (send color green))) 44 | 'on 45 | 'off) 46 | ans))])) 47 | ans))])))) 48 | 49 | (define (on-off->blocks l) 50 | (let loop ([l l] 51 | [in? #f] 52 | [size 0]) 53 | (cond 54 | [(null? l) (if (= size 0) 55 | null 56 | (list size))] 57 | [else 58 | (let ([on? (eq? (car l) 'on)]) 59 | (cond 60 | [(and in? on?) 61 | (loop (cdr l) 62 | on? 63 | (+ size 1))] 64 | [(and in? (not on?)) 65 | (cons size 66 | (loop (cdr l) 67 | #f 68 | 0))] 69 | [(and (not in?) on?) 70 | (loop (cdr l) 71 | #t 72 | 1)] 73 | [(and (not in?) (not on?)) 74 | (loop (cdr l) 75 | #f 76 | 0)]))]))) 77 | 78 | (define (transpose l) (apply map list l)) 79 | 80 | (for-each 81 | (lambda (l) 82 | (for-each 83 | (lambda (i) (display (if (eq? i 'on) "#" " ") (current-error-port))) 84 | l) 85 | (newline (current-error-port))) 86 | on-off-lists) 87 | (newline (current-error-port)) 88 | 89 | (define rows (map on-off->blocks on-off-lists)) 90 | (define cols (map on-off->blocks (transpose on-off-lists))) 91 | 92 | (write (list image rows cols)) 93 | (newline) 94 | -------------------------------------------------------------------------------- /paint-by-numbers/raw-problems/raw-misc.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | (provide raw-misc) 3 | 4 | #| 5 | 6 | raw-misc.rkt 7 | 8 | This file contains the built-in problems in a raw format. It is 9 | intended to be processed by the solver which will produce 10 | "problems.rkt". This file should contain a single sexpression of this 11 | type: 12 | 13 | (listof (list string cols rows)) 14 | 15 | The cols and rows types are specified in sig.rkt 16 | 17 | |# 18 | (define raw-misc 19 | `( 20 | ("Happy Happy Joy Joy" 21 | ((5) (9) (2 7) (4 8) (4 7) (6 7) (7 7) (7 6) (7 5) (5 1 4) (4 2 3) (2 4 1) (9) (5)) 22 | ((4) (8) (10) (12) (1 8 1) (2 5 2) (4 3 3) (5 4) (7 5) (8 3) (9 1) (10 1) (10) (8) (4))) 23 | 24 | ; ("Ieleuj" 25 | ; ((1) (1) (2) (1) (1) (2) (1) (1) (1 2) (5) (3) (1) (1) (1 3) (4 2) (3) (1) (1 1) (1 3) (4 1 3) (2 2 2) (6) (1) (1) (1 1) (1 1 2) (3 1 3) (4 1 3) (6) (3) (1) (1 1) (3 1 3) (2 1 1 1 2) (2 1 1 1 2) (5 3 1) (2 1 2) (9) (3 1 1) (1) (1 1 1) (2 1 2) (3 1 1 1 3) (2 1 1 1 2) (1 4 1 4 1) (2 1 2) (9) (3 1 3) (1) (1) (1) (1) (1)) 26 | ; ((1) (1 2) (2 2) (1 1 2 1) (1 1 1 2) (1 1 1 1 2 2 2 2) (3 1 2 1 2 2 1 1 1 1) (7 2 1 1 1 2 1 2) (7 2 3 4 4) (2 7 2 4 4) (1 2 11 1 1) (2 2 1 21) (1 3 2 1 1 1) (2 2 5 4) (2 2 2 4) (2 2 1 2 1 2) (2 2 1 1) (1 1 2) (2 2) (2 1) (2 2) (2) (1))) 27 | 28 | ; ("John " 29 | ; ((15 16) (9 2 1 2 14) (6 1 2 2 1 2 12) (9 2 1 1 1 13) (4 1 1 2 2 1 1 1 11) (5 2 1 1 1 1 1 1 10) (4 2 1 1 2 1 1 2 10) (3 1 1 2 2 1 1 1 1 1 4 3) (2 3 2 2 4 1 1 1 1 1 4) (1 1 1 2 2 3 2 1 1 1 1 2 2) (1 2 1 6 2 2 1 6 3) (2 1 3 8 1 3 1 2 2) (1 1 2 1 2 2 2 1 2 5 3) (2 1 1 10 1 10) (1 1 1 2 1 1 1 2 2 2 2 1) (2 2 2 2 1 2 1 1 6 2) (1 1 1 1 1 3 1 2 1 1 1 3) (1 1 3 1 1 1 2 1 1 2 2 1 1) (3 1 3 2 1 1 1 2 2 2 1) (1 2 2 2 2 2 1 1 1 1 1 2) (1 1 2 2 3 2 1 1 2 2 1 1) (2 2 2 3 4 4 2 4) (1 2 1 4 2 1 2 1 2 1 1) (3 3 1 2 4 10) (1 1 1 1 7 1 2 1 1 1) (2 3 1 1 1 9 5) (1 2 2 1 2 1 2 5 1) (1 1 2 1 1 1 1 2 1 1 1 2) (2 1 1 2 1 1 1 3 2 1 1) (1 1 2 1 2 2 1 1 2 1) (1 1 1 1 1 1 2 2 1 1 1) (2 1 1 2 1 1 2 1 1 1) (1 1 2 1 1 1 1 1 2 1 1 1)) 30 | ; ((11 1 1 1 3 4 4) (9 1 4 2 1 1 1 1 1) (8 5 2 1 3 5 1) (7 1 1 3 2 3 2 1) (4 1 3 3 1 1 3 2 4 1) (5 1 1 1 1 1 3 1 2 1 1 1 2) (2 1 3 1 1 1 1 1 1 1 2 1 1 1) (6 5 3 6 3 1 2) (2 1 3 2 2 2 1 1 1 1 2) (1 1 2 1 2 2 2 2 8 1) (5 1 6 1 1 4 1 3) (2 1 1 2 2 2 1 1 2 7 1) (1 1 1 2 5 6 3 1 2) (5 1 2 4 1 1 2 2 4 1) (1 1 5 1 1 2 2 4 1 1) (4 1 1 8 5 1 2 3) (2 1 3 3 2 1 5 2) (1 3 1 3 5 1 2 2 1 2) (3 1 2 1 1 1 1 2 2 2 4 1) (2 2 1 1 1 1 1 1 2 4 1 1) (4 4 1 1 1 1 2 3 3 2 1) (5 1 5 2 2 1 2 2 1) (9 2 1 3 2 3 3 1) (7 7 1 3 2 1) (9 1 10 3 2) (8 5 1 1 1 2 1 1 1) (9 1 5 2 1 4) (8 6 3 4 1) (7 2 1 1 2 1 1 1 1) (9 1 4 5 1) (14) (13))) 31 | 32 | ; ("buff" 33 | ; ((2 3 3) (2 2 2 2 2) (2 2 2) (5 2 2 2 2) (2 4 7 5) (2 4 2 2 2) (2 4 2 2 2) (2 4 3 2 2) (5 5 2 2)) 34 | ; ((9) (9) (1 1) (1 1) (6) (4) (5) (6) (1) (2) (6) (6) (1) (8) (9) (1 1) (2 1) (1) (1) (8) (9) (1 1) (2 1) (1))) 35 | 36 | ("Solver Breaker" 37 | ((1) (2 2) (1) (2) (2 2) (1)) 38 | ((1) (2 2) (1 1) (1) (2 2) (1))) 39 | 40 | ) 41 | ) 42 | -------------------------------------------------------------------------------- /paint-by-numbers/raw-problems/raw-problems.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | #| 4 | 5 | raw-problems.rkt 6 | 7 | This file contains the built-in problems in a raw format. 8 | This file should contain a single sexpression of this 9 | type: 10 | 11 | (listof (list string cols rows)) 12 | 13 | The cols and rows types are specified in sig.rkt 14 | 15 | |# 16 | 17 | (provide raw-problems) 18 | (define raw-problems 19 | `( 20 | 21 | ("Izay (1)" 22 | ((2) (1 1) (4) (2 1) (3 1) (8) (8) (7) (5) (3)) 23 | ((1) (2) (1 6) (9) (6) (5) (5) (4) (3) (4))) 24 | ("Oam (2)" 25 | ((1) (2 3 1) (9) (8) (8) 26 | (3 2 1) (6 6) (9 4) (11 2) (13) 27 | (2 10) (7 11) (8 5 5) (8 4 3) (8 4 2) 28 | (2 5 5) (1 4 2 3 2) (2 1 4 2) (9 3) (7)) 29 | ((5) (9) (7 2) (3 6 2) (3 6 2) 30 | (4 6 2) (4 6 2) (5 4 2) (6 1 2) (11 2) 31 | (14 2) (6 10) (6 10) (3 2 4 4) (8 2 2) 32 | (8 3 2) (4 2 3) (5 3 2) (2 4 2) (3))) 33 | ("Izuoh (3)" 34 | ((2) (3) (3) (2) (2) 35 | (2) (4 2) (6 2) (6 3) (1 2 1 6) 36 | (2 2 9) (1 1 7) (1 1 5) (3 1 2) (2 6) 37 | (11) (13) (13) (4 10 2) (4 10 4) 38 | (4 10 4) (4 10 4) (4 9 4) (4 9 4) (3 8 3) 39 | (3 11 3) (3 3 2 3) (5 5 4 2) (3 1 10 4) (3 1 8 5)) 40 | ((3) (5) (7) (7) (6 3) 41 | (6) (7 3) (7 5) (12 5) (3 1 1 3 5 1 3) 42 | (4 1 11 3) (4 12 2) (3 1 13 2) (19 3) (12 3) 43 | (16 2) (16 1) (3 12 2) (4 6 4) (4 1 8) 44 | (3 8 2) (4 8 1) (10 6) (11 3) (3))) 45 | ("Ijgnog (4)" 46 | ((4) (5) (2 3) (2 6) (5 5) 47 | (6 5) (7 5) (8 8) (2 5 10) (2 6 12) 48 | (2 16 3) (1 2 14 3) (1 2 1 12 2) (1 1 2 11 2) (1 1 13 3) 49 | (1 1 1 3 5 4) (1 1 1 1 1 10) (1 1 1 1 8) (2 1 2 3) (1 2 2) 50 | (1 2 2) (1 1) (1 1) (3 1) (4)) 51 | ((11) (7 3) (5 8) (10) (7 6) 52 | (11) (7 4) (9) (9) (5) 53 | (8) (9) (12 1) (16) (10 1) 54 | (8 5 1) (8 9) (9 4 1) (2 10 3 1) (10 4) 55 | (16) (2 10) (4 5) (2) (1))) 56 | ("Uhib (5)" 57 | ((4) (5) (3 1) (5 1 2) (4 1 1) 58 | (4 5) (4 3) (6 1) (15) (17) 59 | (19) (3 19 4) (15 6 2) (7 8 6 5) (2 3 2 1) 60 | (2 2 2 2) (1 8 2) (4 3 2) (8 2 1 3) (2 4 1 4) 61 | (2 4 4) (1 12) (1 9) (1 7) (1)) 62 | ((1 1) (1 1 2 5) (5 2) (4 3 2) (7 2 1) 63 | (11 2 2) (2 11 2) (4 7 2) (2 6 3) (7 2) 64 | (4 6 3) (9 3) (4 6 2) (1 1 6 3) (1 6 1 3) 65 | (6 1 1 3) (6 3 3) (4 2 3) (6 4 3) (7 1 3) 66 | (8 4) (8 4) (4 4) (11) (1 6) 67 | (2) (5) (1 1 1) (1 1) (1 1))) 68 | ("Isaniew (6)" 69 | ((4 1) (7 2) (3 6) (2 3) (2 4) 70 | (5) (7) (7) (3 3) (2 2 2) 71 | (1 2 4) (3 2 2) (2 3 2) (3 2) (4 2) 72 | (3 2) (2 2) (2 1 1) (3 2) (3 2) 73 | (3 1) (3 2) (5 3 1 4) (7 2 1 7) (8 3 1 10) 74 | (7 2 1 10) (2 3 2 2 4 4) (2 2 2 2 3) (4 4 5) (13)) 75 | ((3) (5) (3 2) (4 1) (5 1) 76 | (5 2) (4 1) (3 1 1) (1 2 1) (3 2) 77 | (7 5 3) (2 5 2 11 3) (4 4 2 10 1 2) (8 2 4 3 5 1) (2 4 1 4 2 2 1 1) 78 | (4 4 3 2 4 2 1) (4 5 3 3 4 2) (4 7 5 2) (1 1 3 5 1) (1 1 5 1) 79 | (2 4 2) (2 5) (5) (3) (3))) 80 | 81 | ) 82 | ) 83 | -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/directory: -------------------------------------------------------------------------------- 1 | ("games" 2 | "misc" 3 | "h1-30" 4 | "h31-60" 5 | "h61-90" 6 | "h91-120" 7 | "h121-138" 8 | "k15x15" 9 | "k15x20" 10 | "k15x25" 11 | "k20x15" 12 | "k20x20" 13 | "k20x25" 14 | "k20x30" 15 | "k25x15" 16 | "k25x20" 17 | "k25x25" 18 | "k25x30" 19 | "k25x35" 20 | "k30x20" 21 | "k30x25" 22 | "k30x30" 23 | "k30x35" 24 | "k30x40" 25 | "k35x25" 26 | "k35x30" 27 | "k35x35" 28 | "k35x40" 29 | "k40x30" 30 | "k40x35" 31 | "k40x40") 32 | -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/games: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Games Magazine") (define problems (list (make-problem "Izay (1)" (quote ((2) (1 1) (4) (2 1) (3 1) (8) (8) (7) (5) (3))) (quote ((1) (2) (1 6) (9) (6) (5) (5) (4) (3) (4))) (quote #f)) (make-problem "Oam (2)" (quote ((1) (2 3 1) (9) (8) (8) (3 2 1) (6 6) (9 4) (11 2) (13) (2 10) (7 11) (8 5 5) (8 4 3) (8 4 2) (2 5 5) (1 4 2 3 2) (2 1 4 2) (9 3) (7))) (quote ((5) (9) (7 2) (3 6 2) (3 6 2) (4 6 2) (4 6 2) (5 4 2) (6 1 2) (11 2) (14 2) (6 10) (6 10) (3 2 4 4) (8 2 2) (8 3 2) (4 2 3) (5 3 2) (2 4 2) (3))) (quote #f)) (make-problem "Izuoh (3)" (quote ((2) (3) (3) (2) (2) (2) (4 2) (6 2) (6 3) (1 2 1 6) (2 2 9) (1 1 7) (1 1 5) (3 1 2) (2 6) (11) (13) (13) (4 10 2) (4 10 4) (4 10 4) (4 10 4) (4 9 4) (4 9 4) (3 8 3) (3 11 3) (3 3 2 3) (5 5 4 2) (3 1 10 4) (3 1 8 5))) (quote ((3) (5) (7) (7) (6 3) (6) (7 3) (7 5) (12 5) (3 1 1 3 5 1 3) (4 1 11 3) (4 12 2) (3 1 13 2) (19 3) (12 3) (16 2) (16 1) (3 12 2) (4 6 4) (4 1 8) (3 8 2) (4 8 1) (10 6) (11 3) (3))) (quote #f)) (make-problem "Ijgnog (4)" (quote ((4) (5) (2 3) (2 6) (5 5) (6 5) (7 5) (8 8) (2 5 10) (2 6 12) (2 16 3) (1 2 14 3) (1 2 1 12 2) (1 1 2 11 2) (1 1 13 3) (1 1 1 3 5 4) (1 1 1 1 1 10) (1 1 1 1 8) (2 1 2 3) (1 2 2) (1 2 2) (1 1) (1 1) (3 1) (4))) (quote ((11) (7 3) (5 8) (10) (7 6) (11) (7 4) (9) (9) (5) (8) (9) (12 1) (16) (10 1) (8 5 1) (8 9) (9 4 1) (2 10 3 1) (10 4) (16) (2 10) (4 5) (2) (1))) (quote #f)) (make-problem "Uhib (5)" (quote ((4) (5) (3 1) (5 1 2) (4 1 1) (4 5) (4 3) (6 1) (15) (17) (19) (3 19 4) (15 6 2) (7 8 6 5) (2 3 2 1) (2 2 2 2) (1 8 2) (4 3 2) (8 2 1 3) (2 4 1 4) (2 4 4) (1 12) (1 9) (1 7) (1))) (quote ((1 1) (1 1 2 5) (5 2) (4 3 2) (7 2 1) (11 2 2) (2 11 2) (4 7 2) (2 6 3) (7 2) (4 6 3) (9 3) (4 6 2) (1 1 6 3) (1 6 1 3) (6 1 1 3) (6 3 3) (4 2 3) (6 4 3) (7 1 3) (8 4) (8 4) (4 4) (11) (1 6) (2) (5) (1 1 1) (1 1) (1 1))) (quote #f)) (make-problem "Isaniew (6)" (quote ((4 1) (7 2) (3 6) (2 3) (2 4) (5) (7) (7) (3 3) (2 2 2) (1 2 4) (3 2 2) (2 3 2) (3 2) (4 2) (3 2) (2 2) (2 1 1) (3 2) (3 2) (3 1) (3 2) (5 3 1 4) (7 2 1 7) (8 3 1 10) (7 2 1 10) (2 3 2 2 4 4) (2 2 2 2 3) (4 4 5) (13))) (quote ((3) (5) (3 2) (4 1) (5 1) (5 2) (4 1) (3 1 1) (1 2 1) (3 2) (7 5 3) (2 5 2 11 3) (4 4 2 10 1 2) (8 2 4 3 5 1) (2 4 1 4 2 2 1 1) (4 4 3 2 4 2 1) (4 5 3 3 4 2) (4 7 5 2) (1 1 3 5 1) (1 1 5 1) (2 4 2) (2 5) (5) (3) (3))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k15x20: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 15x20") (define problems (list (make-problem "19990127aLLO (1)" (quote ((6 2) (1 1 6) (1 1 2 2) (2 2 1 1) (1 2 1) (6 1 4 1) (1 1 1 1 1) (1 1 1 1) (3 1 1 1 1 1) (1 1 1 1) (5 1 1 1 1) (1 1 1 1 1 1) (3 1 1 1 1) (1 1 1 1) (1 1 1 1 1 1) (6 1 1 1) (1 1 1 1 1) (1 2 2 1) (5 4 1) (1 1 2 1))) (quote ((4 2 1 1 3 2) (1 1 1 1 1 1 1) (1 1 1 3 1 1) (1 1 1 1 1 3) (1 1 1 1 3 1 1) (4 1 3) () (16) (2 2) (1 10 2) (2 2 2) (2 2 2) (1 13) (2) (18))) (quote #f)) (make-problem "19990127bLLO (2)" (quote ((3) (5) (7) (1 7) (2 4) (7) (5) (5) (5) (8) (6 2) (2 3 1 1) (2 2 2) (8) (5) (5) (5) (7) (7) (5))) (quote ((1) (3) (2 2) (2 3 1) (1 2 3 1 2) (3 15) (4 6 8) (4 5 1 7) (11 8) (19) (4 2) (2) () () ())) (quote #f)) (make-problem "19990421bMIJ (3)" (quote (() (1 1 1) (2 2) (1 1 1) (2 1) (1 1) (1 1) (1) (1) (1 1 1 1) (3 1 3) (3 4) (1 3) (1 2) (1 1 1) (2 1 1) (2 1) (1 1) (15) (15))) (quote ((2) (1 2) (3 1 2) (10) (3 1 2) (5 1 2) (1 1 1 2) (1 1 13) (1 1 3 2) (5 3 2) (2 2) (2 2) (2) (2) (2))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k15x25: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 15x25") (define problems (list (make-problem "19990804aVAC (1)" (quote ((3) (4) (4 4) (7 3) (7 3) (2 2 2) (1 2) (4 2) (7) (8) (2 1 3) (1 2) (2 2) (2 2) (1 1 1 2) (1 1 1 2) (1 1 1 1 2) (6 2 1) (1 1 1 4) (1 3 1 4) (1 1 3 1) (1 6 2) (1 4 2) (1 2 2) (1 2))) (quote ((2 5) (3 1 1) (4 6 1 1) (3 4 3 1 1) (3 2 1 1 2 1) (4 2 6 3) (7 3) (4 3 1) (3 3 3 1) (2 3 1 1) (3 3 2) (5 14 2) (7 10 1) (4 3) (3))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k20x15: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 20x15") (define problems (list (make-problem "19990524-KHO (1)" (quote ((1) (2 2 1) (1 1 2) (3 1) (5 2) (3 3 1) (8 1) (19) (1 14) (1 13) (13) (2 1 1 3 3) (4 1 1 2 2) (4 1 1 1 1) (2 1 1 2 2))) (quote ((2) (3 1 4) (1 4 4) (1 4 2) (3 2) (6 1) (12) (1 7 1) (1 8) (4) (4) (4) (5) (6 1) (8) (4) (6 1) (3 8) (3 5) (4))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k20x25: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 20x25") (define problems (list (make-problem "19980620-KKA (1)" (quote (() (1) (3) () () () () (1) (2) (1) (2) (2) (2 1 1) (2 3 2) (1 2 4 1 1) (1 2 1 1 2 1) (1 1 2 2 1 1 2) (1 4 1 4 4) (20) () (11 1 3 1) (1 1 1 1 1 1 1 1) (1 3 1 2 1 3 1) (1 1 1 1 1 1 1) (1 3 1 1 1 1 3 1))) (quote ((1 1) (5 5) (1 1) (5 5) (1 2 2 1 1 1) (2 2 1 1 1) (6 1) (1 1 1 1 5) (2 2 1 1 1) (1 4 2 3 5) (4 2 1 1 1) (1 2 1 2) (3) (3 2 5) (2 4) (1 3 1) (5 1 1 1) (3 1 3) (2) (2 3 1))) (quote #f)) (make-problem "19991113cBAR (2)" (quote ((3 1 2 1) (2 3 2 3 2) (17 1) (19) (19) (12 7) (8 2 1 5) (4 1 5) (3 4) (6 7) (2 3 3 4) (3 2 2 4) (4 5) (4 6) (5 3 6) (4 5 6) (5 1 6) (4 5 5) (4 3 3 3) (2 3) (5 6) (8 7) (17) (13 1) (1 2 3 3))) (quote ((1 5 4 3 1) (21) (23) (7 1 7 5) (5 1 3 4) (7 2 1 4) (8 2 1 4) (7 2 1 2 3) (4 2 1 4) (7 4 3) (6 2 1 3) (4 2 1 2 3) (5 2 1 4) (7 2 1 5) (5 1 4 5) (8 7 3) (24) (22) (18) (1 4 2 6))) (quote #f)) (make-problem "19991113gBAR (3)" (quote (() () (4 4) (8 6) (14 3) (3 7 2) (3 5 2) (6 2) (6 2) (6 3) (6 4) (8 4) (14) (14) (10 3) (14) (16) (18) (3 14) (3 14) (4 13) (4 11) (3 9) (12) (10))) (quote ((2 4) (3 6) (3 9) (4 5 4) (4 8 4) (4 10 2) (2 16 2) (3 18) (21) (21) (21) (21) (3 3 10) (3 13) (3 12) (2 12) (2 4 6) (3 4 4) (9) (7))) (quote #f)) (make-problem "19991115cBAR (4)" (quote ((8 9) (8 8) (4 2 5 1) (4 2 3 1) (4 2 2 1) (1 2 1 1 2) (1 3 1 3) (1 1 3) (1 1 3 2 1) (2 5 1 1) (4 2 4 1) (2 2 4 2 2) (1 1 5 3) (4 2 5) (2 4 4) (1 2 5 2) (4 3 1) (2 1 1 1) (1 2 2 1) (1 2 1 2 1) (2 1 1 4) (5 1 4) (4 2 4) (4 4 5) (5 7 5))) (quote ((13 10) (5 3 2 5) (5 1 1 4) (6 1 1 4) (2 2 1 1 2 1) (2 1 1 1 1) (3 2 1 1) (4 1 5 1 1) (2 3 3 2 2) (2 2 3 2 2) (9 3) (1 3 1 3 7) (3 7 2 1) (7 5) (5) (4 2 1 2 2) (3 1 2 6) (2 2 3 5) (2 3 5 5) (18 6))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k20x30: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 20x30") (define problems (list (make-problem "19991007aKHO (1)" (quote ((1 1 1 1 1) (1 5 1) (8 2) (8) (8) (2 2) (1 1) (2 2) (1 6 1) (2 8 2) (1 1) (1 2 2 1) (1 1 1 1 1 1) (1 4 4 1) (3 4 4 3) (1 1 1 1 1 1 1 1) (1 1 2 2 2 1 1) (2 1 4 1 2) (3 4 3) (1 4 1) (1 2 1) (2 2) (14) (2 2) (1 2 4 2 1) (1 6 1) (1 1) (14) (5 5) (7 7))) (quote ((3) (1 2 1) (1 1 2) (21) (1 3 3 3) (2 3 4 1 1 3) (4 1 1 2 1 1 1 3) (1 3 2 1 2 1 1 1 1 1) (4 2 4 3 1 2 1) (5 2 5 1 2 1) (4 2 5 1 2 1) (5 2 4 3 1 2 1) (4 2 1 2 1 1 1 1 1) (1 3 1 1 2 1 1 1 3) (1 3 4 1 1 3) (2 3 3 3) (21) (1 1 2) (1 2 1) (3))) (quote #f)) (make-problem "19991007bKHO (2)" (quote ((20) (1 1) (1 16 1) (1 16 1) (1 2 2 1) (1 2 2 1) (1 5 2 1) (1 2 6 1) (1 2 1 1 2 1) (1 2 3 2 1) (1 2 1 1 2 1) (1 3 1 1 1 1 1 2 1) (1 2 1 1 1 1 1 3 1) (1 16 1) (1 16 1) (1 1) (1 6 1) (1 2 1) (1 2 4 1) (1 2 2 4 1) (1 6 4 2 1) (1 6 4 1) (1 2 2 1) (1 2 1) (1 1 1 1) (1 1 1 1 1) (1 2 2 1 1 1) (1 1 1 1 1) (1 1 1 1) (20))) (quote ((30) (1 1) (1 13 2 1) (1 13 2 1) (1 2 1 1 2 6 1) (1 2 1 3 6 1) (1 2 1 1 1 2 2 1 1) (1 2 1 3 1 2 1 1) (1 2 4 2 1 1) (1 2 1 3 1 1 1) (1 2 2 2 1 2 1 1) (1 2 3 1 4 1) (1 2 1 1 2 1 4 1) (1 2 1 3 2 1 1 1) (1 2 1 1 2 2 1 1 2) (1 2 1 3 4 1 1 1) (1 13 4 1 1 2) (1 13 2 1 1 1) (1 1) (30))) (quote #f)) (make-problem "19991113bBAR (3)" (quote ((6) (8) (10) (3 8) (1 2 1) (12) (1 1 1 3) (1 6 1) (1 2) (1 4 1) (3 2 4) (5 6) (7 8) (19) (4 10 3) (4 11 3) (17 1) (2 14 1) (1 2 1 1 1 1) (3 15) (14) (14) (13) (11) (4 5) (1 1 2 1) (4 4) (5 5) (6 6) (6 6))) (quote ((5) (5 1) (5 1) (3 6 1) (1 1 5 6) (4 7 3 4 2) (2 3 8 5 3) (4 1 1 7 11) (4 3 1 6 6 4) (4 1 1 2 5 6 4) (4 1 1 2 17) (4 3 1 5 5) (4 1 1 14) (3 2 7 11) (5 10 6 4) (3 8 6 4) (4 2 11) (6 6 3) (5 1 2) (7))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k25x15: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 25x15") (define problems (list (make-problem "19990709-DAH (1)" (quote ((25) (1 1) (1 3 1) (1 3 1 3 1) (1 3 1 1 1 1) (1 1 1 1 1 1) (1 1 1 1 1 1) (1 1 1 3 1 1) (1 1 3 4 3 1) (1 3 4 4 4 1) (1 4 4 2 4 1) (1 4 2 2 1) (1 2 1) (1 1) (25))) (quote ((15) (1 1) (1 2 1) (1 4 1) (1 4 1) (1 8 1) (1 1 1) (1 1 2 1) (1 1 4 1) (1 1 4 1) (1 8 1) (1 1) (1 1) (1 2 1) (1 4 1) (1 4 1) (1 8 1) (1 1 1) (1 1 2 1) (1 1 4 1) (1 1 4 1) (1 8 1) (1 1) (1 1) (15))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k25x20: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 25x20") (define problems (list (make-problem "19980410-GOS (1)" (quote (() (9) (3 1 4 3) (4 2 1 3 4) (2 1 11 4) (4 2 3 2 1 1) (1 1 2 1 3 1 2 1 1) (2 1 2 3 2 5) (5 5 5 1 1) (3 1 4 3 2 1 1 1) (5 4 3 4 5) (1 4 1 4 2) (1 1 2 1 1 1 2 2 1) (2 1 2 3 3 2 4) (3 3 1 1 1 3 3) (3 1 1 1 3) (2 3 2) (2 2) (7) ())) (quote ((7) (6 2) (2 3 1) (3 1 5) (1 7) (3 4) (2 11) (1 7 3) (1 2 3 1 3) (4 1 3 1 2) (1 1 1 3 1) (1 4 2 1 1 1) (7 4 3 1) (2 4 2 1 1 1) (4 1 3 1) (4 1 3 1 2) (1 2 3 1 3) (1 5 1 3) (2 11) (3 4) (9) (2 1 5) (1 1 1 3) (3 2 2) (7))) (quote #f)) (make-problem "19981116-JAM (2)" (quote ((10) (17) (4 9 3) (4 2 7 2 3) (3 4 5 3 4) (3 4 5 3 4) (4 4 5 3 4) (4 2 5 2 5) (5 6 6) (6 4 2 7) (12 11) (11 10) (10 9) (5 6 5 5) (5 13 4) (4 15 3) (1 1 13 1 1) (5 11 5) (5 5) (8 7))) (quote ((10) (15) (14 2) (14 3) (3 7 4) (2 3 4 1 3) (1 4 7 2) (1 5 8 1) (3 4 9 1) (4 10 1) (12 5 1) (11 5) (9 4) (9 4 1) (11 5 1) (4 3 5 1) (3 3 8 1) (2 5 8 1) (1 5 8 2) (2 5 1 3) (14 3) (14 2) (13 2) (14) (7))) (quote #f)) (make-problem "19981119-MSS (3)" (quote ((3 1 3 1 1 1 1 1) (1 1 1 1 1 2 1 1 1 1) (1 1 1 3 1 2 1 1) (1 1 1 1 1 1 1 1 2) () (3) (2 3) (2 2 3) (1 2 2 3) (1 2 2 3) (4 3 1 2) (1) (8 1) (16) (25) (24) (21) (16) (11) (4))) (quote ((1 1 4) (4 1 4) (1 1 4) (3 5) (4 5) (4 5) (1 4 5) (4 1 6) (1 4 5) (4 5) (3 1 5) (1 1 5 5) (3 5 6) (5 6) (4 1 6) (1 9) (1 5) (4 5) (6) (4 6) (6) (2 6) (1 1 5) (1 1 3) (1))) (quote #f)) (make-problem "19990126bLLO (4)" (quote ((2 2 1) (3 7) (6 2 2 5) (6 4 4 2) (4 4 1) (3 2 2 1) (2 3 2) (1 2 3) (1 3 2) (3 2 3) (5 1 3) (7 2) (7 2) (7 2) (5 2) (25) (3) (20 3) (3) (18 2))) (quote ((1 1 1) (1 1 1 1) (2 1 1 1) (3 1 1 1) (3 3 1 1 1) (2 6 1 1) (2 7 1 1) (1 7 1 1) (1 7 1 1) (6 1 1) (3 3 1 1 1) (2 1 1 1) (2 1 1 1) (3 1 1 1) (3 1 1 1) (3 3 1 1 1) (1 1 4 1 1 1) (3 5 1 1 1) (7 1 1) (1 2 1 1) (8 1) (4 6 5) (2 13) (1 2 10) (4 1))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k25x25: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 25x25") (define problems (list (make-problem "19980522-SDN (1)" (quote ((1 1) (1 1 1) (1 1 3) (3 3) (1 1 3) (1 1 5) (5) (7) (7) (9) (11) (15) (17) (19) (19) (19) (17) (15) (11) (7 1) (1 1 1) (3 1 1) (5 3) (9 1 1) (9 1 1))) (quote (() (5) (1 1) (5 3) (5) (7) (7) (9) (10 2) (13 2) (15 3) (18 4) (25) (18 4) (15 3) (13 2) (10 2) (9) (7) (7) (5) (3) (5) (1 1) (5))) (quote #f)) (make-problem "19980909-YEN (2)" (quote ((10 10) (8 5 8) (5 9 5) (4 7 4 4) (3 7 4 3) (2 7 3 2) (2 8 4 2) (2 9 5 2) (1 16 1) (1 15 1) (14) (12) (11) (9) (7) (1 5 1) (1 4 1) (2 3 1 2) (2 3 3 2) (2 3 5 2) (3 2 3 3) (4 2 1 4) (5 5) (8 8) (10 10))) (quote ((10 10) (8 5 8) (5 9 5) (4 15 4) (3 17 3) (2 19 2) (2 13 1 2) (2 12 2) (1 12 1) (1 12 1) (4 7 1) (3 6 3) (2 4 5) (3 4 3) (4 5 1) (1 8 1) (1 8 1) (2 5 2) (2 2) (2 2) (3 3) (4 4) (5 5) (8 8) (10 10))) (quote #f)) (make-problem "19990924-VAL (3)" (quote (() () (1) (1) (1) (10) (12) (6 3 3) (3 2 1 1 1 2) (2 1 1 1 1 2 1) (1 3 3 4) (6 7) (7 2 4) (2 7 2 1) (2 10 1) (6 8) (5 7) (2 7 2) (1 7 1) (11) (4 4) (4 4) (2 6) (1 5) (5))) (quote (() () () () () (3 4) (3 7) (3 3 5) (3 8 4) (4 14) (5 11 1) (3 5 8) (4 3 7 3) (1 3 15) (5 14) (3 2 10) (2 9 4) (3 11) (3 3 3) (3 5) () () () () ())) (quote #f)) (make-problem "19991020aSHE (4)" (quote ((20 2) (3 14 2) (2 11 2) (1 9 3) (2 9 3) (3 9 4) (12 4) (8 5) (7 6) (6 7) (5 8) (5 9) (7 9) (7 6) (7 4) (3 2 3) (2 4 3) (3 3 3) (1 6) (2 6) (1 6) (2 1 6) (2 1 8) (1 11) (13))) (quote ((25) (3 14 1 2 1) (2 11 1 2) (1 9 3) (2 10 2) (3 6 3 3) (9 4 4) (8 2 3) (7 2 5) (7 9) (7 9) (7 7) (6 7) (5 5) (4 4) (3 3) (2 6) (2 6) (1 6) (1 7) (7) (9) (10) (13) (13))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k25x30: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 25x30") (define problems (list (make-problem "19980714-GAS (1)" (quote (() (3) (4) (4) (5) (4) (3) (4 2 4) (8 8) (20) (21) (20) (20) (20) (19) (19) (19) (19) (20) (21) (21) (22) (22) (20) (18) (16) (14) (3 3) () ())) (quote (() (8) (13) (15) (17) (18) (20) (21) (21) (21) (19) (19) (4 18) (5 18) (5 19) (5 19) (4 21) (2 21) (21) (20) (6 8) (4 6) (2 4) (2) ())) (quote #f)) (make-problem "19980716cGAS (2)" (quote (() (7) (3 3) (2 3 2) (2 3 3 2) (1 2 2 1) (1 2 2 1) (1 1 1 1) (1 1 1 1) (1 1 7 1 1) (1 2 2 1) (3 3) (2 2) (2 5 2) (1 4 4 1) (2 5 5 2) (1 2 7 2 1) (1 3 5 3 1) (1 6 6 1) (1 5 5 1) (1 1 2 2 1 1) (1 5 5 1) (1 6 6 1) (2 3 5 3 2) (1 2 7 2 1) (2 5 5 2) (2 4 4 2) (2 5 2) (3 3) (9))) (quote (() () (9) (3 3) (2 2) (9 5 2) (2 1 4 4 2) (2 6 5 5 1) (1 2 1 2 7 2 2) (2 2 1 3 5 3 1) (1 1 1 6 6 1) (1 2 1 5 5 1) (1 1 1 1 2 2 1 1) (1 2 1 5 5 1) (1 1 1 6 6 1) (2 2 1 3 5 3 1) (1 2 1 2 7 2 2) (2 6 5 5 1) (2 1 4 4 2) (9 5 2) (2 2) (3 3) (9) () ())) (quote #f)) (make-problem "19980802-JON (3)" (quote (() (1) (3) (4) (4) (4) (3) (2) (7 6) (18) (20) (22) (21) (20) (19) (19) (19) (19) (19) (20) (21) (21) (21) (19) (19) (17) (15) (13) (4 4) ())) (quote (() (10) (13) (16) (18) (19) (20) (21) (21) (21) (21) (19) (19) (3 19) (25) (4 21) (4 21) (4 21) (2 20) (19) (5 7) (3 5) (1 2) () ())) (quote #f)) (make-problem "19990723-KHO (4)" (quote ((8 8) (6 6) (4 5 4) (3 7 3) (2 9 2) (1 6 1 1) (1 5 3 1) (4 4) (4 4) (2 4) (3) (3) (3 3) (5 5) (13) (15) (3 9 1) (3 9 3) (3 2 1 4) (3 1 2 3 3) (3 5 5 1) (3 11 1) (3 9 3) (1 3 7 3 1) (1 3 3 1) (2 11 2) (3 8 3) (4 4) (6 6) (8 8))) (quote ((7 7) (5 5) (4 4) (3 5 3) (2 7 2) (2 9 2) (1 3 3 1) (1 4 3 3 1 3 1) (6 6 3 3) (7 6 4 2) (7 7 5 2) (5 9 5 2) (4 5 5 4 2) (3 5 6 1 3 2) (3 4 6 5 2) (2 3 6 5 2) (2 4 1 3 2) (1 3 5 3 1) (1 2 4 3 1) (2 1 3 2 2) (2 1 3 2) (3 3) (4 4) (5 5) (7 7))) (quote #f)) (make-problem "19990920-LLO (5)" (quote ((6) (4 4) (3 3) (2 2) (2 2 2) (2 2 2) (1 2 1) (2 2 2) (1 2 1) (1 4 1) (22) (3 3) (22) (22) (1 1) (1 5 1) (2 2) (20) (12) (8 5) (4 7) (1 2 4 4) (1 2 3 3) (1 2 3 5) (1 2 3 3) (1 2 4 4) (1 2 7) (1 2 5) (1 2) (1 2))) (quote ((4 5) (3 4 2) (2 4 1) (2 4 1) (2 1 2 1) (1 1 2 2) (2 1 1 2 2) (1 2 1 2 3) (2 2 1 2 3) (2 2 2 2 13) (1 4 2 4) (1 3 2 13) (2 2 2 13) (2 1 2 3) (1 1 2 1 3) (2 1 2 1 2) (1 1 2 1 2 5) (2 1 2 1 1 7) (2 4 1 1 9) (2 4 1 3 3) (3 4 2 2 1 2) (4 5 3 1 3) (9) (7) (5))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k25x35: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 25x35") (define problems (list (make-problem "19981015bGAS (1)" (quote (() (21) (1 1) (1 15 1) (1 1 1 1) (1 1 1 1) (1 15 1) (1 1) (1 1) (1 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1) (1 3 3 3 3 1) (1 1) (1 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1) (1 3 3 3 3 1) (1 1) (1 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1) (1 3 3 3 3 1) (1 1) (1 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1) (1 3 3 3 3 1) (1 1) (1 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1) (1 3 3 3 1 1 1) (1 1 1 1) (1 7 3 1 1 1) (1 1 1 1 1 1 1 1) (1 7 3 3 1) (1 1) (21) ())) (quote (() () (33) (1 1) (1 1) (1 4 3 3 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 3 3 3 3 3 1 1 1) (1 1 1 1 1 1) (1 1 1 3 3 3 3 3 1 1 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 3 3 3 3 3 3 1) (1 1 1 1) (1 1 1 3 3 3 3 3 3 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 1 1 3 3 3 3 3 3 1) (1 1 1 1) (1 1 1 3 3 3 3 7 1) (1 1 1 1 1 1 1 1 1 1 1 1 1 1) (1 4 3 3 3 3 7 1) (1 1) (1 1) (33) () ())) (quote #f)) (make-problem "19990527dDRA (2)" (quote ((25) (25) (20 2) (8 7 2) (7 1 1 1 5 1) (6 1 1 1 4 1) (5 1 1 1 1 1 2) (5 1 1 1 1 1 2) (5 1 1 1 1 1 2) (5 1 1 1 1 1 2 1 1) (5 1 1 1 1 1 2 2 2) (5 1 1 1 1 1 4 2) (5 1 1 1 1 1 5 3) (5 1 1 1 1 1 5 3) (5 1 1 1 1 1 5 3) (5 1 1 1 5 3) (4 4 1 1 5 3) (3 8 5 3) (2 12 5 3) (1 12 5 3) (1 8 1 5 3) (1 3 4 2 5 3) (1 3 2 3 5 3) (1 3 5 3 5 3) (1 3 5 3 5 3) (1 3 5 3 5 3) (1 9 3 4 2) (1 9 3 3 1) (1 9 13) (1 9 13) (11 13) (11 13) (11 13) (25) (25))) (quote ((35) (19 5) (18 1 14) (17 2 14) (16 3 14) (6 5 9) (5 9 5 13) (4 5 13) (3 11 6 12) (3 5 12) (3 12 5 12) (3 5 2) (3 13 3 13) (4 2 14) (5 11 1 15) (6 7) (35) (35) (6 24) (4 18 7) (2 1 14 7) (2 7) (2 1 14 7) (4 18 7) (6 24))) (quote #f)) (make-problem "19990607bDRA (3)" (quote (() (4 1 1 4 1 1) (1 1 1 1 1 2 1) (4 1 1 1 4 1 1 1) (1 2 2 1 1 1 2) (4 1 1 1 1 1 1) () () () () () (3) (2 2) (7) (3) (3) (3) (3) (3) (3) (3) (2 3) (2 2 4 3) (2 10 3) (12 1 3) (3 7 2 3) (3 4 8) (4 8) (15) (13) (10) () () () ())) (quote (() () (3 1) (1 1 1 4) (1 1 1 5) (1 3 5) (4 4) (5 5 4) (1 3 4) (1 4 3) (1 5 3) (5 5 3) (3 5 3) (5 5 4 4) (1 1 1 4 2 5) (1 1 3 3 1 6) (5 2 3 7) (1 3 4) (5 1 3 4) (1 10) (1 8) (1 6) (5) () ())) (quote #f)) (make-problem "19991010cTPV (4)" (quote ((25) (3 1 1 9) (2 8) (2 8) (2 9) (3 3 10) (3 2 7) (3 2 6) (3 3 6) (3 2 7) (4 3 8) (5 2 5) (4 3 2 4) (4 2 3) (3 1 3) (3 4) (3 5) (2 7) (2 1 2 7) (2 2 4 8) (2 2 4 8) (2 6 7) (2 3 5) (2 3) (2 2 2) (2 1 3 2) (3 1 4 2) (3 3 1 4 2) (4 4 1 3 3) (5 5 2 4) (6 5 9) (7 5 9) (8 3 10) (10 11) (25))) (quote ((35) (35) (2 12 9) (1 4 7) (1 1 6) (1 5) (2 2 4) (1 2 3) (1 1 2 2) (1 2 1 2) (1 2 4 3 1) (1 5 5 1) (2 1 5 1 6 1) (1 2 3 7 1) (1 1 1 5 2) (1 1 1 1 1 3) (2 2 2 2 8) (6 2 2 2 6) (7 2 1 5 3 5) (11 2 5 4 5) (12 2 7 5 5) (13 8 4 6) (24 7) (35) (35))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k30x20: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 30x20") (define problems (list (make-problem "19981106-KVL (1)" (quote (() (1 1) (2 2) (8) (8) (2 2 2) (10 8) (15 6) (19 4) (21 2 1) (22 3) (28) (17 10) (3 10 3 4 2) (3 6 2 2 3 3) (3 5 3 4) (12 3 6) (9 2 4) () ())) (quote (() (3) (6) (8) (5 3) (7 2) (8 2) (8 2) (9 2) (9 2) (9 2) (9 2) (8 3) (8 3) (8 3) (7 3) (7 2) (7 1) (5 5) (11) (6 1) (4 5 1 2) (7 6 2) (3 3 5 2) (7 3 3) (7 3 2) (3 3 3 3) (7 7) (4 5) ())) (quote #f)) (make-problem "19990311-FRA (2)" (quote (() (2) (2) (2) (3) (4) (27) (27) (27) (4) (4 1) (4 1) (6 1 3) (3 1 1) (3 1 1 3 1 1 1) (1 3 1 1 2 1 3 1) (1 3 1 2 1 1 1) (1 1 1 3) (1 1 1) (1 3))) (quote (() (1) (8 1) (9 6) (10 1) (11) (2 3 1) (1 3) (3) (3) (3 6) (3 1 1) (3 3) (3) (3 1 3) (3 1 1 1) (3 5) (3) (3 4) (3 1) (3 1) (3 4) (3) (3 3 1) (3 1 1 1) (3 5) (3) (3 4 1) (3) ())) (quote #f)) (make-problem "19990601cDRA (3)" (quote (() (3 1 3 1) (1 1 1 1) (2 1 2 3 1 2 1 1 2 3) (1 1 1 2 1 1 1 1 1 2) (1 1 1 3 1 1 2 2 1 1) () () (26) (2 2 7) (2 6 2 1) (9 1 1 1 2 1) (1 1 1 1 1 2 1) (1 2 2 1) (1 2 2 1) (1 1 1 1 1 1) (2 2 11 2 7) (2 2) () ())) (quote ((5) (1 1 1 6) (1 1 1 1) (1 1 1) (1 3 4 1 2) (4 1 2) (3 1 1 1) (1 1 1 1) (1 1 1) (3 1 2 1) (3 1 1 1) (1 1 1 4 1) (1 1 1) (3 1) (1 3 1) (5 1 1 1) (1 1 4 1) (3 1 1 1) (1 1 3 1) (3 1 2) (2 2 1 2) (1 2 1) (3 2 2 1) (2 2 1) (3 2 1) (1 1 3 1) (1 2 1) (5 4) (2 1) (2 1))) (quote #f)) (make-problem "19991106-BDH (4)" (quote ((7) (9) (6 3) (6 3) (13) (16) (1 13) (2 10) (3 7) (5 5 7) (23) (7 10 5) (7 8 6) (8 7) (25) (25) (25) (24) (22) (20))) (quote ((8) (12) (12) (12) (11) (10) (10) (1 7) (2 6) (4 6) (4 6) (4 6) (4 6) (4 6) (4 3 6) (7 4 6) (13 6) (12 6) (11 7) (20) (2 16) (2 16) (9 10) (7 8) (6 6) (3) (3) (2) (1) (1))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k30x25: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 30x25") (define problems (list (make-problem "19980715-GAS (1)" (quote ((30) (30) (30) (13 15) (12 14) (12 14) (12 14) (12 14) (12 14) (13 15) (13 12) (7 6) (4 3) (1 1) (1 2) (3 1 3 4) (3 3 4 3) (2 4 4 3) (2 3 3 2) (1 2 2 1 2) (1 1 1 1 3 1) (3 4 1) (4 5) () ())) (quote ((11 7) (11 4) (11 2) (12) (13) (14) (13 2) (13 3) (12 2) (12 1 1) (11 3) (11 4) (4 2 6) (3) (3) (4 2) (11 6) (11 5) (11 4) (11 2 1) (12 2) (12 3) (13 4) (13 3) (13) (12) (11 1) (10 3) (10 6) (10 9))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/k30x35: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Kajitani 30x35") (define problems (list (make-problem "19990507aJOJ (1)" (quote ((6 2 1 3 1 2 1 1 4) (5 1 1 1 4 1 1 1 1 3) (5 1 1 1 1 1 1 1 1 1) (4 1 1 1 1 1 2 1 1 1 3) (2 1 1 3 2 2 3 3 1) (1 2 18 2) (1 23) (2 21 2) (1 25) (3 22 2) (3 11 8 3) (2 10 7 2) (2 5 6 1) (1 5 2 2 5) (3 1 1 1 1 2) (2 1 1 1 1 1 1 1 1 1) (2 1 1 1 2 1 1 1 1) (2 1 2 4 2 1 1) (2 1 6 1 2) (1 3 6 3) (2 2 6 2 1) (3 2 2 4 2 2 1) (3 2 3 3 2 1) (4 2 5 5 2 2) (4 2 12 2 3) (3 4 6 3 3) (1 7 5 2) (3 4 3 2 1) (29) (1 8 2) (12 10) () (30) () (30))) (quote ((7 6 3 8 3 1 1) (5 1 4 5 6 2 1 1 1) (4 1 1 2 2 2 5 2 1 1 1) (4 1 1 4 2 2 3 1 1 1) (3 1 1 6 3 4 2 1 1 1 1) (1 1 8 1 6 1 1 1 1) (1 1 8 4 1 1 1 1) (1 1 8 1 2 1 1 1 1) (2 1 7 2 3 1 1 1) (1 8 2 3 1 1 1) (2 9 2 3 2 1 1 1) (1 8 1 1 2 2 1 1 1) (2 1 7 1 1 1 2 2 1 1) (2 7 1 1 3 3 2 1 1) (2 8 2 5 2 2 1 1) (2 5 6 2 2 1 1) (1 7 6 2 2 1 1) (9 2 5 2 2 1 1) (1 6 1 1 3 3 2 1 1) (1 8 1 1 1 2 2 1 1) (2 8 1 1 2 2 1 1 1) (1 9 2 3 2 1 1 1) (1 8 2 3 1 1 1) (1 10 2 2 1 1 1 1) (1 1 10 1 3 1 1 1 1) (1 1 8 1 4 1 1 1 1) (1 1 1 1 3 3 5 3 1 1 1) (2 1 1 1 1 3 4 2 2 1 1 1) (2 1 1 1 3 2 2 4 3 1 1) (3 1 1 4 4 8 2 1 1))) (quote #f))))) -------------------------------------------------------------------------------- /paint-by-numbers/solution-sets/misc: -------------------------------------------------------------------------------- 1 | (unit (import paint-by-numbers:problem^) (export paint-by-numbers:problem-set^) (define set-name "Misc") (define problems (list (make-problem "Happy Happy Joy Joy" (quote ((5) (9) (2 7) (4 8) (4 7) (6 7) (7 7) (7 6) (7 5) (5 1 4) (4 2 3) (2 4 1) (9) (5))) (quote ((4) (8) (10) (12) (1 8 1) (2 5 2) (4 3 3) (5 4) (7 5) (8 3) (9 1) (10 1) (10) (8) (4))) (quote #f)) (make-problem "Solver Breaker" (quote ((1) (2 2) (1) (2) (2 2) (1))) (quote ((1) (2 2) (1 1) (1) (2 2) (1))) (quote #f))))) -------------------------------------------------------------------------------- /parcheesi/die.rkt: -------------------------------------------------------------------------------- 1 | (module die racket 2 | (require racket/gui 3 | racket/class) 4 | 5 | (provide die%) 6 | 7 | (define die% 8 | (class canvas% 9 | (inherit get-dc get-client-size refresh) 10 | (init-field [digit #f]) 11 | (define/public (set-digit d) 12 | (unless (equal? digit d) 13 | (set! digit d) 14 | (refresh))) 15 | (init-field [dim? #f]) 16 | (define/public (set-dim d) 17 | (unless (equal? dim? d) 18 | (set! dim? d) 19 | (refresh))) 20 | (define/override (on-paint) 21 | (let ([dc (get-dc)]) 22 | (let-values ([(w h) (get-client-size)]) 23 | (when digit 24 | (send dc set-pen (send the-pen-list find-or-create-pen (if dim? "dark gray" "black") 1 'solid)) 25 | (send dc set-brush (send the-brush-list find-or-create-brush "white" 'solid)) 26 | (send dc draw-rounded-rectangle 0 0 w h) 27 | (send dc set-brush (send the-brush-list find-or-create-brush (if dim? "dark gray" "black") 'solid)) 28 | (let ([draw-circle 29 | (lambda (mx my) 30 | (send dc draw-ellipse 31 | (- (* mx w) (/ w 12)) 32 | (- (* my h) (/ h 12)) 33 | (/ w 6) 34 | (/ h 6)))] 35 | [in (- 1/3 1/24)] 36 | [out (+ 2/3 1/24)] 37 | [draw-text 38 | (lambda (str) 39 | (let-values ([(tw th _1 _2) (send dc get-text-extent str)]) 40 | (send dc draw-text 41 | str 42 | (- (/ w 2) (/ tw 2)) 43 | (- (/ h 2) (/ th 2)))))]) 44 | (case digit 45 | [(1) (draw-circle 1/2 1/2)] 46 | [(2) (draw-circle in in) 47 | (draw-circle out out)] 48 | [(3) (draw-circle in in) 49 | (draw-circle 1/2 1/2) 50 | (draw-circle out out)] 51 | [(4) (draw-circle in in) 52 | (draw-circle in out) 53 | (draw-circle out in) 54 | (draw-circle out out)] 55 | [(5) (draw-circle in in) 56 | (draw-circle in out) 57 | (draw-circle 1/2 1/2) 58 | (draw-circle out in) 59 | (draw-circle out out)] 60 | [(6) (draw-circle in in) 61 | (draw-circle in 1/2) 62 | (draw-circle in out) 63 | (draw-circle out in) 64 | (draw-circle out 1/2) 65 | (draw-circle out out)] 66 | [(10) (draw-text "10")] 67 | [(20) (draw-text "20")])))))) 68 | (super-new (style '(transparent))) 69 | (send (get-dc) set-smoothing 'aligned) 70 | (inherit min-width min-height stretchable-width stretchable-height) 71 | (min-width 48) 72 | (min-height 48) 73 | (stretchable-width #f) 74 | (stretchable-height #f)))) 75 | -------------------------------------------------------------------------------- /parcheesi/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "parcheesi.rkt") 4 | (define game-set "Board Games") 5 | -------------------------------------------------------------------------------- /parcheesi/interfaces.rkt: -------------------------------------------------------------------------------- 1 | (module interfaces racket 2 | (provide player<%> 3 | game<%>) 4 | 5 | ;; in Java, lists become arrays. 6 | 7 | ;; the do-move method gets two numbers if no doubles were rolled 8 | ;; and gets four numbers if doubles were rolled (and the player has 9 | ;; all of the pieces in). 10 | (define player<%> 11 | (interface () 12 | start-game ;; player-color -> string 13 | do-move ;; board (listof number[1-6]) -> move 14 | doubles-penalty ;; : -> void 15 | )) 16 | 17 | (define game<%> 18 | (interface () 19 | register ;; player<%> -> void 20 | start #| -> void |#))) 21 | -------------------------------------------------------------------------------- /parcheesi/parcheesi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/parcheesi/parcheesi.png -------------------------------------------------------------------------------- /parcheesi/parcheesi.rkt: -------------------------------------------------------------------------------- 1 | (module parcheesi racket 2 | (require racket/unit 3 | racket/class 4 | "admin-gui.rkt") 5 | 6 | (provide game@) 7 | (define game@ 8 | (unit (import) 9 | (export) 10 | (new gui-game%)))) 11 | -------------------------------------------------------------------------------- /pousse/board-size.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (define current-board-size (make-parameter 4)) 3 | (provide current-board-size) 4 | -------------------------------------------------------------------------------- /pousse/help.txt: -------------------------------------------------------------------------------- 1 | The pousse GUI can 2 | 3 | * play a person against another person, 4 | * play a person against a program, 5 | * play a program against another program, or 6 | 7 | The "Setup..." button opens a dialog for selecting one of the above 8 | modes, and for adding new program players to the system. Use 9 | "Setup..." to reset a game or to cancel a game where two programs are 10 | playing each other. 11 | 12 | Person Players 13 | -------------- 14 | Watch the status line above the board for information. When it's your 15 | turn, click on one of the numbers surrounding the board to move. 16 | 17 | The left and right arrows above the board undo and redo moves, 18 | respectively. The right side of the window shows the game played so 19 | far, including undone moves that have not yet been replaced. The most 20 | recent move is highlighted in blue. 21 | 22 | When a player loses by repeating a previous board configuration, the 23 | player's pieces turn red and no further moves are allowed (although 24 | moves can be undone). When a player wins, the player's pieces that 25 | form straights are turned green. 26 | 27 | Players are encouraged to move within 30 or 60 seconds. A beep is 28 | sounded at 30 and 60 seconds from the start of player's turn. 29 | 30 | Program Players 31 | --------------- 32 | While a program player is ``thinking,'' the cursor changes to a watch 33 | over the board. When a person plays a program, clicking the left arrow 34 | while a program is thinking cancels the program and undoes the 35 | person's most recent move. Clicking the left arrow during the person's 36 | turn undoes the program's last move, plus the person's previous move 37 | (i.e., it undoes two moves). 38 | -------------------------------------------------------------------------------- /pousse/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "pousse.rkt") 4 | (define game-set "Board Games") 5 | -------------------------------------------------------------------------------- /pousse/left.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/pousse/left.gif -------------------------------------------------------------------------------- /pousse/pousse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/pousse/pousse.png -------------------------------------------------------------------------------- /pousse/right.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/pousse/right.gif -------------------------------------------------------------------------------- /pousse/robots.txt: -------------------------------------------------------------------------------- 1 | A player program for Pousse is a module that exports a `robot' 2 | function. The `robot' function takes two arguments: 3 | 4 | * The first argument is a number for the board size. 5 | 6 | * The second argument is the history of moves as a list (with the 7 | first move of the game at the beginning of the list). Each move is 8 | a list of two values: a symbol --- 't, 'l, 'b, or 'r --- and a 9 | number. 10 | 11 | The result should be a move (a list containing a symbol and a number). 12 | 13 | The player program is not given the current board state, but it can be 14 | derived from the move history. The history is more useful than the 15 | board state, because a move that repeats a board state is a losing 16 | move. 17 | 18 | The following example player program always mimics the other player, 19 | choosing T1 if it has to go first: 20 | 21 | ;; In the file my-robot.rkt 22 | (module my-robot mzscheme 23 | (provide robot) 24 | 25 | (define robot 26 | (lambda (n moves) 27 | (if (null? moves) 28 | ;; first move 29 | '(t 1) 30 | ;; otherwise, mimic previous move 31 | (let loop ([moves moves]) 32 | (if (null? (cdr moves)) 33 | (car moves) 34 | (loop (cdr moves)))))))) 35 | 36 | A robot should take 30 seconds or less to select a move. 37 | 38 | A program player is loaded into the game via the "Setup..." dialog, 39 | which has an "Add a Program Player..." button for selecting a file 40 | containing a module. 41 | -------------------------------------------------------------------------------- /same/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game-set "Puzzle Games") 4 | (define game "same.rkt") 5 | -------------------------------------------------------------------------------- /same/same.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/same/same.png -------------------------------------------------------------------------------- /scribblings/aces.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Aces" "aces" "Solitaire Card Game"] 5 | 6 | Aces is a solitaire card game. The object is to remove all of the 7 | cards from the board, except the four Aces. 8 | 9 | Remove a card by clicking it. You may remove a card when two 10 | conditions are true. First, it must be at the bottom of one of the 11 | four stacks of cards. Second, either the ace of the same suit, or a 12 | higher card of the same suit must also be at the bottom of one of the 13 | four stacks of cards. 14 | 15 | You may also move any card from the bottom of one of the stacks to an 16 | empty stack by clicking it. If there are still cards in the deck on 17 | the left, you may click the deck to deal four new cards, one onto the 18 | bottom of each stack. 19 | 20 | Good Luck! 21 | -------------------------------------------------------------------------------- /scribblings/blackjack.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Blackjack" "blackjack" "21 Card Game"] 5 | 6 | Standard Blackjack rules with the following specifics: 7 | 8 | @itemize[ 9 | 10 | @item{1 player (not counting the dealer).} 11 | 12 | @item{4 decks, reshuffled after 3/4 of the cards are used.} 13 | 14 | @item{Dealer stands on soft 17s.} 15 | 16 | @item{Splitting is allowed only on the first two cards, and only if 17 | they are equal. 10 and the face cards are all considered equal 18 | for splitting.} 19 | 20 | @item{Doubling is allowed on all unsplit hands, not on split hands.} 21 | 22 | @item{No blackjacks after splitting.} 23 | 24 | @item{No surrender.} 25 | 26 | @item{No insurance.} 27 | 28 | @item{No maximum under-21 hand size.} 29 | 30 | @item{Dealer's second card is not revealed if the player busts (or 31 | both halves of a split hand bust).} 32 | 33 | ] 34 | -------------------------------------------------------------------------------- /scribblings/chat-noir.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require scribble/lp-include) 3 | @(lp-include "../chat-noir/chat-noir-literate.rkt") 4 | -------------------------------------------------------------------------------- /scribblings/checkers.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Checkers" "checkers" "Board Game"] 5 | 6 | This simple checkers game (with no AI player) is intended as a 7 | demonstration use of the @racketmodname[games/gl-board-game] library. 8 | -------------------------------------------------------------------------------- /scribblings/common.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require scribble/manual 4 | scribble/decode 5 | scribble/struct 6 | setup/collects) 7 | (provide (all-from-out scribble/manual) 8 | selflink 9 | gametitle gametitle* play-margin-note 10 | game) 11 | 12 | (define (selflink str) (link str (tt str))) 13 | 14 | (define game onscreen) 15 | 16 | (define (gametitle name subcol subtitle 17 | #:style [style #f]) 18 | (make-splice 19 | (list 20 | (gametitle* name subcol subtitle #:style style) 21 | (play-margin-note name)))) 22 | 23 | (define (gametitle* name subcol subtitle 24 | #:style [style #f]) 25 | (title #:tag subcol 26 | #:style style 27 | (make-element 28 | "noborder" 29 | (list 30 | (image (path->collects-relative 31 | (build-path (collection-path "games" subcol) 32 | (format "~a.png" subcol)))))) 33 | " " (onscreen name) " --- " subtitle)) 34 | 35 | (define (play-margin-note name) 36 | (margin-note "To play " 37 | (onscreen name) 38 | ", run the " 39 | (exec "PLT Games") " program." 40 | " (Under Unix, it's called " (exec "plt-games") ").")) 41 | 42 | -------------------------------------------------------------------------------- /scribblings/crazy8s.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Crazy 8s" "crazy8s" "Card Game"] 5 | 6 | Try to get rid of all you cards by matching the value or suit of the 7 | top card in the discard pile. In the default mode, click a card to 8 | discard it; you can adjust the options so that you discard by dragging 9 | a card from your hand to the discard pile. 10 | 11 | An @onscreen{8} can be discarded at any time, and in that case, the 12 | player who discarded the @onscreen{8} gets to pick any suit for it 13 | (hence the craziness of @onscreen{8}s). When you discard an 14 | @onscreen{8}, a panel of buttons appears to the right of the discard 15 | pile, so you can pick the suit. 16 | 17 | A player can choose to draw a card instead of discarding, as long as 18 | cards are left in the draw pile. A player's turn continues after 19 | drawing, so a player can continue drawing to find something to 20 | discard. In the default mode, click the face-down draw pile in the 21 | middle of the table; you can adjust the options to that you draw by 22 | dragging it from the draw pile to your hand. 23 | 24 | If no cards are left in the deck, a player may pass instead of 25 | discarding. To pass, click the @onscreen{Pass} button. 26 | 27 | The status line at the bottom of the window provides instructions as 28 | you go. 29 | -------------------------------------------------------------------------------- /scribblings/ginrummy.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Rummy" "ginrummy" "Card Game"] 5 | 6 | This is a simple variant of Rummy. 7 | 8 | Put all cards in your hand into straights (3 or more cards in the same 9 | suit) and 3- or 4-of-a-kind sets to win. Each card counts for only 10 | one set. Aces can be used in both A-2-3 sequences and Q-K-A 11 | sequences. 12 | 13 | When all of your cards fit into sets (the game detects this 14 | automatically), you win. 15 | 16 | On each turn, you can either draw from the deck or from the top of the 17 | discard pile (drag from either to your hand), then you must discard 18 | one of your own cards (by dragging from your hand to the discard 19 | pile). 20 | 21 | The status line at the bottom of the window provides instructions as 22 | you go. The computer player is fairly smart. 23 | -------------------------------------------------------------------------------- /scribblings/gofish.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Go Fish" "gofish" "Kid's Card Game"] 5 | 6 | @game{Go Fish} is the children's card game where you try to get rid of 7 | all you cards by forming pairs. You play against two computer 8 | players. 9 | 10 | On each turn, if you have a match in your hand, drag one of the 11 | matching cards to your numbered box, and the match will move into the 12 | box. 13 | 14 | After forming matches from your own hand, drag one of your cards to an 15 | opponent's area to ask the opponent for a matching card: 16 | 17 | @itemize[ 18 | 19 | @item{If the opponent has a card with the same value as the card that you 20 | drag, the opponent will give you the card, and they'll go into your 21 | match area. Drag another card to an opponent.} 22 | 23 | @item{If the opponent has no matching card, the top card on draw pile 24 | will move, indicating that you must ``Go Fish!'' Draw a card by 25 | dragging it from the draw pile to your hand. If the drawn card 26 | gives you a match, then the match will automatically move into your 27 | match area, and it's still your turn (so drag another card to one 28 | of the opponents).} 29 | 30 | ] 31 | 32 | The game is over when one player runs out of cards. The winner is the 33 | one with the most matches. 34 | 35 | The status line at the bottom of the window provides instructions as 36 | you go. The computer players are not particularly smart. 37 | -------------------------------------------------------------------------------- /scribblings/jewel.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Jewel" "jewel" "3-D Skill Game"] 5 | 6 | @author["Peter Ivanyi"] 7 | 8 | The board is an 8 by 8 array of jewels of 7 types. You need to get 3 9 | or more in a row horizontally or vertically in order to score points. 10 | You can swap any two jewels that are next to each other up and down or 11 | left and right. The mechanic is to either: 12 | 13 | @itemize[ 14 | 15 | @item{Click the mouse on the first one, then drag in the direction for 16 | the swap.} 17 | 18 | @item{Move a bubble using the arrow keys, lock the bubble to a jewel with 19 | the space bar, and the swap the locked jewel with another by using 20 | the arrow keys. Space unlocks a locked bubble without swapping.} 21 | 22 | ] 23 | 24 | Jewels can only be swapped if after the swap there are at least 3 or 25 | more same shape or color in a row or column. Otherwise the jewels 26 | return to their original position. There is a clock shown on the 27 | left. When it counts down to 0 the game is over. Getting 3 in a row 28 | adds time to the clock. 29 | 30 | Hit spacebar to start a new game then select the difficulty number by 31 | pressing @onscreen{0}, @onscreen{1}, @onscreen{2}, @onscreen{3}, or 32 | @onscreen{0}. You can always press ESC to exit. During playing press 33 | @onscreen{P} to pause the game. 34 | 35 | The code is released under the LGPL. The code is a conversion of Dave 36 | Ashley's C program to Racket with some modifications and enhancements. 37 | 38 | Enjoy. 39 | -------------------------------------------------------------------------------- /scribblings/lights-out.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Lights Out" "lights-out" "Logic Game"] 5 | 6 | The object of this game is to turn all of the lights off. Click on a 7 | button to turn that light off, but beware it will also toggle the 8 | lights above, below to the left and to the right of that button. 9 | 10 | Good luck. 11 | -------------------------------------------------------------------------------- /scribblings/memory.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Memory" "memory" "Kid's Game"] 5 | 6 | Flip two cards in a row that have the same picture, and the cards are 7 | removed. If the two cards don't match, they are flipped back over, and 8 | you try again. Each card has a single match on the board. The game is 9 | over and the clock stops when all cards are removed. 10 | -------------------------------------------------------------------------------- /scribblings/mines.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Minesweeper" "mines" "Logic Game"] 5 | 6 | Remove all the tiles that have no bomb underneath. When you remove 7 | such a tile, a number appears that indicates how many of the 8 | surrounding squares (up to 8) have a bomb; a blank means zero bombs, 9 | and the game automatically uncovers all surrounding tiles in that 10 | case. 11 | 12 | Right- or Control-click to flag a tile that you think has a bomb, so 13 | that you cannot accidentally uncover it. Right- or Control-click again 14 | to remove the flag. 15 | 16 | You don't have to use flags. When all of the non-bomb tiles are 17 | removed, the game is over, and the clock stops. 18 | -------------------------------------------------------------------------------- /scribblings/parcheesi.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Parcheesi" "parcheesi" "Board Game"] 5 | 6 | @onscreen{Parcheesi} is a race game for four players. The goal is for 7 | each player to move their pieces from the starting position (the 8 | circles in the corners) to the home square (in the center of the 9 | board), passing a nearly complete loop around the board in the 10 | counter-clockwise direction and then heads up towards the main row. 11 | For example, the green player enters from the bottom right, travels 12 | around the board on the light blue squares, passing each of the 13 | corners, until it reaches the middle of the bottom of the board, where 14 | it turns off the light blue squares and heads into the central region. 15 | 16 | On each turn, the player rolls two dice and advances the pawn, based 17 | on the die rolls. Typically the players may move a pawn for each die. 18 | The pawn moves by the number of pips showing on the die and all of the 19 | dice must be used to complete a turn. 20 | 21 | There are some exceptions, however: 22 | 23 | @itemize[ 24 | 25 | @item{You must roll a 5 (either directly or via summing) to enter from 26 | the start area to the main ring.} 27 | 28 | @item{If two pieces of the same color occupy a square, no pieces may 29 | pass that square.} 30 | 31 | @item{If an opponent's piece lands on your piece, you piece is 32 | returned to the starting area and the opponent receives a bonus of 33 | 20 (which is treated just as if they had rolled a 20 on the 34 | dice).} 35 | 36 | @item{If your piece makes it home (and it must do so by exact count) you 37 | get a bonus of 10, to be used as an additional die roll.} 38 | 39 | ] 40 | 41 | These rules induce a number of unexpected corner cases, but the GUI 42 | only lets you make legal moves. Watch the space along the bottom of 43 | the board for reasons why a move is illegal or why you have not used 44 | all of your die rolls. 45 | 46 | The automated players are: 47 | 48 | @itemize[ 49 | 50 | @item{@onscreen{Reckless Renee}, who tries to maximize the chances 51 | that someone else bops her.} 52 | 53 | @item{@onscreen{Polite Polly}, who tries to minimize the distance her 54 | pawns move. (``No, after @emph{you}. I insist.'')} 55 | 56 | @item{@onscreen{Amazing Grace}, who tries to minimize the chance she 57 | gets bopped while moving as far as possible.} 58 | 59 | ] 60 | 61 | -------------------------------------------------------------------------------- /scribblings/pousse.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Pousse" "pousse" "Tic-Tac-Toe-like Game"] 5 | 6 | @onscreen{Pousse} (French for ``push,'' pronounced ``poo-ss'') is a 2 7 | person game, played on an @math{N} by @math{N} board (usually 4 by 4). 8 | Initially the board is empty, and the players take turns inserting one 9 | marker of their color (@onscreen{X} or @onscreen{O}) on the board. 10 | The color @onscreen{X} always goes first. The columns and rows are 11 | numbered from 1 to @math{N}, starting from the top left, as in: 12 | 13 | @verbatim[#:indent 3]{ 14 | 1 2 3 4 15 | +-+-+-+-+ 16 | 1 | | | | | 17 | +-+-+-+-+ 18 | 2 | | | | | 19 | +-+-+-+-+ 20 | 3 | | | | | 21 | +-+-+-+-+ 22 | 4 | | | | | 23 | +-+-+-+-+ 24 | } 25 | 26 | A marker can only be inserted on the board by sliding it onto a 27 | particular row from the left or from the right, or onto a particular 28 | column from the top or from the bottom. So there are @math{4*N} 29 | possible ``moves'' (ways to insert a marker). They are named 30 | L@math{i}, R@math{i}, T@math{i}, and B@math{i} respectively, where 31 | @math{i} is the number of the row or column where the insertion takes 32 | place. 33 | 34 | When a marker is inserted, there may be a marker on the square where 35 | the insertion takes place. In this case, all markers on the insertion 36 | row or column from the insertion square up to the first empty square 37 | are moved one square further to make room for the inserted marker. 38 | Note that the last marker of the row or column will be pushed off the 39 | board (and must be removed from play) if there are no empty squares on 40 | the insertion row or column. 41 | 42 | A row or a column is a @defterm{straight} of a given color if it 43 | contains @math{N} markers of the given color. 44 | 45 | The game ends either when an insertion 46 | 47 | @itemize[ 48 | 49 | @item{repeats a previous configuration of the board; in this case the 50 | player who inserted the marker LOSES.} 51 | 52 | @item{creates a configuration with more straights of one color than 53 | straights of the other color; the player whose color is dominant 54 | (in number of straights) WINS.} 55 | 56 | ] 57 | 58 | A game always leads to a win by one of the two players. Draws are 59 | impossible. 60 | 61 | This game is from the 1998 ICFP programming contest. 62 | 63 | -------------------------------------------------------------------------------- /scribblings/slidey.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Slidey" "slidey" "Picture Puzzle"] 5 | 6 | Click a tile to slide it into the adjacent space, and keep shifting 7 | tiles that way to repair the picture. 8 | -------------------------------------------------------------------------------- /scribblings/spider.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @gametitle["Spider" "spider" "Solitaire Card Game"] 5 | 6 | Spider is a solitaire card game played with 104 cards. The cards can 7 | include either a single suit, two suits, or four suites. (Choose your 8 | variant through the @onscreen{Options} item in the @onscreen{Edit} 9 | menu.) 10 | 11 | Terminology: 12 | 13 | @itemize[ 14 | 15 | @item{@deftech{Tableau}: one of the ten stacks of cards in the play 16 | area. The game starts with six cards in the first four 17 | @tech{tableau}s, and five cards in the rest; only the topmost card 18 | is face up, and others are revealed when they become the topmost 19 | card of the @tech{tableau}.} 20 | 21 | @item{@deftech{Sequence}: a group of cards on the top of a 22 | @tech{tableau} that are in the same suit, and that are in 23 | @tech{sequence}, with the lowest numbered card topmost (i.e., 24 | closer to the bottom of the screen). King is high and ace is low.} 25 | 26 | ] 27 | 28 | The object of the game is to create a @tech{sequence} with ace through 29 | king, at which point the @tech{sequence} is removed from play. Create 30 | eight such @tech{sequence}s to win the game. 31 | 32 | On each move, you can take one of the following actions: 33 | 34 | @itemize[ 35 | 36 | @item{Move a @tech{sequence} from any @tech{tableau} to one whose 37 | topmost card (i.e., closest to the bottom of the screen) has a 38 | value that's one more than the @tech{sequence}'s value. Note that 39 | if the top card of the target @tech{tableau} has the same suit as 40 | the @tech{sequence}, a larger @tech{sequence} is formed, but the 41 | target @tech{tableau}'s card is not required to have the same suit.} 42 | 43 | @item{Move a @tech{sequence} to an empty @tech{tableau}.} 44 | 45 | @item{Deal ten cards from the deck (in the upper left corder), one to 46 | each @tech{tableau}. This move is allowed only if no 47 | @tech{tableau} is empty.} 48 | 49 | ] 50 | 51 | To move a @tech{sequence}, either drag it to the target 52 | @tech{tableau}, or click the @tech{sequence} and then click the top 53 | card of the target @tech{tableau} (or the place where a single card 54 | would be for an empty @tech{tableau}). Click a select card to 55 | de-select it. Clicking a card that is not a valid target for the 56 | currently selected @tech{sequence} causes the clicked card's 57 | @tech{sequence} to be selected (if the card is face up in a 58 | @tech{sequence}). 59 | 60 | To deal, click the deck. 61 | 62 | To undo a move, use @onscreen{Undo} from the @onscreen{Edit} menu. 63 | -------------------------------------------------------------------------------- /scribblings/std-games.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt") 3 | 4 | @title[#:style 'toc #:tag "bundled"]{Bundled Games} 5 | 6 | @local-table-of-contents[] 7 | 8 | @include-section["aces.scrbl"] 9 | @include-section["gofish.scrbl"] 10 | @include-section["crazy8s.scrbl"] 11 | @include-section["blackjack.scrbl"] 12 | @include-section["ginrummy.scrbl"] 13 | @include-section["spider.scrbl"] 14 | @include-section["memory.scrbl"] 15 | @include-section["slidey.scrbl"] 16 | @include-section["same.scrbl"] 17 | @include-section["mines.scrbl"] 18 | @include-section["paint-by-numbers.scrbl"] 19 | @include-section["lights-out.scrbl"] 20 | @include-section["pousse.scrbl"] 21 | @include-section["gobblet.scrbl"] 22 | @include-section["jewel.scrbl"] 23 | @include-section["parcheesi.scrbl"] 24 | @include-section["checkers.scrbl"] 25 | @include-section["chat-noir.scrbl"] 26 | @include-section["tally-maze.scrbl"] 27 | @include-section["gcalc.scrbl"] 28 | -------------------------------------------------------------------------------- /scribblings/tally-maze.scrbl: -------------------------------------------------------------------------------- 1 | #lang scribble/doc 2 | @(require "common.rkt" racket/class racket/draw (only-in pict dc)) 3 | 4 | @(define (add-commas n) 5 | (define s (number->string n)) 6 | (apply string-append 7 | (reverse 8 | (let loop ([digits (reverse (string->list s))]) 9 | (cond 10 | [(null? digits) '()] 11 | [(<= (length digits) 3) (list (apply string (reverse digits)))] 12 | [else (list* (format ",~a~a~a" 13 | (list-ref digits 2) 14 | (list-ref digits 1) 15 | (list-ref digits 0)) 16 | (loop (cdddr digits)))]))))) 17 | 18 | @gametitle["Tally Maze" "tally-maze" "Maze Enumeration Game"] 19 | 20 | The object of @game{Tally Maze} is to help the blue ball 21 | reach the exit of the maze without being caught by the pumpkins. 22 | 23 | Control the blue ball with the keyboard: 24 | @itemlist[@item{the arrow keys move one step in each direction;} 25 | @item{space and @litchar{.} let the pumpkins move without moving the blue ball;} 26 | @item{@litchar{z} undoes the most recent move; and} 27 | @item{@litchar{n} changes the maze.}] 28 | 29 | As you can quickly discover, simply moving around in the maze 30 | is a recipe for failure. The pumpkins know the best route 31 | in the maze to reach your blue ball and they take it. 32 | 33 | The @litchar{n} key, however, adjusts the maze. More precisely, 34 | it moves forward to the next maze in an enumeration of all 35 | @(add-commas 254377512893447941210664002794210519990861507330048) 36 | of the mazes that the game 37 | supports. Each maze is only a little bit different from 38 | the one before, so you have to plan ahead in order to understand 39 | how the current maze differs from the next one. (Use the 40 | undo key to help you plan.) 41 | 42 | Beware, however, that planning ahead one maze is not enough; 43 | although one pumpkin just chases you in the current maze, 44 | the other pumpkin tries to track where you might go if 45 | you advance to the next maze and to wait for you there. 46 | Not all games are winnable (although I hope most are). 47 | 48 | Thanks to Lazy Crazy (@url{http://lazycrazy.deviantart.com}) for 49 | the blue ball icons and to YOOtheme (@url{http://www.yootheme.com/icons}) 50 | for the pumpkin icon. 51 | -------------------------------------------------------------------------------- /show-scribbling.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | 3 | (require setup/xref 4 | scribble/xref 5 | scribble/tag 6 | net/url 7 | net/sendurl) 8 | 9 | (provide show-scribbling) 10 | 11 | (define (show-scribbling mod-path tag) 12 | (define xref (load-collections-xref)) 13 | (λ () 14 | (define-values (path anchor) 15 | (xref-tag->path+anchor 16 | xref 17 | (make-section-tag tag #:doc mod-path))) 18 | (if path 19 | (let ([u (path->url path)]) 20 | (send-url (url->string u))) 21 | (error 'show-scribbling "cannot find docs for: ~.s ~.s" mod-path tag)))) 22 | -------------------------------------------------------------------------------- /slidey/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/slidey/11.jpg -------------------------------------------------------------------------------- /slidey/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game-set "Puzzle Games") 4 | (define game "slidey-main.rkt") 5 | -------------------------------------------------------------------------------- /slidey/slidey-main.rkt: -------------------------------------------------------------------------------- 1 | #lang racket 2 | (require "slidey.rkt") 3 | 4 | (provide game@) 5 | 6 | (define game@ (unit (import) (export) (start-game))) 7 | -------------------------------------------------------------------------------- /slidey/slidey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/slidey/slidey.png -------------------------------------------------------------------------------- /spider/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game "spider.rkt") 4 | (define game-set "Card Games") 5 | -------------------------------------------------------------------------------- /spider/spider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/spider/spider.png -------------------------------------------------------------------------------- /tally-maze.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | (require (submod "tally-maze/game.rkt" main)) 3 | (module test racket/base) ;; avoid launching GUI in tests 4 | -------------------------------------------------------------------------------- /tally-maze/images/pumpkin/pumpkin-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/pumpkin/pumpkin-48x48.png -------------------------------------------------------------------------------- /tally-maze/images/pumpkin/pumpkin-64x64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/pumpkin/pumpkin-64x64.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/01.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/19.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/20.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/21.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/35.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/36.png -------------------------------------------------------------------------------- /tally-maze/images/very-emotional/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/images/very-emotional/37.png -------------------------------------------------------------------------------- /tally-maze/info.rkt: -------------------------------------------------------------------------------- 1 | #lang info 2 | 3 | (define game-set "Puzzle Games") 4 | (define game "game.rkt") 5 | -------------------------------------------------------------------------------- /tally-maze/tally-maze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/racket/games/eba5c6fa54c524871badb8b0e205fe37640d6c3e/tally-maze/tally-maze.png -------------------------------------------------------------------------------- /tests/test-docs-complete.rkt: -------------------------------------------------------------------------------- 1 | #lang racket/base 2 | (require rackunit/docs-complete) 3 | (check-docs (quote games/show-scribbling)) 4 | (check-docs (quote games/show-help)) 5 | (check-docs (quote games)) 6 | (check-docs (quote games/gl-board-game)) 7 | (check-docs (quote games/cards)) 8 | --------------------------------------------------------------------------------