├── README.md ├── css ├── screen.css ├── sokoban.css └── sprites.png ├── index.html └── js ├── jquery.processEach.js └── jquery.sokoban.js /README.md: -------------------------------------------------------------------------------- 1 | # Sōkoban 2 | 3 | An implementation of Sokōban in JavaScript, as a [jQuery] plugin. It parses and runs the de-facto standardized Sokoban puzzle notation, is capable of running multiple games and includes a separate undo buffer for each one. It's about 300 lines of code. 4 | 5 | ## How to use 6 | 7 | 1. Include a reference to the plugin (and jQuery) to the `` section of your document: 8 | 9 | 10 | 11 | 12 | 13 | 2. Add a Sokoban puzzle to your HTML document: 14 | 15 |
   3 | 
   4 |   
   5 | 
   6 |   Sōkoban: Microban levels
   7 |   
   8 |   
   9 |   
  10 | 
  11 |   
  12 |   
  13 |   
  14 |   
  37 | 
  38 | 
  39 | 
40 | 41 |

Sokoban: Microban levels

42 | 43 |
44 |
45 |
Sōkoban (倉庫番)
46 |
(n) warehouseman; storekeeper
47 |
48 |

Sokoban was created in 1980 by Hiroyuki Imabayashi, and was published 49 | in 1982 by Thinking Rabbit, a software house based in Takarazuka, Japan.

50 |

It spawned a genre of puzzle games, including the best selling 51 | Chips Challenge, 52 | Stone Age, and many others, in addition to having been cloned and ported to 53 | almost all computer and operating systems in existance.

54 |
55 |
56 | 57 |
58 |

How to play:

59 | 62 |

Move the warehouseman using the arrow keys and push all the boxes onto the 63 | colored part of the floor. Be careful not to get the boxes stuck in an unmovable 64 | position as they are to heavy to pull. If you make a mistake you can undo it with 65 | control + z or backspace and if you want to reset the level you 66 | can do so using Escape.

67 |
68 |
69 | 70 |
71 |
  72 | ; Microban levels
  73 | 
74 |
75 |
  76 | ; 1
  77 | 
  78 | ####
  79 | # .#
  80 | #  ###
  81 | #*@  #
  82 | #  $ #
  83 | #  ###
  84 | ####
  85 | 
86 |
87 |
  88 | ; 2
  89 | 
  90 | ######
  91 | #    #
  92 | # #@ #
  93 | # $* #
  94 | # .* #
  95 | #    #
  96 | ######
  97 | 
98 |
99 |
 100 | ; 3
 101 | 
 102 |   ####
 103 | ###  ####
 104 | #     $ #
 105 | # #  #$ #
 106 | # . .#@ #
 107 | #########
 108 | 
109 |
110 |
 111 | ; 4
 112 | 
 113 | ########
 114 | #      #
 115 | # .**$@#
 116 | #      #
 117 | #####  #
 118 |     ####
 119 | 
120 |
121 |
 122 | ; 5
 123 | 
 124 |  #######
 125 |  #     #
 126 |  # .$. #
 127 | ## $@$ #
 128 | #  .$. #
 129 | #      #
 130 | ########
 131 | 
132 |
133 |
 134 | ; 6
 135 | 
 136 | ###### #####
 137 | #    ###   #
 138 | # $$     #@#
 139 | # $ #...   #
 140 | #   ########
 141 | #####
 142 | 
143 |
144 |
 145 | ; 7
 146 | 
 147 | #######
 148 | #     #
 149 | # .$. #
 150 | # $.$ #
 151 | # .$. #
 152 | # $.$ #
 153 | #  @  #
 154 | #######
 155 | 
156 |
157 |
 158 | ; 8
 159 | 
 160 |   ######
 161 |   # ..@#
 162 |   # $$ #
 163 |   ## ###
 164 |    # #
 165 |    # #
 166 | #### #
 167 | #    ##
 168 | # #   #
 169 | #   # #
 170 | ###   #
 171 |   #####
 172 | 
173 |
174 |
 175 | ; 9
 176 | 
 177 | #####
 178 | #.  ##
 179 | #@$$ #
 180 | ##   #
 181 |  ##  #
 182 |   ##.#
 183 |    ###
 184 | 
185 |
186 |
 187 | ; 10
 188 | 
 189 |       #####
 190 |       #.  #
 191 |       #.# #
 192 | #######.# #
 193 | # @ $ $ $ #
 194 | # # # # ###
 195 | #       #
 196 | #########
 197 | 
198 |
199 |
 200 | ; 11
 201 | 
 202 |   ######
 203 |   #    #
 204 |   # ##@##
 205 | ### # $ #
 206 | # ..# $ #
 207 | #       #
 208 | #  ######
 209 | ####
 210 | 
211 |
212 |
 213 | ; 12
 214 | 
 215 | #####
 216 | #   ##
 217 | # $  #
 218 | ## $ ####
 219 |  ###@.  #
 220 |   #  .# #
 221 |   #     #
 222 |   #######
 223 | 
224 |
225 |
 226 | ; 13
 227 | 
 228 | ####
 229 | #. ##
 230 | #.@ #
 231 | #. $#
 232 | ##$ ###
 233 |  # $  #
 234 |  #    #
 235 |  #  ###
 236 |  ####
 237 | 
238 |
239 |
 240 | ; 14
 241 | 
 242 | #######
 243 | #     #
 244 | # # # #
 245 | #. $*@#
 246 | #   ###
 247 | #####
 248 | 
249 |
250 |
 251 | ; 15
 252 | 
 253 |      ###
 254 | ######@##
 255 | #    .* #
 256 | #   #   #
 257 | #####$# #
 258 |     #   #
 259 |     #####
 260 | 
261 |
262 |
 263 | ; 16
 264 | 
 265 |  ####
 266 |  #  ####
 267 |  #     ##
 268 | ## ##   #
 269 | #. .# @$##
 270 | #   # $$ #
 271 | #  .#    #
 272 | ##########
 273 | 
274 |
275 |
 276 | ; 17
 277 | 
 278 | #####
 279 | # @ #
 280 | #...#
 281 | #$$$##
 282 | #    #
 283 | #    #
 284 | ######
 285 | 
286 |
287 |
 288 | ; 18
 289 | 
 290 | #######
 291 | #     #
 292 | #. .  #
 293 | # ## ##
 294 | #  $ #
 295 | ###$ #
 296 |   #@ #
 297 |   #  #
 298 |   ####
 299 | 
300 |
301 |
 302 | ; 19
 303 | 
 304 | ########
 305 | #   .. #
 306 | #  @$$ #
 307 | ##### ##
 308 |    #  #
 309 |    #  #
 310 |    #  #
 311 |    ####
 312 | 
313 |
314 |
 315 | ; 20
 316 | 
 317 | #######
 318 | #     ###
 319 | #  @$$..#
 320 | #### ## #
 321 |   #     #
 322 |   #  ####
 323 |   #  #
 324 |   ####
 325 | 
326 |
327 |
 328 | ; 21
 329 | 
 330 | ####
 331 | #  ####
 332 | # . . #
 333 | # $$#@#
 334 | ##    #
 335 |  ######
 336 | 
337 |
338 |
 339 | ; 22
 340 | 
 341 | #####
 342 | #   ###
 343 | #. .  #
 344 | #   # #
 345 | ## #  #
 346 |  #@$$ #
 347 |  #    #
 348 |  #  ###
 349 |  ####
 350 | 
351 |
352 |
 353 | ; 23
 354 | 
 355 | #######
 356 | #  *  #
 357 | #     #
 358 | ## # ##
 359 |  #$@.#
 360 |  #   #
 361 |  #####
 362 | 
363 |
364 |
 365 | ; 24
 366 | 
 367 | # #####
 368 |   #   #
 369 | ###$$@#
 370 | #   ###
 371 | #     #
 372 | # . . #
 373 | #######
 374 | 
375 |
376 |
 377 | ; 25
 378 | 
 379 |  ####
 380 |  #  ###
 381 |  # $$ #
 382 | ##... #
 383 | #  @$ #
 384 | #   ###
 385 | #####
 386 | 
387 |
388 |
 389 | ; 26
 390 | 
 391 |  #####
 392 |  # @ #
 393 |  #   #
 394 | ###$ #
 395 | # ...#
 396 | # $$ #
 397 | ###  #
 398 |   ####
 399 | 
400 |
401 |
 402 | ; 27
 403 | 
 404 | ######
 405 | #   .#
 406 | # ## ##
 407 | #  $$@#
 408 | # #   #
 409 | #.  ###
 410 | #####
 411 | 
412 |
413 |
 414 | ; 28
 415 | 
 416 | #####
 417 | #   #
 418 | # @ #
 419 | # $$###
 420 | ##. . #
 421 |  #    #
 422 |  ######
 423 | 
424 |
425 |
 426 | ; 29
 427 | 
 428 |      #####
 429 |      #   ##
 430 |      #    #
 431 |  ######   #
 432 | ##     #. #
 433 | # $ $ @  ##
 434 | # ######.#
 435 | #        #
 436 | ##########
 437 | 
438 |
439 |
 440 | ; 30
 441 | 
 442 | ####
 443 | #  ###
 444 | # $$ #
 445 | #... #
 446 | # @$ #
 447 | #   ##
 448 | #####
 449 | 
450 |
451 |
 452 | ; 31
 453 | 
 454 |   ####
 455 |  ##  #
 456 | ##@$.##
 457 | # $$  #
 458 | # . . #
 459 | ###   #
 460 |   #####
 461 | 
462 |
463 |
 464 | ; 32
 465 | 
 466 |  ####
 467 | ##  ###
 468 | #     #
 469 | #.**$@#
 470 | #   ###
 471 | ##  #
 472 |  ####
 473 | 
474 |
475 |
 476 | ; 33
 477 | 
 478 | #######
 479 | #. #  #
 480 | #  $  #
 481 | #. $#@#
 482 | #  $  #
 483 | #. #  #
 484 | #######
 485 | 
486 |
487 |
 488 | ; 34
 489 | 
 490 |   ####
 491 | ###  ####
 492 | #       #
 493 | #@$***. #
 494 | #       #
 495 | #########
 496 | 
497 |
498 |
 499 | ; 35
 500 | 
 501 |   ####
 502 |  ##  #
 503 |  #. $#
 504 |  #.$ #
 505 |  #.$ #
 506 |  #.$ #
 507 |  #. $##
 508 |  #   @#
 509 |  ##   #
 510 |   #####
 511 | 
512 |
513 |
 514 | ; 36
 515 | 
 516 | ####
 517 | #  ############
 518 | # $ $ $ $ $ @ #
 519 | # .....       #
 520 | ###############
 521 | 
522 |
523 |
 524 | ; 37
 525 | 
 526 |       ###
 527 | ##### #.#
 528 | #   ###.#
 529 | #   $ #.#
 530 | # $  $  #
 531 | #####@# #
 532 |     #   #
 533 |     #####
 534 | 
535 |
536 |
 537 | ; 38
 538 | 
 539 | ##########
 540 | #        #
 541 | # ##.### #
 542 | # # $$ . #
 543 | # . @$## #
 544 | #####    #
 545 |     ######
 546 | 
547 |
548 |
 549 | ; 39
 550 | 
 551 | #####
 552 | #   ####
 553 | # # # .#
 554 | #    $ ###
 555 | ### #$.  #
 556 | #   #@   #
 557 | # # ######
 558 | #   #
 559 | #####
 560 | 
561 |
562 |
 563 | ; 40
 564 | 
 565 |  #####
 566 |  #   #
 567 | ##   ##
 568 | # $$$ #
 569 | # .+. #
 570 | #######
 571 | 
572 |
573 |
 574 | ; 41
 575 | 
 576 | #######
 577 | #     #
 578 | #@$$$ ##
 579 | #  #...#
 580 | ##    ##
 581 |  ######
 582 | 
583 |
584 |
 585 | ; 42
 586 | 
 587 |    ####
 588 |    #  #
 589 |    #@ #
 590 | ####$.#
 591 | #   $.#
 592 | # # $.#
 593 | #    ##
 594 | ######
 595 | 
596 |
597 |
 598 | ; 43
 599 | 
 600 |      ####
 601 |      # @#
 602 |      #  #
 603 | ###### .#
 604 | #   $  .#
 605 | #  $$# .#
 606 | #    ####
 607 | ###  #
 608 |   ####
 609 | 
610 |
611 |
 612 | ; 44
 613 | 'Duh!'
 614 | 
 615 | #####
 616 | #@$.#
 617 | #####
 618 | 
619 |
620 |
 621 | ; 45
 622 | 
 623 | ######
 624 | #... #
 625 | #  $ #
 626 | # #$##
 627 | #  $ #
 628 | #  @ #
 629 | ######
 630 | 
631 |
632 |
 633 | ; 46
 634 | 
 635 |  ######
 636 | ##    #
 637 | #  ## #
 638 | # # $ #
 639 | #  * .#
 640 | ## #@##
 641 |  #   #
 642 |  #####
 643 | 
644 |
645 |
 646 | ; 47
 647 | 
 648 |   #######
 649 | ###     #
 650 | # $ $   #
 651 | # ### #####
 652 | # @ . .   #
 653 | #   ###   #
 654 | ##### #####
 655 | 
656 |
657 |
 658 | ; 48
 659 | 
 660 | ######
 661 | #  @ #
 662 | #  # ##
 663 | # .#  ##
 664 | # .$$$ #
 665 | # .#   #
 666 | ####   #
 667 |    #####
 668 | 
669 |
670 |
 671 | ; 49
 672 | 
 673 | ######
 674 | # @  #
 675 | # $# #
 676 | # $  #
 677 | # $ ##
 678 | ### ####
 679 |  #  #  #
 680 |  #...  #
 681 |  #     #
 682 |  #######
 683 | 
684 |
685 |
 686 | ; 50
 687 | 
 688 |   ####
 689 | ###  #####
 690 | #  $  @..#
 691 | # $    # #
 692 | ### #### #
 693 |   #      #
 694 |   ########
 695 | 
696 |
697 |
 698 | ; 51
 699 | 
 700 | ####
 701 | #  ###
 702 | #    ###
 703 | #  $*@ #
 704 | ### .# #
 705 |   #    #
 706 |   ######
 707 | 
708 |
709 |
 710 | ; 52
 711 | 
 712 |   ####
 713 | ### @#
 714 | #  $ #
 715 | #  *.#
 716 | #  *.#
 717 | #  $ #
 718 | ###  #
 719 |   ####
 720 | 
721 |
722 |
 723 | ; 53
 724 | 
 725 |  #####
 726 | ##. .##
 727 | # * * #
 728 | #  #  #
 729 | # $ $ #
 730 | ## @ ##
 731 |  #####
 732 | 
733 |
734 |
 735 | ; 54
 736 | 
 737 |       ######
 738 |       #    #
 739 |   ##### .  #
 740 | ###  ###.  #
 741 | # $  $  . ##
 742 | # @$$ # . #
 743 | ##    #####
 744 |  ######
 745 | 
746 |
747 |
 748 | ; 55
 749 | 
 750 | ########
 751 | # @ #  #
 752 | #      #
 753 | #####$ #
 754 |     #  ###
 755 |  ## #$ ..#
 756 |  ## #  ###
 757 |     ####
 758 | 
759 |
760 |
 761 | ; 56
 762 | 
 763 | #####
 764 | #   ###
 765 | #  $  #
 766 | ##* . #
 767 |  #   @#
 768 |  ######
 769 | 
770 |
771 |
 772 | ; 57
 773 | 
 774 |   ####
 775 |   #  #
 776 |   #@ #
 777 |   #  #
 778 | ### ####
 779 | #    * #
 780 | #  $   #
 781 | #####. #
 782 |     ####
 783 | 
784 |
785 |
 786 | ; 58
 787 | 
 788 | ####
 789 | #  ####
 790 | #.*$  #
 791 | # .$# #
 792 | ## @  #
 793 |  #   ##
 794 |  #####
 795 | 
796 |
797 |
 798 | ; 59
 799 | 
 800 | ############
 801 | #          #
 802 | # ####### @##
 803 | # #         #
 804 | # #  $   #  #
 805 | # $$ #####  #
 806 | ###  # # ...#
 807 |   #### #    #
 808 |        ######
 809 | 
810 |
811 |
 812 | ; 60
 813 | 
 814 |  #########
 815 |  #       #
 816 | ##@##### #
 817 | #  #   # #
 818 | #  #   $.#
 819 | #  ##$##.#
 820 | ##$##  #.#
 821 | #   $  #.#
 822 | #   #  ###
 823 | ########
 824 | 
825 |
826 |
 827 | ; 61
 828 | 
 829 | ########
 830 | #      #
 831 | # #### #
 832 | # #...@#
 833 | # ###$###
 834 | # #     #
 835 | #  $$ $ #
 836 | ####   ##
 837 |    #.###
 838 |    ###
 839 | 
840 |
841 |
 842 | ; 62
 843 | 
 844 |    ##########
 845 | ####    ##  #
 846 | #  $$$....$@#
 847 | #      ###  #
 848 | #   #### ####
 849 | #####
 850 | 
851 |
852 |
 853 | ; 63
 854 | 
 855 | #####   ####
 856 | #   ##### .#
 857 | #       $  ########
 858 | ###  #### .$    @ #
 859 |   #  #  #  ####   #
 860 |   ####  ####  #####
 861 | 
862 |
863 |
 864 | ; 64
 865 | 
 866 |  ######
 867 | ##    #
 868 | #   $ #
 869 | #  $$ #
 870 | ### .#####
 871 |   ##.# @ #
 872 |    #.  $ #
 873 |    #. ####
 874 |    ####
 875 | 
876 |
877 |
 878 | ; 65
 879 | 
 880 |   ######
 881 |   #    #
 882 |   #  $ #
 883 |  ####$ #
 884 | ## $ $ #
 885 | #....# ##
 886 | #     @ #
 887 | ##  #   #
 888 |  ########
 889 | 
890 |
891 |
 892 | ; 66
 893 | 
 894 |    ###
 895 |    #@#
 896 |  ###$###
 897 | ##  .  ##
 898 | #  # #  #
 899 | # #   # #
 900 | # #   # #
 901 | # #   # #
 902 | #  # #  #
 903 | ## $ $ ##
 904 |  ##. .##
 905 |   #   #
 906 |   #   #
 907 |   #####
 908 | 
909 |
910 |
 911 | ; 67
 912 | 
 913 | #####
 914 | #   ##
 915 | # #  #
 916 | #@$*.##
 917 | ##  . #
 918 |  # $# #
 919 |  ##   #
 920 |   #####
 921 | 
922 |
923 |
 924 | ; 68
 925 | 
 926 |  ####
 927 |  #  ######
 928 | ##    $  #
 929 | # .# $   #
 930 | # .#$#####
 931 | # .@ #
 932 | ######
 933 | 
934 |
935 |
 936 | ; 69
 937 | 
 938 | ####  ####
 939 | #  ####  #
 940 | #  #  #  #
 941 | #  #    $##
 942 | #  . .#$  #
 943 | #@ ## # $ #
 944 | #   . #   #
 945 | ###########
 946 | 
947 |
948 |
 949 | ; 70
 950 | 
 951 | #####
 952 | # @ ####
 953 | #      #
 954 | # $ $$ #
 955 | ##$##  #
 956 | #   ####
 957 | # ..  #
 958 | ##..  #
 959 |  ###  #
 960 |    ####
 961 | 
962 |
963 |
 964 | ; 71
 965 | 
 966 | ###########
 967 | #     #   ###
 968 | # $@$ # .  .#
 969 | # ## ### ## #
 970 | # #       # #
 971 | # #   #   # #
 972 | # ######### #
 973 | #           #
 974 | #############
 975 | 
976 |
977 |
 978 | ; 72
 979 | 
 980 |   ####
 981 |  ##  #####
 982 |  #  $  @ #
 983 |  #  $#   #
 984 | #### #####
 985 | #  #   #
 986 | #    $ #
 987 | # ..#  #
 988 | #  .####
 989 | #  ##
 990 | ####
 991 | 
992 |
993 |
 994 | ; 73
 995 | 
 996 | ####
 997 | #  #####
 998 | # $$ $ #
 999 | #      #
1000 | ## ## ##
1001 | #...#@#
1002 | # ### ##
1003 | #      #
1004 | #  #   #
1005 | ########
1006 | 
1007 |
1008 |
1009 | ; 74
1010 | 
1011 |  ####
1012 |  #  #######
1013 |  #$ @#   .#
1014 | ## #$$   .#
1015 | #  $  ##..#
1016 | #   # #####
1017 | ###   #
1018 |   #####
1019 | 
1020 |
1021 |
1022 | ; 75
1023 | 
1024 |  #######
1025 | ## ....##
1026 | #   ######
1027 | #   $ $ @#
1028 | ###  $ $ #
1029 |   ###    #
1030 |     ######
1031 | 
1032 |
1033 |
1034 | ; 76
1035 | 
1036 |  #####
1037 | ##   #
1038 | #    #####
1039 | #  #.#   #
1040 | #@ #.# $ #
1041 | #  #.#  ##
1042 | #    #  #
1043 | ##  ##$$#
1044 |  ##     #
1045 |   #  ####
1046 |   ####
1047 | 
1048 |
1049 |
1050 | ; 77
1051 | 
1052 | ##########
1053 | # @ .... #
1054 | #   ####$##
1055 | ## #  $ $ #
1056 |  # $      #
1057 |  #   ######
1058 |  #####
1059 | 
1060 |
1061 |
1062 | ; 78
1063 | 
1064 |  #######
1065 | ##     ##
1066 | #  $ $  #
1067 | # $ $ $ #
1068 | ## ### ####
1069 |  #@  .....#
1070 |  ##     ###
1071 |   #######
1072 | 
1073 |
1074 |
1075 | ; 79
1076 | 
1077 |  #########
1078 |  #    #  #
1079 | ## $#$#  #
1080 | #  .$.@  #
1081 | #  .#    #
1082 | ##########
1083 | 
1084 |
1085 |
1086 | ; 80
1087 | 
1088 | ####
1089 | #  #######
1090 | #  . ## .#
1091 | # $#    .#
1092 | ## ## # .#
1093 |  #    #  #
1094 |  #### #  #
1095 |   # @$ ###
1096 |   # $$ #
1097 |   #    #
1098 |   ######
1099 | 
1100 |
1101 |
1102 | ; 81
1103 | 
1104 |  #####
1105 |  #   #
1106 |  # . #
1107 | ## * #
1108 | #  *##
1109 | #  @##
1110 | ## $ #
1111 |  #   #
1112 |  #####
1113 | 
1114 |
1115 |
1116 | ; 82
1117 | 
1118 | #####
1119 | #   ###
1120 | # .   ##
1121 | ##*#$  #
1122 | # .# $ #
1123 | # @## ##
1124 | #     #
1125 | #######
1126 | 
1127 |
1128 |
1129 | ; 83
1130 | 
1131 | ######
1132 | #    ##
1133 | # $ $ ##
1134 | ## $$  #
1135 |  # #   #
1136 |  # ## ##
1137 |  #  . .#
1138 |  # @. .#
1139 |  #  ####
1140 |  ####
1141 | 
1142 |
1143 |
1144 | ; 84
1145 | 
1146 | ########
1147 | #  ... #
1148 | #  ### ##
1149 | #  # $  #
1150 | ## #@$  #
1151 |  # # $  #
1152 |  # ### #####
1153 |  #         #
1154 |  #   ###   #
1155 |  ##### #####
1156 | 
1157 |
1158 |
1159 | ; 85
1160 | 
1161 |        ####
1162 |  #######  #
1163 |  # $      #
1164 |  #   $ $  #
1165 |  # ########
1166 | ## # .  #
1167 | #  # #  #
1168 | #  @ . ##
1169 | ## # # #
1170 |  #   . #
1171 |  #######
1172 | 
1173 |
1174 |
1175 | ; 86
1176 | 
1177 |     ####
1178 |   ###  ##
1179 |  ## $   #
1180 | ## $  # #
1181 | # @#$$  #
1182 | # ..  ###
1183 | # ..###
1184 | #####
1185 | 
1186 |
1187 |
1188 | ; 87
1189 | 
1190 |      ####
1191 | ######  #
1192 | #       #
1193 | #  ... .#
1194 | ##$######
1195 | # $  #
1196 | #   $###
1197 | ##  $  #
1198 |  ## @  #
1199 |   ######
1200 | 
1201 |
1202 |
1203 | ; 88
1204 | 
1205 |      ####
1206 |  # ###  #
1207 |  # #    #
1208 |  # #  # #
1209 |  # #$ #.#
1210 |  # #  # # #
1211 |  # #$ #.# #
1212 |    #  # # #
1213 | ####$ #.# #
1214 | # @     # #
1215 | #   #  ## #
1216 | ########
1217 | 
1218 |
1219 |
1220 | ; 89
1221 | 
1222 | ##########
1223 | #   ##   #
1224 | # $  $@# #
1225 | #### # $ #
1226 |    #.#  ##
1227 |  # #.# $#
1228 |  # #.   #
1229 |  # #.   #
1230 |    ######
1231 | 
1232 |
1233 |
1234 | ; 90
1235 | 
1236 |  ########
1237 |  #  @   #
1238 |  # $  $ #
1239 | ### ## ###
1240 | #  $..$  #
1241 | #   ..   #
1242 | ##########
1243 | 
1244 |
1245 |
1246 | ; 91
1247 | 
1248 | ###########
1249 | #    .##  #
1250 | # $$@..$$ #
1251 | #   ##.   #
1252 | ###########
1253 | 
1254 |
1255 |
1256 | ; 92
1257 | 
1258 |   ####
1259 |   #  #    #####
1260 |   #  #    #   #
1261 |   #  ######.# #
1262 | ####  $    .  #
1263 | #   $$# ###.# #
1264 | #   #   # #   #
1265 | ######### #@ ##
1266 |           #  #
1267 |           ####
1268 | 
1269 |
1270 |
1271 | ; 93
1272 | 
1273 |  #########
1274 | ##   #   ##
1275 | #    #    #
1276 | #  $ # $  #
1277 | #   *.*   #
1278 | ####.@.####
1279 | #   *.*   #
1280 | #  $ # $  #
1281 | #    #    #
1282 | ##   #   ##
1283 |  #########
1284 | 
1285 |
1286 |
1287 | ; 94
1288 | 
1289 | #########
1290 | # @ #   #
1291 | # $ $   #
1292 | ##$### ##
1293 | #  ...  #
1294 | #   #   #
1295 | ######  #
1296 |      ####
1297 | 
1298 |
1299 |
1300 | ; 95
1301 | 
1302 | ########
1303 | #@     #
1304 | # .$$. #
1305 | # $..$ #
1306 | # $..$ #
1307 | # .$$. #
1308 | #      #
1309 | ########
1310 | 
1311 |
1312 |
1313 | ; 96
1314 | 
1315 |   ######
1316 |   #    #
1317 |   #    #
1318 | #####  #
1319 | #   #.#####
1320 | #   $@$   #
1321 | #####.#   #
1322 |    ## ## ##
1323 |    #   $.#
1324 |    #   ###
1325 |    #####
1326 | 
1327 |
1328 |
1329 | ; 97
1330 | 
1331 |    ####
1332 |    #  ########
1333 | #### $ $.....#
1334 | #   $   ######
1335 | #@### ###
1336 | #  $  #
1337 | # $ # #
1338 | ## #  #
1339 |  #    #
1340 |  ######
1341 | 
1342 |
1343 |
1344 | ; 98
1345 | 
1346 | #####
1347 | #   ## ####
1348 | #  $ ### .#
1349 | # $   $  .#
1350 | ## $#####.# ####
1351 | # $  # # .###  #
1352 | #    # # .#  @ #
1353 | ###  # #       #
1354 |   #### ##     ##
1355 |         #######
1356 | 
1357 |
1358 |
1359 | ; 99
1360 | 
1361 |                #####
1362 |                #   #
1363 | #######  ####### # #
1364 | #     #  #  #      #
1365 | #  @  ####  #     ####
1366 | #  #    ....## ####  #
1367 | #    ##### ## $$ $ $ #
1368 | ######   #           #
1369 |          #  ##########
1370 |          ####
1371 | 
1372 |
1373 |
1374 | ; 100
1375 | 
1376 | #######
1377 | # @#  #
1378 | #.$   #
1379 | #. # $##
1380 | #.$#   #
1381 | #. # $ #
1382 | #  #   #
1383 | ########
1384 | 
1385 |
1386 |
1387 | ; 101
1388 | 'Lockdown'
1389 | 
1390 |   #####
1391 |   #   #
1392 |   # # #######
1393 |   #  *  #   #
1394 |   ## ##   # #
1395 |   #     #*  #
1396 | ### # # # ###
1397 | #  *#$+   #
1398 | # #   ## ##
1399 | #   #  *  #
1400 | ####### # #
1401 |       #   #
1402 |       #####
1403 | 
1404 |
1405 |
1406 | ; 102
1407 | 
1408 | ###########
1409 | #....#    #
1410 | #  #   $$ #
1411 | #  @  ##  #
1412 | #     ##$ #
1413 | ######  $ #
1414 |      #    #
1415 |      ######
1416 | 
1417 |
1418 |
1419 | ; 103
1420 | 
1421 |   #####
1422 |   # . ##
1423 | ### $  #
1424 | # . $#@#
1425 | # #$ . #
1426 | #  $ ###
1427 | ## . #
1428 |  #####
1429 | 
1430 |
1431 |
1432 | ; 104
1433 | 
1434 |     #####
1435 | #####   #
1436 | #    $  #
1437 | #  $#$#@#
1438 | ### #   #
1439 |   # ... #
1440 |   ###  ##
1441 |     #  #
1442 |     ####
1443 | 
1444 |
1445 |
1446 | ; 105
1447 | 
1448 |  #### ####
1449 | ##  ###  ##
1450 | #   # #   #
1451 | #  *. .*  #
1452 | ###$   $###
1453 |  #   @   #
1454 | ###$   $###
1455 | #  *. .*  #
1456 | #   # #   #
1457 | ##  ###  ##
1458 |  #### ####
1459 | 
1460 |
1461 |
1462 | ; 106
1463 | 
1464 |  ########
1465 |  #      #
1466 |  #@   $ #
1467 | ## ###$ #
1468 | # .....###
1469 | # $ $ $  #
1470 | ###### # #
1471 |      #   #
1472 |      #####
1473 | 
1474 |
1475 |
1476 | ; 107
1477 | 
1478 | ########
1479 | #      #
1480 | # $*** #
1481 | # *  * #
1482 | # *  * #
1483 | # ***. #
1484 | #     @#
1485 | ########
1486 | 
1487 |
1488 |
1489 | ; 108
1490 | 
1491 | ####     #####
1492 | #  ###   #   ##
1493 | #    #   #$ $ #
1494 | #..# ##### #  #
1495 | #  @    # $ $ #
1496 | #..#         ##
1497 | ##   #########
1498 |  #####
1499 | 
1500 |
1501 |
1502 | ; 109
1503 | 
1504 |   #######
1505 | # #     #
1506 | # # # # #
1507 |   # @ $ #
1508 | ### ### #
1509 | #   ### #
1510 | # $  ##.#
1511 | ## $  #.#
1512 |  ## $  .#
1513 | # ## $#.#
1514 | ## ## #.#
1515 | ### #   #
1516 | ### #####
1517 | 
1518 |
1519 |
1520 | ; 110
1521 | 
1522 |   ####
1523 |   #  #
1524 |   # $####
1525 | ###. .  #
1526 | # $ # $ #
1527 | #  . .###
1528 | ####$ #
1529 |    # @#
1530 |    ####
1531 | 
1532 |
1533 |
1534 | ; 111
1535 | 
1536 | ######
1537 | #    ####
1538 | #    ...#
1539 | #    ...#
1540 | ######  #
1541 |   #  #  #
1542 |   # $$ ##
1543 |   # @$  #
1544 |   # $$  #
1545 |   ## $# #
1546 |    #    #
1547 |    ######
1548 | 
1549 |
1550 |
1551 | ; 112
1552 | 
1553 |  #####
1554 | ##   ####
1555 | #  $$$  #
1556 | # #   $ #
1557 | #   $## ##
1558 | ###  #.  #
1559 |   #  #   #
1560 |  ##### ###
1561 |  #   # ##
1562 |  # @....#
1563 |  #      #
1564 |  #   #  #
1565 |  ########
1566 | 
1567 |
1568 |
1569 | ; 113
1570 | 
1571 |    #####
1572 |   ##   #
1573 | ###  # #
1574 | #    . #
1575 | #  ## #####
1576 | #  . . #  ##
1577 | #  # @ $   ###
1578 | #####. #  $  #
1579 |     ####  $  #
1580 |        ## $ ##
1581 |         #  ##
1582 |         #  #
1583 |         ####
1584 | 
1585 |
1586 |
1587 | ; 114
1588 | 
1589 | ######
1590 | #    ###
1591 | #  # $ #
1592 | #  $ @ #
1593 | ## ## #####
1594 | #  #......#
1595 | # $ $ $ $ #
1596 | ##   ######
1597 |  #####
1598 | 
1599 |
1600 |
1601 | ; 115
1602 | 
1603 |     #####
1604 | #####   ####
1605 | #     #    #
1606 | #  #.....  #
1607 | ##  ## # ###
1608 |  #$$@$$$ #
1609 |  #     ###
1610 |  #######
1611 | 
1612 |
1613 |
1614 | ; 116
1615 | 
1616 |      #####
1617 |    ###   #
1618 | ####.....#
1619 | # @$$$$$ #
1620 | #     # ##
1621 | #####   #
1622 |     #####
1623 | 
1624 |
1625 |
1626 | ; 117
1627 | 
1628 |  #### ####
1629 |  #  ###  ##
1630 |  #      @ #
1631 | ##..###   #
1632 | #      #  #
1633 | #...#$  # #
1634 | # ## $$ $ #
1635 | #  $    ###
1636 | ####  ###
1637 |    ####
1638 | 
1639 |
1640 |
1641 | ; 118
1642 | 
1643 |  #####
1644 | ##   ##
1645 | #  $  ##
1646 | # $ $  ##
1647 | ###$# . ##
1648 |   # # .  #
1649 |  ## ##.  #
1650 |  # @  . ##
1651 |  #   #  #
1652 |  ########
1653 | 
1654 |
1655 |
1656 | ; 119
1657 | 
1658 |   ######
1659 |   #    ##
1660 |  ## ##  #
1661 |  # $$ # #
1662 |  # @$ # #
1663 |  #    # #
1664 | #### #  #
1665 | #  ... ##
1666 | #     ##
1667 | #######
1668 | 
1669 |
1670 |
1671 | ; 120
1672 | 
1673 |       ####
1674 | #######  #
1675 | # $      ##
1676 | # $#####  #
1677 | #  @#  #  #
1678 | ## ##..   #
1679 | #  # ..####
1680 | # $  ###
1681 | # $###
1682 | #  #
1683 | ####
1684 | 
1685 |
1686 |
1687 | ; 121
1688 | 
1689 |  ######
1690 |  # .  #
1691 | ##$.# #
1692 | #  *  #
1693 | # ..###
1694 | ##$ # #####
1695 | ## ## #   #
1696 | #  #### # #
1697 | #   @ $ $ #
1698 | ##  #     #
1699 |  ##########
1700 | 
1701 |
1702 |
1703 | ; 122
1704 | 
1705 | #####
1706 | #   ###
1707 | # #$  #
1708 | # $   #
1709 | # $ $ #
1710 | # $#  #
1711 | #  @###
1712 | ## ########
1713 | #      ...#
1714 | #         #
1715 | ########..#
1716 |        ####
1717 | 
1718 |
1719 |
1720 | ; 123
1721 | 
1722 | ########
1723 | #      #
1724 | # $ $$ ########
1725 | ##### @##. .  #
1726 |     #$  # .   #
1727 |     #   #. . ##
1728 |     #$# ## # #
1729 |     #        #
1730 |     #  ###  ##
1731 |     #  # ####
1732 |     ####
1733 | 
1734 |
1735 |
1736 | ; 124
1737 | 
1738 | ##############
1739 | #      #     #
1740 | # $@$$ # . ..#
1741 | ## ## ### ## #
1742 |  # #       # #
1743 |  # #   #   # #
1744 |  # ######### #
1745 |  #           #
1746 |  #############
1747 | 
1748 |
1749 |
1750 | ; 125
1751 | 
1752 |       #####
1753 |       #   ##
1754 |       # $  #
1755 | ######## #@##
1756 | # .  # $ $  #
1757 | #        $# #
1758 | #...#####   #
1759 | #####   #####
1760 | 
1761 |
1762 |
1763 | ; 126
1764 | 
1765 |  ###########
1766 | ##.......  #
1767 | # $$$$$$$@ #
1768 | #   # # # ##
1769 | # # #     #
1770 | #   #######
1771 | #####
1772 | 
1773 |
1774 |
1775 | ; 127
1776 | 
1777 | ## ####
1778 | ####  ####
1779 |  # $ $.  #
1780 | ## #  .$ #
1781 | #   ##.###
1782 | #  $  . #
1783 | # @ #   #
1784 | #  ######
1785 | ####
1786 | 
1787 |
1788 |
1789 | ; 128
1790 | 
1791 |   #########
1792 | ###   #   #
1793 | # * $ . . #
1794 | #   $ ## ##
1795 | ####*#   #
1796 |  #  @  ###
1797 |  #   ###
1798 |  #####
1799 | 
1800 |
1801 |
1802 | ; 129
1803 | 
1804 |   #########
1805 | ### @ #   #
1806 | # * $ *.. #
1807 | #   $ #   #
1808 | ####*#  ###
1809 |  #     ##
1810 |  #   ###
1811 |  #####
1812 | 
1813 |
1814 |
1815 | ; 130
1816 | 
1817 | #####  #####
1818 | #   ####.. #
1819 | # $$$      #
1820 | #   $#  .. #
1821 | ### @#  ## #
1822 |   #  ##    #
1823 |   ##########
1824 | 
1825 |
1826 |
1827 | ; 131
1828 | 
1829 | #####
1830 | #   #
1831 | # . #
1832 | #.@.###
1833 | ##.#  #
1834 | #  $  #
1835 | # $   #
1836 | ##$$  #
1837 |  #  ###
1838 |  #  #
1839 |  ####
1840 | 
1841 |
1842 |
1843 | ; 132
1844 | 
1845 | ####
1846 | # @###
1847 | #.*  #####
1848 | #..#$$ $ #
1849 | ##       #
1850 |  # # ##  #
1851 |  #   #####
1852 |  #####
1853 | 
1854 |
1855 |
1856 | ; 133
1857 | 
1858 |  #######
1859 |  #  . .###
1860 |  # . . . #
1861 | ### #### #
1862 | #  @$  $ #
1863 | #  $$  $ #
1864 | ####   ###
1865 |    #####
1866 | 
1867 |
1868 |
1869 | ; 134
1870 | 
1871 |         ####
1872 | #########  #
1873 | #   ## $   #
1874 | #  $   ##  #
1875 | ### #. .# ##
1876 |   # #. .#$##
1877 |   # #   #  #
1878 |   # @ $    #
1879 |   #  #######
1880 |   ####
1881 | 
1882 |
1883 |
1884 | ; 135
1885 | 
1886 | #######
1887 | #     #####
1888 | # $$#@##..#
1889 | # #       #
1890 | #  $ # #  #
1891 | #### $  ..#
1892 |    ########
1893 | 
1894 |
1895 |
1896 | ; 136
1897 | 
1898 |  #######
1899 |  #     #
1900 | ## ###$##
1901 | #.$   @ #
1902 | # .. #$ #
1903 | #.##  $ #
1904 | #    ####
1905 | ######
1906 | 
1907 |
1908 |
1909 | ; 137
1910 | 
1911 |        ####
1912 |       ##  ###
1913 | ####  #  $  #
1914 | #  #### $ $ #
1915 | #   ..# #$  #
1916 | #  #   @  ###
1917 | ## #..# ###
1918 |  # ## # #
1919 |  #      #
1920 |  ########
1921 | 
1922 |
1923 |
1924 | ; 138
1925 | 
1926 |   ####
1927 | ###  #
1928 | #    ###
1929 | # # . .#
1930 | # @ ...####
1931 | # # # #   ##
1932 | #   # $$   #
1933 | #####  $ $ #
1934 |     ##$ # ##
1935 |      #    #
1936 |      ######
1937 | 
1938 |
1939 |
1940 | ; 139
1941 | 
1942 |  ####
1943 | ##  ####
1944 | #   ...#
1945 | #   ...#
1946 | #   # ##
1947 | #   #@ #### ####
1948 | ##### $   ###  #
1949 |     #  ##$ $   #
1950 |    ###     $$  #
1951 |    # $  ##   ###
1952 |    #    ######
1953 |    ######
1954 | 
1955 |
1956 |
1957 | ; 140
1958 | 
1959 | ######## #####
1960 | #  #   ###   #
1961 | #      ## $  #
1962 | #.# @ ## $  ##
1963 | #.#   # $  ##
1964 | #.#    $  ##
1965 | #. ## #####
1966 | ##    #
1967 |  ######
1968 | 
1969 |
1970 |
1971 | ; 141
1972 | 
1973 |   ########
1974 |   #  # . #
1975 |   #   .*.#
1976 |   #  # * #
1977 | ####$##.##
1978 | #      $ #
1979 | # $ ## $ #
1980 | #   @#   #
1981 | ##########
1982 | 
1983 |
1984 |
1985 | ; 142
1986 | 
1987 |   ####
1988 |   #  #
1989 |   #  ####
1990 | ###$.$  #
1991 | #  .@.  #
1992 | #  $.$###
1993 | ####  #
1994 |    #  #
1995 |    ####
1996 | 
1997 |
1998 |
1999 | ; 143
2000 | 
2001 | ####
2002 | #  ####
2003 | # $   #
2004 | # .#  #
2005 | # $# ##
2006 | # .  #
2007 | #### #
2008 |    # #
2009 |  ### ###
2010 |  #  $  #
2011 | ## #$# ##
2012 | # $ @ $ #
2013 | # ..#.. #
2014 | ###   ###
2015 |   #####
2016 | 
2017 |
2018 |
2019 | ; 144
2020 | 
2021 |    ####
2022 |  ###  #####
2023 |  # $$ #   #
2024 |  # $ . .$$##
2025 |  # .. #. $ #
2026 | ### #** .  #
2027 | #  . **# ###
2028 | # $ .# .. #
2029 | ##$$.@. $ #
2030 |  #   # $$ #
2031 |  #####  ###
2032 |      ####
2033 | 
2034 |
2035 |
2036 | ; 145
2037 | 
2038 |    #####
2039 |    # @ #
2040 |   ##   ##
2041 | ###.$$$.###
2042 | #  $...$  #
2043 | #  $.#.$  #
2044 | #  $...$  #
2045 | ###.$$$.###
2046 |   ##   ##
2047 |    #   #
2048 |    #####
2049 | 
2050 |
2051 |
2052 | ; 146
2053 | 
2054 |  #######
2055 | ##  .  ##
2056 | # .$$$. #
2057 | # $. .$ #
2058 | #.$ @ $.#
2059 | # $. .$ #
2060 | # .$$$. #
2061 | ##  .  ##
2062 |  #######
2063 | 
2064 |
2065 |
2066 | ; 147
2067 | 'reduction of (Mas Sasquatch 8)'
2068 | 
2069 |        #####
2070 | ########   #
2071 | #.   .  @#.#
2072 | #  ###     #
2073 | ## $  #    #
2074 |  # $   #####
2075 |  # $#  #
2076 |  ## #  #
2077 |   #   ##
2078 |   #####
2079 | 
2080 |
2081 |
2082 | ; 148
2083 | 'from (Original 18)'
2084 | 
2085 | ###########
2086 | #  .  #   #
2087 | # #.  @   #
2088 | #  #..# #######
2089 | ##  ## $$ $ $ #
2090 |  ##           #
2091 |   #############
2092 | 
2093 |
2094 |
2095 | ; 149
2096 | 'from (Boxxle 43)'
2097 | 
2098 |  ####
2099 | ##  ###
2100 | #@$   #
2101 | ### $ #
2102 |  #  ######
2103 |  #  $....#
2104 |  #  # ####
2105 |  ## # #
2106 |  # $# #
2107 |  #    #
2108 |  #  ###
2109 |  ####
2110 | 
2111 |
2112 |
2113 | ; 150
2114 | 'from (Original 47)'
2115 | 
2116 |      ####
2117 |  #####  #
2118 |  #     $#######
2119 | ## ## ..#  ...#
2120 | # $ $$#$  @   #
2121 | #        ###  #
2122 | #######  # ####
2123 |       ####
2124 | 
2125 |
2126 |
2127 | ; 151
2128 | 'from (Original 47)'
2129 | 
2130 |    ####
2131 |    #  #
2132 |  ###  #
2133 | ##  $ #
2134 | #   # #
2135 | # #$$ ######
2136 | # #   #   .#
2137 | #  $  @   .#
2138 | ###  ####..#
2139 |   ####  ####
2140 | 
2141 |
2142 |
2143 | ; 152
2144 | 'reduced (Mas Sasquatch 23)'
2145 | 
2146 | ###### ####
2147 | #     #    #
2148 | #.##  #$##  #
2149 | #   #     #  #
2150 | #$  # ###  #  #
2151 | # #      #  # #
2152 | # # ####  # # #
2153 | #. @    $ * . #
2154 | ###############
2155 | 
2156 |
2157 |
2158 | ; 153
2159 | 'reduction of (Revenge 306)'
2160 | 
2161 | #############
2162 | #.# @#  #   #
2163 | #.#$$   # $ #
2164 | #.#  # $#   #
2165 | #.# $#  # $##
2166 | #.#  # $#  #
2167 | #.# $#  # $#
2168 | #..  # $   #
2169 | #..  #  #  #
2170 | ############
2171 | 
2172 |
2173 |
2174 | ; 154
2175 | 'Take the long way home.'
2176 | 
2177 |  ############################
2178 |  #                          #
2179 |  # ######################## #
2180 |  # #                      # #
2181 |  # # #################### # #
2182 |  # # #                  # # #
2183 |  # # # ################ # # #
2184 |  # # # #              # # # #
2185 |  # # # # ############ # # # #
2186 |  # # # # #            # # # #
2187 |  # # # # # ############ # # #
2188 |  # # # # #              # # #
2189 |  # # # # ################ # #
2190 |  # # # #                  # #
2191 | ##$# # #################### #
2192 | #. @ #                      #
2193 | #############################
2194 | 
2195 |
2196 |
2197 | ; 155
2198 | 'The Dungeon'
2199 | 
2200 |     ######               ####
2201 | #####*#  #################  ##
2202 | #   ###                      #
2203 | #        ########  ####  ##  #
2204 | ### ####     #  ####  ####  ##
2205 | #*# # .# # # #     #     #   #
2206 | #*# #  #     # ##  # ##  ##  #
2207 | ###    ### ###  # ##  # ##  ##
2208 |  #   # #*#      #     # #    #
2209 |  #   # ###  #####  #### #    #
2210 |  #####   #####  ####### ######
2211 |  #   # # #**#               #
2212 | ## # #   #**#  #######  ##  #
2213 | #    #########  #    ##### ###
2214 | # #             # $        #*#
2215 | #   #########  ### @#####  #*#
2216 | #####       #### ####   ######
2217 | 
2218 |
2219 | 2220 | 2227 | 2228 |
2229 | 2230 | -------------------------------------------------------------------------------- /js/jquery.processEach.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery processEach plugin 3 | * - Copyright (c) 2010 Borgar Þorsteinsson 4 | * 5 | * Description: A variation of the code each function for enormous or labour intensive 6 | * loops where the thread is yelded every iteration to prevent script timeouts. 7 | * 8 | * Licenced under the terms of the MIT/GPL software licenses. 9 | */ 10 | /*global jQuery */ 11 | jQuery.processEach = function ( obj, callback, done ) { 12 | 13 | if ( typeof obj === 'object' ) { 14 | 15 | var subject, keys; 16 | 17 | // for normal arrays, or jQuery objects, trust the length 18 | if ( $.isArray( obj ) ) { 19 | subject = obj.concat(); // array clone 20 | } 21 | else if ( obj instanceof jQuery ) { 22 | subject = obj.get(); 23 | } 24 | // copy regular objects into an array 25 | else { 26 | keys = []; 27 | subject = {}; 28 | for ( k in obj ) { 29 | keys[ keys.length ] = k; 30 | subject[ k ] = obj[ k ]; 31 | } 32 | } 33 | 34 | var i = 0, 35 | l = (keys || subject).length; 36 | 37 | (function f () { 38 | 39 | var res, timer = new Date(); 40 | while ( (res !== false) && (i < l) && (new Date() - timer < 100) ) { 41 | 42 | var key = keys ? keys[ i++ ] : i++; 43 | var res = callback.call( subject[ key ], key, subject[ key ] ); 44 | 45 | } 46 | if ( res !== false && i < l ) { 47 | setTimeout( f, 1 ); 48 | } 49 | else if ( $.isFunction( done ) ) { 50 | done.call( obj, res ); 51 | } 52 | 53 | })(); 54 | 55 | } 56 | 57 | }; 58 | 59 | jQuery.fn.processEach = function ( callback, done ) { 60 | jQuery.processEach( this, callback, done ); 61 | return this; 62 | }; -------------------------------------------------------------------------------- /js/jquery.sokoban.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery Sokoban 3 | * http://galdrar.net/sokoban 4 | * 5 | * Copyright (c) 2009 Borgar Þorsteinsson 6 | * Licensed under the terms of the GPL v3 license. 7 | * http://www.gnu.org/licenses/gpl-3.0.html 8 | * 9 | */ 10 | (function($){ 11 | 12 | var _R = RegExp; 13 | var _LINE = /^(\s*)(\#|\#[ \.\@\+\$\*\#]*\#)(\s*)$/; 14 | var _CLS = 'soko-'; 15 | var _LC = $( '
' ); 16 | 17 | function _obj () { return {}; } 18 | 19 | function reMap ( a ) { 20 | return { 21 | dock: "+*.".indexOf( a ) !== -1, 22 | box: "$*".indexOf( a ) !== -1, 23 | man: "+@".indexOf( a ) !== -1, 24 | wall: (a === '#') 25 | } 26 | } 27 | 28 | function Sokoban ( level ) { 29 | this.level = $( level ); 30 | this.original = this.level.text(); 31 | var ok = this.processLevelData(); 32 | if ( ok ) { 33 | this.level.bind( 'keydown', function ( e ) { // keypress doesn't work in safari 34 | $( this ).data( 'sokoban' ).keyhandler( e ); 35 | return false; 36 | }); 37 | } 38 | } 39 | Sokoban.prototype = { 40 | 41 | processLevelData: function () { 42 | var pre = [], post = [], level = [], wid = 0; 43 | var lines = this.level.text().split( '\n' ); 44 | for ( var line, i=0; i 0 ) { 55 | post = lines.slice( i ); 56 | break; 57 | } 58 | pre.push( line ); 59 | } 60 | } 61 | this.levelData = level; 62 | this.height = level.length; 63 | this.width = wid; 64 | this.indentCleanup(); 65 | this.levelContainer = _LC.clone(); 66 | this.moves = 0; 67 | this.pushes = 0; 68 | var men = this.count( 'man' ), 69 | docks = this.count( 'dock' ), 70 | boxes = this.count( 'box' ); 71 | if ( men !== 1 || docks !== boxes || this.height < 3 || this.width < 3 ) { 72 | // this is an unplayable level 73 | return false; 74 | } 75 | this.level 76 | .empty() 77 | .append( '
' + pre.join( '\n' ) + '\n
' ) 78 | .append( this.levelContainer.empty() ) 79 | .append( '
' + post.join( '\n' ) + '
' ); 80 | this.undoBuffer = []; 81 | this.levelContainer 82 | .append( this.renderLevel() ) 83 | .attr( 'tabindex', 1 ); // focusable 84 | this.reTitle(); 85 | return true; 86 | }, 87 | 88 | indentCleanup: function () { 89 | this.scanLevel(function ( t, x, y ) { 90 | if ( x === 0 || y === 0 ||  91 | x === this.width -1 || y === this.height -1 ) { 92 | this.floodFill( x, y ); 93 | } 94 | }); 95 | }, 96 | 97 | floodFill: function ( x, y ) { 98 | if ( x > -1 && y > -1 && y < this.height && x < this.width ) { 99 | var c = this.levelData[ y ][ x ] || {}; 100 | if ( !c.wall && !c.box && !c.man && !c.dock && !c.overflow ) { 101 | c.overflow = true; 102 | this.levelData[ y ][ x ] = c; 103 | this.floodFill( x - 1, y ).floodFill( x, y - 1 ) 104 | .floodFill( x + 1, y ).floodFill( x, y + 1 ); 105 | } 106 | } 107 | return this; 108 | }, 109 | 110 | reTitle: function () { 111 | var s = this.boxesLeft ? '' : 'Solved: '; 112 | this.levelContainer.attr( 'title', s + this.moves + ' / ' + this.pushes ); 113 | }, 114 | 115 | renderLevel: function () { 116 | var r = '', P = ' ' + _CLS; 117 | this.boxesLeft = 0; 118 | for ( var y=0; y'; 120 | for ( var x=0; x' + s + ''; 154 | } 155 | r += '\n'; 156 | } 157 | return r; 158 | }, 159 | 160 | count: function ( attr ) { 161 | var r = 0; 162 | this.scanLevel(function ( t ) { r += t[attr] ? 1 : 0; }); 163 | return r; 164 | }, 165 | 166 | manPos: function () { 167 | var pos; 168 | this.scanLevel(function ( t, x, y ) { 169 | if ( t.man ) { 170 | pos = { x:x, y:y }; 171 | return false; 172 | } 173 | }); 174 | if ( !pos ) { throw 'man overboard'; } 175 | return pos; 176 | }, 177 | 178 | scanLevel: function ( callback ) { 179 | var x, y, t, r; 180 | for ( y=0; y