'From Squeak3.8 of ''5 May 2005'' [latest update: #6665] on 26 October 2005 at 10:37:39 am'! "Change Set: Sokoban Date: 26 October 2005 Author: Robert Hirschfeld (hirschfeld@acm.org) Version: 0.3.4 (0.3.x based on 0.1.3) Prerequisites: none doIt: [SokobanMorph random openInWorld] doIt: [(SokobanMorph forIndex: 1) openInWorld] The game was apparently invented in the early 1980s by Thinking Rabbit, a computer games company in the town of Takarazuka, Japan. The game design is said to have won first prize in a computer games contest. Because of the simplicity and elegance of the rules, and the intellectually challenging complexity of the composed problems, Sokoban quickly became a popular pastime. The object of Sokoban is to push all stones (or boxes) in a maze, such as the one to the right, to the designated goal areas. The player controls the man and the man can only push stones and only one at a time. The restriction of only being able to push the stones makes this game challenging: One can create unsolvable positions. Players will soon learn that this is the main obstacle in solving problems. Advanced players also try to find shorter and shorter solutions, measured in stone pushes and man moves. (Andreas Junghanns) Key mappings: --- Cursor left => move left Cursor right => move right Cursor up => move up Cursor down => move down Shift w/ cursor key => moves as far as possible without pushing boxes Control w/ cursor key => moves as far as possible including pushing boxes a => again (same maze) h => help n => next (another maze, next in line) p => previous (another maze, previous in line) r => random (another maze, random selection) q => quit Acknowledgments: -- Andreas Junghanns (http://www.cs.ualberta.ca/~games/Sokoban/) David W. Skinner (http://users.bentonrea.com/~sasquatch/sokoban/) Version 0.3.x adds new mazes from http://users.bentonrea.com/~sasquatch/sokoban/ such as - Sasquatch (50 puzzles, released January, 1999), - Microban (155 puzzles, revised April, 2000), - Sasquatch III (50 puzzles, released June, 2000), - Sasquatch IV (50 puzzles, released March, 2001), - Sasquatch V (50 puzzles, released December, 2001), - Mas Microban (135 puzzles, released April, 2002), - LOMA NEW RELEASE (10 puzzles, released September, 2002), and - Sasquatch VI NEW RELEASE (50 puzzles, released October, 2002) by David W. Skinner. Enhancement of key mappings motivated by Stephan B. Wessels' Games-Sokoban-sbw.mcz from http://map1.squeakfoundation.org/sm/package/b35f9dd7-3cfc-478f-af77-25825b71a5e0."! Morph subclass: #SokobanMorph instanceVariableNames: 'sworld' classVariableNames: 'Fields' poolDictionaries: '' category: 'Games-Sokoban'! Object subclass: #SokobanWorld instanceVariableNames: 'index maze walls extent position moves pushes' classVariableNames: 'MazeSetName Mazes' poolDictionaries: '' category: 'Games-Sokoban'! !SokobanMorph methodsFor: 'accessing' stamp: 'rhi 7/14/2003 22:52'! sworld "^ " ^ sworld! ! !SokobanMorph methodsFor: 'accessing' stamp: 'rhi 7/14/2003 22:53'! sworld: aSokobanWorld sworld _ aSokobanWorld.! ! !SokobanMorph methodsFor: 'derived accessing' stamp: 'rhi 7/15/2003 17:20'! fields ^ self class fields! ! !SokobanMorph methodsFor: 'event handling' stamp: 'rhi 7/14/2003 20:05'! handlesKeyboard: aMorphicEvent ^ true! ! !SokobanMorph methodsFor: 'event handling' stamp: 'rhi 7/14/2003 18:08'! handlesMouseOver: aMorphicEvent ^ true! ! !SokobanMorph methodsFor: 'event handling' stamp: 'rhi 10/25/2005 23:58'! keyStroke: aKeyboardEvent | char modifiers | char _ aKeyboardEvent keyCharacter. modifiers _ { aKeyboardEvent controlKeyPressed. aKeyboardEvent shiftPressed. }. char = Character arrowLeft ifTrue: [^ self moveLeftModifiers: modifiers]. char = Character arrowRight ifTrue: [^ self moveRightModifiers: modifiers]. char = Character arrowUp ifTrue: [^ self moveUpModifiers: modifiers]. char = Character arrowDown ifTrue: [^ self moveDownModifiers: modifiers]. char asLowercase = $a ifTrue: [^ self again]. char asLowercase = $h ifTrue: [^ self help]. char asLowercase = $n ifTrue: [^ self next]. char asLowercase = $p ifTrue: [^ self previous]. char asLowercase = $q ifTrue: [^ self quit]. char asLowercase = $r ifTrue: [^ self random]. ^ super keyStroke: aKeyboardEvent! ! !SokobanMorph methodsFor: 'event handling' stamp: 'rhi 7/14/2003 18:08'! mouseEnter: aMorphicEvent aMorphicEvent hand newKeyboardFocus: self.! ! !SokobanMorph methodsFor: 'initialization' stamp: 'rhi 7/16/2003 12:33'! initialize self initializeForIndex: 1.! ! !SokobanMorph methodsFor: 'initialization' stamp: 'rhi 7/16/2003 10:07'! initializeForIndex: anInteger self initializeForWorld: (SokobanWorld fromIndex: anInteger).! ! !SokobanMorph methodsFor: 'initialization' stamp: 'rhi 10/26/2005 10:31'! initializeForWorld: aSokobanWorld super initialize. self sworld: aSokobanWorld; extent: (self fieldSize x * aSokobanWorld extent x) @ (self fieldSize y * aSokobanWorld extent y + self controlsHeight + self titleHeight); center: World center; clipSubmorphs: true; forceDestroyAndRedraw.! ! !SokobanMorph methodsFor: 'initialization' stamp: 'rhi 7/16/2003 12:33'! initializeRandom self initializeForWorld: SokobanWorld random.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesLoma self sworld setMazesNamed: #mazesLoma. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesMasMicroban self sworld setMazesNamed: #mazesMasMicroban. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesMasSasquatch self sworld setMazesNamed: #mazesMasSasquatch. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesMicroban self sworld setMazesNamed: #mazesMicroban. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesSasquatch self sworld setMazesNamed: #mazesSasquatch. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesSasquatchIII self sworld setMazesNamed: #mazesSasquatchIII. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesSasquatchIV self sworld setMazesNamed: #mazesSasquatchIV. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesSasquatchV self sworld setMazesNamed: #mazesSasquatchV. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:48'! mazesSasquatchVI self sworld setMazesNamed: #mazesSasquatchVI. self start.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 12/21/2003 22:40'! mazesSelectionMenu | menu | menu _ MenuMorph new defaultTarget: self. self sworld mazeSetNames "asSortedCollection" do: [:each | menu add: each value action: each key]. menu popUpInWorld.! ! !SokobanMorph methodsFor: 'mazes menu' stamp: 'rhi 7/30/2003 17:49'! mazesUAlberta self sworld setMazesNamed: #mazesUAlberta. self start.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 7/16/2003 10:33'! again | position | position _ self position. self delete; initializeForIndex: self sworld index; position: position; openInWorld.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 10/25/2005 17:01'! help ((StringHolder new contents: 'The game was apparently invented in the early 1980s by Thinking Rabbit, a computer games company in the town of Takarazuka, Japan. The game design is said to have won first prize in a computer games contest. Because of the simplicity and elegance of the rules, and the intellectually challenging complexity of the composed problems, Sokoban quickly became a popular pastime. The object of Sokoban is to push all stones (or boxes) in a maze, such as the one to the right, to the designated goal areas. The player controls the man and the man can only push stones and only one at a time. The restriction of only being able to push the stones makes this game challenging: One can create unsolvable positions. Players will soon learn that this is the main obstacle in solving problems. Advanced players also try to find shorter and shorter solutions, measured in stone pushes and man moves. (Andreas Junghanns) Key mappings: --- Cursor left => move left Cursor right => move right Cursor up => move up Cursor down => move down Shift w/ cursor key => moves as far as possible without pushing boxes Control w/ cursor key => moves as far as possible including pushing boxes a => again (same maze) h => help n => next (another maze, next in line) p => previous (another maze, previous in line) r => random (another maze, random selection) q => quit Acknowledgments: -- Andreas Junghanns (http://www.cs.ualberta.ca/~games/Sokoban/) David W. Skinner (http://users.bentonrea.com/~sasquatch/sokoban/)') embeddedInMorphicWindowLabeled: 'About Sokoban') setWindowColor: Color veryLightGray; openInWorld! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 10/26/2005 00:30'! moveDown self moveDownModifiers: { false. false. }.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:01'! moveDownModifiers: anArray self sworld moveDownModifiers: anArray. self forceDestroyAndRedraw.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 10/26/2005 00:30'! moveLeft self moveLeftModifiers: { false. false. }.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:01'! moveLeftModifiers: anArray self sworld moveLeftModifiers: anArray. self forceDestroyAndRedraw.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 10/26/2005 00:31'! moveRight self moveRightModifiers: { false. false. }.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:01'! moveRightModifiers: anArray self sworld moveRightModifiers: anArray. self forceDestroyAndRedraw.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 10/26/2005 00:31'! moveUp self moveUpModifiers: { false. false. }.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:01'! moveUpModifiers: anArray self sworld moveUpModifiers: anArray. self forceDestroyAndRedraw.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 7/16/2003 11:22'! next | position | position _ self position. self delete; initializeForIndex: ((self sworld index + 1) min: self sworld class mazes size); position: position; openInWorld.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 7/16/2003 12:12'! previous | position | position _ self position. self delete; initializeForIndex: ((self sworld index - 1) max: 1); position: position; openInWorld.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 7/16/2003 10:29'! quit self delete.! ! !SokobanMorph methodsFor: 'navigation' stamp: 'rhi 7/16/2003 12:34'! random | position | position _ self position. self delete; initializeRandom; position: position; openInWorld.! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/30/2003 13:50'! addControlsAndScores | controls | controls _ Morph new color: Color darkGray; borderWidth: 0; height: self controlsHeight; width: self width; hResizing: #spaceFill; vResizing: #rigid; listDirection: #leftToRight; cellInset: 1; changeTableLayout; "addMorph: (Morph new color: Color black; height: self controlsHeight; hResizing: #spaceFill; vResizing: #rigid);" addMorph: self buildScores; addMorph: (self buildButtonForm: self downArrow action: #moveDown target: self); addMorph: (self buildButtonForm: self upArrow action: #moveUp target: self); addMorph: (self buildButtonForm: self rightArrow action: #moveRight target: self); addMorph: (self buildButtonForm: self leftArrow action: #moveLeft target: self); addMorph: ((self buildButtonLabel: '?' action: #help target: self balloonText: 'Help') color: Color lightBlue); addMorph: ((self buildButtonLabel: 'X' action: #quit target: self balloonText: 'Quit') color: Color lightRed). self addMorph: (controls position: self topLeft x @ (self bottomLeft y - self controlsHeight)).! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 10/26/2005 10:35'! addTitle | title | title _ Morph new color: Color darkGray; borderWidth: 0; height: self titleHeight; width: self width; hResizing: #spaceFill; vResizing: #rigid; listDirection: #leftToRight; cellInset: 1; changeTableLayout; addMorph: self buildTitle; addMorph: ((self buildButtonForm: self menuForm action: #mazesSelectionMenu target: self) color: Color veryDarkGray). self addMorph: (title position: self topLeft x @ self topLeft y).! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 20:08'! buildButtonForm: aForm action: aSymbol target: anObject | button | (button _ IconicButton new) labelGraphic: aForm; actionSelector: aSymbol; target: anObject; actWhen: #buttonDown; color: Color black; borderWidth: 0; height: self controlsHeight; layoutInset: 3; hResizing: #rigid; vResizing: #rigid; cornerStyle: #square; changeTableLayout. ^ button! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/16/2003 13:06'! buildButtonLabel: aString action: aSymbol target: anObject | button | (button _ SimpleButtonMorph new) label: aString asText allBold; actionSelector: aSymbol; target: anObject; actWhen: #buttonDown; color: Color black; borderWidth: 0; height: self controlsHeight; layoutInset: 3; hResizing: #rigid; vResizing: #rigid; cornerStyle: #square; changeTableLayout. (button findA: StringMorph) color: Color black. ^ button! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/16/2003 13:11'! buildButtonLabel: aString action: aSymbol target: anObject balloonText: anotherString ^ (self buildButtonLabel: aString action: aSymbol target: anObject) setBalloonText: anotherString! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 10/25/2005 22:27'! buildScores ^ TextMorph new contents: ' ', self sworld moves printString, ' Move', (self sworld moves = 1 ifTrue: [''] ifFalse: ['s']), CodeHolder basicNew annotationSeparator, self sworld pushes printString, ' Push', (self sworld pushes = 1 ifTrue: [''] ifFalse: ['es']); color: Color white; backgroundColor: Color transparent; lock! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 10/26/2005 10:33'! buildTitle ^ TextMorph new contents: self titleString; color: Color white; backgroundColor: Color transparent; centered; lock! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 19:05'! controlsHeight ^ self class controlsHeight! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 20:18'! cross ^ Form extent: 9@9 depth: 16 fromArray: #( 65537 0 0 1 65536 65537 65536 0 65537 65536 1 65537 1 65537 0 0 65537 65537 65536 0 0 1 65537 0 0 0 65537 65537 65536 0 1 65537 1 65537 0 65537 65536 0 65537 65536 65537 0 0 1 65536) offset: 0@0! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 20:08'! downArrow ^ Form extent: 9@9 depth: 16 fromArray: #( 14253 862794605 862794605 862729101 934150144 14221 724182793 654911241 654913323 931987456 0 793519881 722086698 652880586 862781440 0 931998474 654977834 648621835 0 0 12107 654911209 717895565 0 0 13164 654976681 789250048 0 0 14254 722085546 929890304 0 0 0 860630796 934150144 0 0 0 934098861 0 0) offset: 0@0! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 10:00'! fieldFor: aCharacter ^ (self fields at: aCharacter) value! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/14/2003 20:37'! fieldSize ^ self class fieldSize! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 10/26/2005 00:08'! forceDestroyAndRedraw | x y topLeftX topLeftY | self removeAllMorphs. self color: (self sworld done ifTrue: [Color veryVeryLightGray] ifFalse: [Color lightGray]). self addTitle. topLeftX _ self topLeft x. topLeftY _ self topLeft y + self titleHeight. y _ 0. self sworld maze do: [:row | x _ 0. row do: [:col | (self sworld allButFree includes: col) ifTrue: [ (col ~= self sworld goal and: [(self sworld wallsAt: (x + 1) @ (y + 1)) = self sworld goal]) ifTrue: [self addMorph: ((self fieldFor: self sworld goal) position: (x * self fieldSize x + topLeftX) @ (y * self fieldSize y + topLeftY))]. self addMorph: ((self fieldFor: col) position: (x * self fieldSize x + topLeftX) @ (y * self fieldSize y + topLeftY))]. x _ x + 1]. y _ y + 1]. self addControlsAndScores.! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 20:08'! leftArrow ^ Form extent: 9@11 depth: 16 fromArray: #( 0 0 0 0 934084608 0 0 0 934162252 864813056 0 0 14221 724249354 862715904 0 0 793520938 722021130 864813056 0 864824106 654977802 722086666 864813056 13164 722085641 722086666 722086666 864878592 12043 646523626 722086698 722086666 864878592 14254 858532522 648685290 722086666 864878592 0 14221 789260970 650717962 864878592 0 0 13132 717892331 934084608 0 0 0 932000621 0) offset: 8@0! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/30/2003 15:32'! menuForm ^ (ColorForm extent: 11@10 depth: 1 fromArray: #( 4292870144 2149580800 2787115008 2149580800 3546284032 4292870144 2149580800 2996830208 2149580800 4292870144) offset: 0@0) colors: {Color transparent . Color white}! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 20:07'! rightArrow ^ Form extent: 9@11 depth: 16 fromArray: #( 934084608 0 0 0 0 864825164 934150144 0 0 0 862726922 724252557 0 0 0 864824074 722021162 793509888 0 0 864824074 722086666 654977834 864813056 0 864889610 722086666 722085641 722088812 0 864889610 722086698 722086634 646524683 0 864889610 722085610 648686250 858535854 0 864889610 650717866 789264269 0 0 934095595 717894476 0 0 0 13165 931987456 0 0 0) offset: 0@0! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/30/2003 17:47'! start | position | position _ self position. self delete; initializeForIndex: 1; position: position; openInWorld.! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/30/2003 13:48'! titleHeight ^ self class titleHeight! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 10/26/2005 10:33'! titleString ^ ' Maze #', self sworld index printString, ' (', self sworld mazeSetName, ')'! ! !SokobanMorph methodsFor: 'private' stamp: 'rhi 7/15/2003 20:07'! upArrow ^ Form extent: 9@8 depth: 16 fromArray: #( 0 0 932001709 0 0 0 14254 793457484 0 0 0 13197 654912266 931987456 0 0 12107 654912266 862715904 0 0 931998474 722020105 724252557 0 0 793455401 724183850 724187021 0 14221 724182761 652879594 652816171 931987456 0 791422634 717892298 648686282 862781440) offset: 0@0! ! !SokobanMorph class methodsFor: 'accessing' stamp: 'rhi 10/26/2005 00:11'! fields "^ " ^ Fields! ! !SokobanMorph class methodsFor: 'accessing' stamp: 'rhi 7/15/2003 17:18'! fields: anIdentityDictionary Fields _ anIdentityDictionary.! ! !SokobanMorph class methodsFor: 'class initialization' stamp: 'rhi 7/16/2003 11:43'! initFields self fields: (IdentityDictionary new at: SokobanWorld free put: [self freeField]; at: SokobanWorld wall put: [self wallField]; at: SokobanWorld box put: [self boxField]; at: SokobanWorld boxAtGoal put: [self boxField]; at: SokobanWorld goal put: [self goalField]; at: SokobanWorld player put: [self playerField]; yourself).! ! !SokobanMorph class methodsFor: 'class initialization' stamp: 'rhi 7/16/2003 08:45'! initialize "doIt: [self initialize]" super initialize. self initFields.! ! !SokobanMorph class methodsFor: 'instance creation' stamp: 'rhi 7/16/2003 10:06'! forIndex: anInteger "doIt: [(self forIndex: 1) openInWorld]" ^ self basicNew initializeForIndex: anInteger! ! !SokobanMorph class methodsFor: 'instance creation' stamp: 'rhi 7/16/2003 10:06'! forWorld: aSokobanWorld "doIt: [(self forWorld: (SokobanWorld fromFile: '.\Screens\screen.1')) openInWorld]" "doIt: [(self forWorld: (SokobanWorld fromIndex: 1)) openInWorld]" ^ self basicNew initializeForWorld: aSokobanWorld! ! !SokobanMorph class methodsFor: 'instance creation' stamp: 'rhi 7/16/2003 10:05'! random "doIt: [self random openInWorld]" ^ self new! ! !SokobanMorph class methodsFor: 'parts bin' stamp: 'rhi 10/25/2005 22:29'! descriptionForPartsBin ^ self partName: 'Sokoban' categories: #('Games') documentation: 'A logic puzzle, created by Hiroyuki Imabayashi in 1982.'! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/19/2003 18:23'! boxField ^ EllipseMorph new extent: self fieldSize; color: Color paleBlue; borderWidth: 1; borderColor: Color darkGray.! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/15/2003 19:06'! controlsHeight ^ self fieldSize x! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/15/2003 19:06'! fieldSize ^ 20 @ 20! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/15/2003 17:17'! freeField ^ Morph new extent: self fieldSize; color: Color white! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/19/2003 18:28'! goalField | m | ^ (m _ BorderedMorph new) extent: self fieldSize; color: Color paleYellow; borderWidth: 1; borderColor: m color darker.! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/19/2003 18:21'! playerField ^ StarMorph new extent: self fieldSize; color: Color orange; borderWidth: 1; borderColor: Color darkGray.! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/30/2003 13:48'! titleHeight ^ self fieldSize x! ! !SokobanMorph class methodsFor: 'private' stamp: 'rhi 7/19/2003 18:36'! wallField | m | ^ (m _ BorderedMorph new) extent: self fieldSize; color: Color paleGreen; borderWidth: 1; borderColor: m color darker; borderRaised! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 17:42'! extent "^ " ^ extent! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 17:42'! extent: aPoint extent _ aPoint.! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/15/2003 18:49'! index "^ " ^ index! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/15/2003 18:49'! index: anInteger index _ anInteger.! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 17:42'! maze "^ >" ^ maze! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 17:42'! maze: aSequenceableCollection maze _ aSequenceableCollection.! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 18:56'! moves "^ " ^ moves! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 18:56'! moves: anInteger moves _ anInteger.! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/15/2003 17:10'! position "^ " ^ position! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 17:42'! position: aPoint position _ aPoint.! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 18:57'! pushes "^ " ^ pushes! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 18:57'! pushes: anInteger pushes _ anInteger.! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 18:01'! walls "^ >" ^ walls! ! !SokobanWorld methodsFor: 'accessing' stamp: 'rhi 7/14/2003 18:01'! walls: aSequenceableCollection walls _ aSequenceableCollection.! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/15/2003 17:05'! allButFree ^ self class allButFree! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! box ^ self class box! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/16/2003 11:10'! boxAtGoal ^ self class boxAtGoal! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/16/2003 11:12'! boxOrBoxAtGoal ^ self class boxOrBoxAtGoal! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! free ^ self class free! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/14/2003 18:35'! freeOrGoal ^ self class freeOrGoal! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! goal ^ self class goal! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! player ^ self class player! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/30/2003 12:42'! playerAtGoal ^ self class playerOrPlayerAtGoal! ! !SokobanWorld methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! wall ^ self class wall! ! !SokobanWorld methodsFor: 'derived accessing' stamp: 'rhi 7/16/2003 11:31'! done ^ self maze noneSatisfy: [:row | row includes: self box]! ! !SokobanWorld methodsFor: 'derived accessing' stamp: 'rhi 7/14/2003 18:21'! mazeAt: aPoint ^ (self maze at: aPoint y) at: aPoint x! ! !SokobanWorld methodsFor: 'derived accessing' stamp: 'rhi 7/14/2003 19:05'! mazeAt: aPoint put: aCharacter ^ (self maze at: aPoint y) at: aPoint x put: aCharacter! ! !SokobanWorld methodsFor: 'derived accessing' stamp: 'rhi 7/30/2003 17:52'! mazeSetName ^ self class mazeSetName! ! !SokobanWorld methodsFor: 'derived accessing' stamp: 'rhi 7/14/2003 18:21'! wallsAt: aPoint ^ (self walls at: aPoint y) at: aPoint x! ! !SokobanWorld methodsFor: 'derived accessing' stamp: 'rhi 7/14/2003 19:06'! wallsAt: aPoint put: aCharacter ^ (self walls at: aPoint y) at: aPoint x put: aCharacter! ! !SokobanWorld methodsFor: 'mazes' stamp: 'rhi 7/30/2003 17:23'! mazeSetNames ^ self class mazeSetNames! ! !SokobanWorld methodsFor: 'mazes' stamp: 'rhi 7/30/2003 17:18'! setMazesNamed: aSymbol self class setMazesNamed: aSymbol.! ! !SokobanWorld methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:19'! moveDownModifiers: anArray self flag: #rhi. "Direction not intuitive!! See moveUp..." self moveBy: 0 @ 1 modifiers: anArray.! ! !SokobanWorld methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:19'! moveLeftModifiers: anArray self moveBy: -1 @ 0 modifiers: anArray.! ! !SokobanWorld methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:20'! moveRightModifiers: anArray self moveBy: 1 @ 0 modifiers: anArray.! ! !SokobanWorld methodsFor: 'navigation' stamp: 'rhi 9/10/2004 11:20'! moveUpModifiers: anArray self flag: #rhi. "Direction not intuitive!! See moveDown..." self moveBy: 0 @ -1 modifiers: anArray.! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 7/14/2003 18:19'! addPadding self addPaddingTo: self maze; addPaddingTo: self walls.! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 7/14/2003 18:19'! addPaddingTo: aSequenceableCollection | x row | x _ self extent x. 1 to: aSequenceableCollection size do: [:idx | row _ aSequenceableCollection at: idx. aSequenceableCollection at: idx put: row, (String new: x - row size withAll: self free)].! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 10/26/2005 00:33'! canMoveBy: aPoint | target | target _ self position + aPoint. ^ (self freeOrGoal includes: (self mazeAt: target)) or: [(self boxOrBoxAtGoal includes: (self mazeAt: target)) and: [self freeOrGoal includes: (self mazeAt: target + aPoint)]]! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 9/10/2004 11:10'! canMoveWithoutPushingBy: aPoint ^ self freeOrGoal includes: (self mazeAt: self position + aPoint)! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 9/10/2004 12:15'! moveBy: aPoint (self canMoveBy: aPoint) ifTrue: [self moveSimplyBy: aPoint].! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 9/10/2004 12:22'! moveBy: aPoint modifiers: anArray anArray first ifTrue: [^ self moveFullBy: aPoint]. anArray second ifTrue: [^ self moveFullWithoutPushingBy: aPoint]. self moveBy: aPoint.! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 9/10/2004 12:17'! moveFullBy: aPoint [self canMoveBy: aPoint] whileTrue: [self moveSimplyBy: aPoint].! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 9/10/2004 12:17'! moveFullWithoutPushingBy: aPoint [self canMoveWithoutPushingBy: aPoint] whileTrue: [self moveSimplyBy: aPoint].! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 9/10/2004 12:14'! moveSimplyBy: aPoint | next | next _ self position + aPoint. (self boxOrBoxAtGoal includes: (self mazeAt: next)) ifTrue: [ self move: next to: next + aPoint. self pushes: self pushes + 1. self playSoundForPush]. self move: self position to: next. self position: next. self moves: self moves + 1. self playSoundForMove.! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 7/16/2003 11:40'! move: aPoint to: anotherPoint self mazeAt: anotherPoint put: ( ((self boxOrBoxAtGoal includes: (self mazeAt: aPoint)) and: [(self wallsAt: anotherPoint) = self goal]) ifTrue: [self boxAtGoal] ifFalse: [self mazeAt: aPoint]); mazeAt: aPoint put: (self wallsAt: aPoint).! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 7/17/2003 09:21'! playSoundForMove "printIt: [SampledSound soundNames]" "self playSoundNamed: 'scratch'." "self playSoundNamed: 'scritch'."! ! !SokobanWorld methodsFor: 'private' stamp: 'rhi 7/17/2003 09:21'! playSoundForPush "printIt: [SampledSound soundNames]" "self playSoundNamed: 'scratch'." "self playSoundNamed: 'scritch'."! ! !SokobanWorld class methodsFor: 'accessing' stamp: 'rhi 7/30/2003 17:34'! mazeSetName "^ " ^ MazeSetName! ! !SokobanWorld class methodsFor: 'accessing' stamp: 'rhi 7/30/2003 17:34'! mazeSetName: aString MazeSetName _ aString.! ! !SokobanWorld class methodsFor: 'accessing' stamp: 'rhi 7/30/2003 17:11'! mazes "^ " ^ Mazes! ! !SokobanWorld class methodsFor: 'accessing' stamp: 'rhi 7/30/2003 15:35'! mazes: anIdentityDictionary Mazes _ anIdentityDictionary.! ! !SokobanWorld class methodsFor: 'class initialization' stamp: 'rhi 7/30/2003 17:15'! initialize "doIt: [self initialize]" super initialize. self setMazesNamed: #mazesUAlberta.! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/16/2003 11:09'! allButFree ^ String with: self box with: self boxAtGoal "with: self free" with: self goal with: self player with: self wall! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! box ^ $$! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/16/2003 11:08'! boxAtGoal ^ $*! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/16/2003 11:12'! boxOrBoxAtGoal ^ String with: self box with: self boxAtGoal! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! free ^ Character space! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/15/2003 17:23'! freeOrGoal ^ String with: self free with: self goal! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! goal ^ $.! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! player ^ $@! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/30/2003 12:54'! playerAtGoal ^ $+! ! !SokobanWorld class methodsFor: 'constants' stamp: 'rhi 7/14/2003 17:42'! wall ^ $#! ! !SokobanWorld class methodsFor: 'instance creation' stamp: 'rhi 7/16/2003 08:50'! fromFile: aString "inspectIt: [self fromFile: '.\Screens\screen.1']" ^ self fromString: (FileStream fileNamed: aString) contentsOfEntireFile! ! !SokobanWorld class methodsFor: 'instance creation' stamp: 'rhi 7/15/2003 18:48'! fromIndex: anInteger "inspectIt: [self fromIndex: 1]" ^ self fromString: (self mazes at: anInteger) index: anInteger! ! !SokobanWorld class methodsFor: 'instance creation' stamp: 'rhi 7/15/2003 18:48'! fromString: aString "inspectIt: [self fromString: ' ##### # # #$ # ### $## # $ $ # ### # ## # ###### # # ## ##### ..# # $ $ ..# ##### ### #@## ..# # ######### #######']" ^ self fromString: aString index: 0! ! !SokobanWorld class methodsFor: 'instance creation' stamp: 'rhi 7/15/2003 18:50'! fromString: aString index: anInteger | world | (world _ self new) maze: (self mazeFrom: aString); walls: (self wallsFrom: aString); extent: (self extentOf: world maze); position: (self playerPositionIn: world maze); index: anInteger; moves: 0; pushes: 0; addPadding. ^ world! ! !SokobanWorld class methodsFor: 'instance creation' stamp: 'rhi 7/15/2003 15:25'! random "inspectIt: [self random]" ^ self fromIndex: self mazes size atRandom! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:38'! mazeSetNames "^ >" ^ OrderedCollection new add: #mazesLoma -> 'Loma'; add: #mazesMasMicroban -> 'Mas Microban'; add: #mazesMasSasquatch -> 'Mas Sasquatch'; add: #mazesMicroban -> 'Microban'; add: #mazesSasquatch -> 'Sasquatch'; add: #mazesSasquatchIII -> 'Sasquatch III'; add: #mazesSasquatchIV -> 'Sasquatch IV'; add: #mazesSasquatchV -> 'Sasquatch V'; add: #mazesSasquatchVI -> 'Sasquatch VI'; add: #mazesUAlberta -> 'University of Alberta'; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 9/9/2004 13:27'! mazeSetNamesAt: aSymbol ^ (self mazeSetNames detect: [:keyValuePair | keyValuePair key == aSymbol]) value! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 7/30/2003 17:13'! mazeSets "^ " ^ IdentityDictionary new at: #mazesLoma put: [self mazesLoma]; at: #mazesMasMicroban put: [self mazesMasMicroban]; at: #mazesMasSasquatch put: [self mazesMasSasquatch]; at: #mazesMicroban put: [self mazesMicroban]; at: #mazesSasquatch put: [self mazesSasquatch]; at: #mazesSasquatchIII put: [self mazesSasquatchIII]; at: #mazesSasquatchIV put: [self mazesSasquatchIV]; at: #mazesSasquatchV put: [self mazesSasquatchV]; at: #mazesSasquatchVI put: [self mazesSasquatchVI]; at: #mazesUAlberta put: [self mazesUAlberta]; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:26'! mazesLoma "http://users.bentonrea.com/~sasquatch/sokoban/loma.html David W. Skinner " ^ IdentityDictionary new at: 1 put: ' ##### ## ## ### # # ###$.# # # $.#@# # #$.# # # # # # # ### ## ## ##### '; at: 2 put: '##### # #### # #$. # # .$#@# ###$. # # ### # # #### '; at: 3 put: ' #### ## # # . # # * # ## *### # $ # # @ # # ### #### '; at: 4 put: '###### # # ## # # . # # $ ### ## * @ # ###$ # # #.# # # # ## # ###### '; at: 5 put: ' #### # # # # # #### ###$$ # # $. # # #..### # @# # ## # ###### '; at: 6 put: ' ##### ## # ### # # $ # # .*.## ## $ # ###@ # #### '; at: 7 put: '##### # ## # $ ## ##$*. ## # .@ # # # # ##### # ## #### '; at: 8 put: ' ##### ## # ### # # * ## # .@$## # * ## ## ## ##### '; at: 9 put: ' #### # # ### ### ## $* # # *. @# # #### # ## ##### '; at: 10 put: '#### ### #@ ### # # $$ ### # $ . # ## .. # ####### '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 10/26/2005 00:22'! mazesMasMicroban "http://users.bentonrea.com/~sasquatch/sokoban/masmicroban.html David W. Skinner " ^ self mazesMasMicroban1, self mazesMasMicroban2! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:26'! mazesMasMicroban1 "http://users.bentonrea.com/~sasquatch/sokoban/masmicroban.html David W. Skinner " ^ IdentityDictionary new at: 1 put: '#### # # # # # ### #.$$@# # . # # ### ####'; at: 2 put: ' ##### # # ##.# # # @ # # $ # # #*## # # #####'; at: 3 put: ' #### #### # # # # # . . # # @$$ # # # ### # # #####'; at: 4 put: ' ##### ## @ #### # # . ## # # # # $$ #. # ## #### ## # #####'; at: 5 put: '###### # # # $$ ### ### @ # # . # ## .## ####'; at: 6 put: ' #### #### # #@.* # # # ### #### $ # # # # ## # #####'; at: 7 put: ' ##### ### # # $# # # .$ # ## ##.# # @# ######'; at: 8 put: '######## # @ # # * # ###.$### # * # # # #####'; at: 9 put: '###### # # # #$@# # .*.# # #$ # # # ######'; at: 10 put: '##### # # # ### #$$$@ # #... # #######'; at: 11 put: '###### #.# # #@$$ # #..$ # ## # #####'; at: 12 put: ' ####### # # # # #$ # ## .*+# # #$ # # # # ## #### # # ####'; at: 13 put: '##### # ### # # # # ###.### # $*$ # # + # #######'; at: 14 put: ' #### ## ### # .$ # #@.$ # # .$ ## ## ## ####'; at: 15 put: '#### # #### # # # #.$**@# ## # # ## #####'; at: 16 put: ' #### ### # # $$ # ## # # ## .#$@# # # # ..#### #####'; at: 17 put: ' ##### # # #$#@# ## $ # # ## #.*. # # # ######'; at: 18 put: ' ##### # ## #$#@ # # $ # ## ### # $. # #. . # #######'; at: 19 put: '####### # # # $$$.# ## #@.# # # .# # # # ## # #####'; at: 20 put: ' #### # ### #$ # # .# # ##*. # # $ ### # @ # #####'; at: 21 put: ' #### #### # #. . ## # # @ # ## # # ## ## # # $ ### # $ # # # ## # # #####'; at: 22 put: ' ######### # # # # $ $ # ## ### # ### # #@### # ### # # # . . # # ####### #####'; at: 23 put: ' ##### ##### # ### # #@$ ##.. # ###$# # # ## ## # # #### # # # #########'; at: 24 put: ' ##### ###### # # ## # # # $@$ # ### ### ### # ## # ### .. # ##### # # # # # # # ## # ## ## ######'; at: 25 put: ' ##### ## ## # .$. # # $#$ # # .$. # # ## ## @## ####'; at: 26 put: '######## # # # ###$ # # # $ # # #.*$@# # #.# # # .# # ########'; at: 27 put: '####### # + # # *$* # #. # .# # # # # # # # # # # $#$ # # # # #######'; at: 28 put: ' ####### # # ### ### # # ..* # # $$@ ## #### ## # # ####'; at: 29 put: '###### # # # ##$### # # $ # # @.*. # ## # # #### ####'; at: 30 put: ' ##### # # ########## # # #. # $ # #. @ # ## #.# ####### # # $$ # ## ##### # #### ######'; at: 31 put: ' ######## # # # # $ # # ##$## #### ## # # @...#$ # # # ###### ## ####'; at: 32 put: '######## # # # # # ###..$.# # #$## # @ # ## $ # # # # # # #####'; at: 33 put: '### ####### ## #### # # ## ...# # ###$ # # ## $$### # ## @ # ###########'; at: 34 put: '##### # #### # .# # ## .. ## # ## @ # # # # # $ #### # $## # $ # # # #####'; at: 35 put: ' ########## # ## ## # ## # # # $# # # # # @ $# # # # #$ # # ### #### ## . ## # .#### # .# #####'; at: 36 put: ' ###### # ## #### ## # ## # # # @$**. # # # # ## # ##### ## ######'; at: 37 put: ' ##### # # ## # ## # $ ## # $#. # ## $ . # # #. # #### @# # # ####'; at: 38 put: ' ###### # # ### ## # # ... # # $ ### # #$## # $ # # @ # ######'; at: 39 put: ' ###### ## # # ## # #@# $ # # *..# ## #$### # # ### # #####'; at: 40 put: ' ##### # # ## . # # * # # # ## # $ # ## * # # @ # #####'; at: 41 put: '##### # #### # # . # # #$. # # @$*# # #### # #####'; at: 42 put: ' ####### # ### ## ###$ # # .. $ # # .##$ ## ### # @## # ## #####'; at: 43 put: ' #### # @## ###### $ ## # . # $ # # $# # ## ..# # ## ###### ####'; at: 44 put: ' #### #### ### # $ # # $$ # # # # @# # ## #### ## # ... # # ### # # # ##### #######'; at: 45 put: ' ### ##### #### #### # # ### # # .. $$$$ # # .. # @# # ############# # #'; at: 46 put: '######## # # # # # # ## ### ## ## #### # ## $$$@ # ## ## # # # . . . #### # ##### #####'; at: 47 put: '###### # ### # $ @ # # ### # # $$ $ # # ### ### ## # # .... # # # # ###### ####'; at: 48 put: ' ##### ##### # ## + # # # $$.$$ # # #.# ### ## . # #######'; at: 49 put: ' ##### ## # # # # .$.## ##$#$ # #.$. # # # # @ ## #####'; at: 50 put: ' ######## # # # ## #$ # # .*@*. # # $# ## # # # ########'; at: 51 put: '######## # $. # # $. # ### ### # $. # #@ $. # ########'; at: 52 put: ' #### # # #$ # # # ####@### # $ # # ..* # # # # ########'; at: 53 put: ' ###### # # #. ..## ###$ @ # # $ $ # # #### #####'; at: 54 put: ' ##### ## # # # # # @ # # # #####.### # . # ### #$#. # # $$ #### # # # # #### #####'; at: 55 put: ' #### ### ## # $ $ # # # # ##$ # # # # ## # # #. # # #.## # ###.## ## # # # @ # #########'; at: 56 put: ' ##### ## # ### .# # # $*$@# # .# # ### # # # ## #####'; at: 57 put: ' ##### ### # ## # # **$ ## # * .# ### #@# # # #####'; at: 58 put: ' #### #### ## # $ # # # # # ## #$$$@# # .. ### # .. ## ### # ####'; at: 59 put: ' ###### # ### # $ $ # ##$# # # ### #@# ## # . . . # # ## # ##########'; at: 60 put: ' ####### ##### # ###### # ## @ ... # # ########## ### # $ $ $ # # # # # # ################'; at: 61 put: '##### # # # ###### #$$$$ $ @# #..... # ##########'; at: 62 put: ' #### # ### # . # #$.@ # #### .$ # # $$.### # # #######'; at: 63 put: '##### # ##### # $ $ ### ## $ $ ## ###### .. # #. . @# # # ### ## ####'; at: 64 put: '######### # ## ## # $ $$*@ # # # . # # ## #. . # # ##### #####'; at: 65 put: '###### # # # ## ## # # * ## # #@* ## # # * # # # * $ # # ## #.## # ### ######'; at: 66 put: ' ##### # # # # # # # #######$ # # $..$##### # # $. .# # # #. .$ # # #####$..$ # # $####### # # # # # # @ # #####'; at: 67 put: ' #### ## ## ## * ## ## $ .$ ## # . @ * # # * . # ## $. $ ## ## * ## ## ## ####'; at: 68 put: ' # #.# # $ # # # # *** # #.$ *@* $.# # *** # # # # $ # #.# #'; at: 69 put: '####### # . . # #.$$$.# # $@$ # #.$$$.# # . . # #######'; at: 70 put: '######## # # # # #.. # # $$$$$# # #...# # # # # @ # ########'; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesMasMicroban2 "http://users.bentonrea.com/~sasquatch/sokoban/masmicroban.html David W. Skinner " ^ IdentityDictionary new at: 71 put: '######## # # # # $.$. # ##. $ # # $ .## # .$.$ # # # @# ########'; at: 72 put: '######### # # # *$*$* # # $...$ # # *. .* # # $...$ # # *$*$* # # @# #########'; at: 73 put: '######### # # # .$.$. # # $.$.$ # # .$@$. # # $.$.$ # # .$.$. # # # #########'; at: 74 put: '######### # # # $.$.$ # # .$.$. # ##$.@.$## # .$.$. # # $.$.$ # # # #########'; at: 75 put: '######### # # # # .$.$. # # $.$.$ # ##.$@$.## # $.$.$ # # .$.$. # # # # #########'; at: 76 put: ' ###### # . ### ## $. # # $*$$ # #..*@*..# # $$*$ # # .$ ## ### . # ######'; at: 77 put: ' ##### # ### ## # ### # .$# # ## #$.$.# # # $.@.$ # # #.$.$# ## # #$. # ### # ## ### # #####'; at: 78 put: ' ####### ## ## # $.$ # # $#.#$ # ##..@.. # # $#.#$ # # $.$ # # # ## ########'; at: 79 put: ' #### #### # # # ##.# # ## #@$ $# # # .$ # ##.$## # #. ##### ####'; at: 80 put: ' #### ##### ## ### # # . # $ # # . .$ $ ## ###*## # # # # @ # # ##### # # ####'; at: 81 put: ' ####### # # ### # # . ### # $ # @ # ## # $ $ # # ##..#### # # # ### ### ### # $ # # ###. # ##### #####'; at: 82 put: ' ########## # # #.#### # ##.$ @ $$ # # .*.$ # # # ### ## ## # # ##########'; at: 83 put: '###### #### # . ### # # @ ## #....# $# # ###### $ # ##$ $ # # ## # $## # # ####'; at: 84 put: '######## # ## # # .. # # . . # ### #### # ## # $$@ # ### $ # ### # # # $ # # ### ######'; at: 85 put: ' #### # # ### # ## # # #$### # $ $ # ##$ # ####### #### # # ## # @ ## # # # ....# # ###### ######'; at: 86 put: ' ##### ## # # # # ## # # $ #### # $$#. # ###$ # # # # ####. # #@#. ## # . # # # #######'; at: 87 put: ' #### # ### ## . ## #. . # #. #@ # ## ## # ## ##### ## $ # ## $ # ## $ ## # $ ## # ## #####'; at: 88 put: ' ###### #. . # # *.## ###$ @ # # $ $ # # #### #####'; at: 89 put: '######## # # # #.# # # * # ##$*$ ## # *@## # #.## # # #####'; at: 90 put: ' ##### # # # ## #$*$ # ##. . # # .@.## # $*$# ## # # # #####'; at: 91 put: ' #### # # # # # ### ###$ $ ## # $@$ # # # # ###### ## ## . .# # . .# # # # #### ####'; at: 92 put: ' ###### #### # @ ###### # # # $ # ## ....# $ # # # ## ## $ ## # ### $ # ######## ## # ####'; at: 93 put: ' #### ### # ## . # ## # # .$. ## # $ ### # .$#### ### # ##$# # # # # # @ ## ### # ####'; at: 94 put: ' ###### #### ### # ## # #### ###..## #### # #$$ # # ## $ $ #... @ # # # # $ ##### # # # #### # ## ## # # ## ##### #####'; at: 95 put: '############# # # # # ## # # ## ### $ $ ## #@...# $$$ # # # ##..######## ####'; at: 96 put: ' #### # # ##### # # $ $ # # .# ### # .#$$ ## ## .# # # *###@ # # ## ## .###### ####'; at: 97 put: '##### ##### # ###### # # # # ## ####### # # # # # # # # #$$ ..... # ## # ####### # #$#@# # $ $ # # # ## #### # ####'; at: 98 put: '##### # ### # # $ ### # # $ # # #.$##@# # #.$ # # .##### ## . # # # ######'; at: 99 put: ' ##### # # # # # ### ###. # ##### # . ### # # . # $ # # #.## $ $ # # . @ $$## ## ### # #### #####'; at: 100 put: ' ####### # ## # ### #### # ## # # $ #### # ####$ .....# # # #### # ####$$# # # $ # #### # @ # # # #### # # # ########'; at: 101 put: ' ##### ### . # # . $## # $$. ### ### .$$@ # ##$ . # # . ### #####'; at: 102 put: ' #### ## # # ##### # # # # # ## .## #####.# ######.### # . # ### #$#. # # $$ $ #### # $ @ # ### #### ####'; at: 103 put: ' ########## # # # ### ... .# # # ## ## # # ## # # ### #@ # # ## ## # ### ##### $#$ # ## # $ # ### $## # ## ##### ####'; at: 104 put: ' ###### #### # # ## ## # ## # # # # # # $$#$$ # ###$ $ $## ## ## ####@#### # . .. # # .. . # # .## # ##### # #####'; at: 105 put: ' #### # ### ## ## # * . # # *$*$ # ## .$. # #@ ### #####'; at: 106 put: ' #### ### # # . ## # #* # # $.#@# ##$.# # # $ # # ### # ## ####'; at: 107 put: ' #### ## #### # $$ # # # # # # $ $# # # # # # #@# # # ## #$# # # .....## # #### #####'; at: 108 put: ' #### # # ## $### # . ### ### .$. # # $.$@$.$ # # .$. ### ### . # ###$ ## # # ####'; at: 109 put: ' ##### # . ##### #$ $$ $ # # .. . .# ##$ .$ # # $. $## #. . .. # #@$ $$ $# ##### . # #####'; at: 110 put: ' ######## # # # ###... . # # # ### # @ # ### # ## ### $ # ## $ # ### $ ## # $ #### # # # # ## # # ## ## # ## #### # ####'; at: 111 put: ' #### # # ### ## # $ .# #### # $#.### # # $ .# # #####.# $ # ###.#$#@ # # . $ # # ### # ## # #### ####'; at: 112 put: '######### # # # # $...$ # # $*@*$ # # $...$ # # # # #########'; at: 113 put: '########### # # # * . * # ##*$*@*$*## # * . * # # # # ###########'; at: 114 put: ' ##### ### # # # # # # # ##### $ $##### # ## # # # # # $ ... $# ## # #.@.# # ## #$ ... $ # # # # # ## # #####$ $ ##### # # # # # # # ### #####'; at: 115 put: ' # # # # # # .$. # # .$.$. # # .$ $ $. # # $.$@$.$ # # .$ $ $. # # .$.$. # # .$. # # # # # #'; at: 116 put: '######## # # # # # # ## ########## ## ## # # # ## # # # ## $ $ $ $ # ## ### #######@# # . . . . # # ############ #####'; at: 117 put: ' #### ####### # ## ## # # # $ # # # ##$ ## # # $ ## #@# .#$ ## # .. ## ###. ### # # ####'; at: 118 put: ' ##### # ## ###### $ ## # ## $ ## # ## $ # #...# ## # # @ ##$ # #...# ## $ ## ##### # $ # # ## # #### ####'; at: 119 put: ' ####### # ### # ###. # # # . # # ## #... # #@ .#### # # # ## ##### # $$ ## # $$ # ### $$ # # # ## ## #####'; at: 120 put: '#### #### # ### ###### # # # ####$ $## # # # # # $ ## ### ## $$ # # ## $ # # # @ # ######## # ## # #......# ###### # ### # ######## ######'; at: 121 put: ' ####### ## . # ## . # # $*.# ## # # . # ## # . ## # ### # # # @## # $$$# # # # # ### # # #$## # # ## ######'; at: 122 put: ' #### ### ## # # ##* # # # *$*. # # @ ## #######'; at: 123 put: ' ##### ### #### # $ $ # # $## $ # ## # # ##### # ### # ... # ##. # ## @## # # ####'; at: 124 put: '######### # # # # $ * $ # #..# #..# # $ # $ # # .$@$. # # $ # $ # #..# #..# # $ * $ # # # # #########'; at: 125 put: ' ########## # ## ##### #### $ # #.. # # # # . # $ # # #.. #### # $ # ## ## # $$# # # # ## ## ###@### ###### # # # # # # # #### # ####'; at: 126 put: ' ####### # # # $$ # # $### # # # # #$ # # # # ## ## ## # ..####### #@###... # # #.#### $ # ### #.# $ $$ # # . # # ######### # ####'; at: 127 put: '##### #@ ###### # $ # # #.*.*. $ # # $ ##### ## # #####'; at: 128 put: ' ####### ## ## ### ### # # # # # #@$***. # # ## # # #### ## # # ## ######'; at: 129 put: ' #### ######## # # $ # # ##.## # ##$## . ## # . $# ## # ###.# # # ### @ # # $ #### # #### ####'; at: 130 put: ' #### ## ### ## @ # ## *$ .# ## ** ## ## ** ## ## ** ## ## ** ## ## ** ## ## ** ## ## ** ## ## ** ## ## ** ## # ** ## # ** ## # #### ####'; at: 131 put: ' #### ### ### ##.$. # ##.$.$$. # ##.$.$$.$## ##.$.$$.$.# ##.$.$$.$.## ##.$.$$.$.## ##.$.$$.$.## ##.$.$$.$.## ##.$.$$.$.## ##.$.$$.$.## #.$.$$.$.## ## $$.$.## #@ $.## ####.## ###'; at: 132 put: ' ##### ##### # # # ### # # ##### # # # ##### # # # #### ## # ### # # ### # # # # # @ # # # # ### # ####$###### #### # ### # # . # # # # # # ## # # # ## ##### ## # ##### # ## ### # # # ### # ##### # ##### # # # # # # # # ##### # ##### # ### # # # ### ## # ##### # ## ##### ## # # # ## # # # # # # # # ### # #### ###### #### # ### # # # # # # # # # ### # # ### # ## #### # # # ##### # # # ##### # # ### # # # ##### #####'; at: 133 put: ' ##### ################## # # # # # # ################ # # # # # # # # # # # ############## # # # # # # # # # # # # # # # ############ # # # # # # # # # # # # # # # # # # ########## # # # # # # # # # # # # # # # # # # # # # ######## # # # # # # # # # # # # # # # # # # # # # # # ###### # # # # # # # # # # # # # # # # # # # # # # # # # # # #### # # # # # # # # # # # # # # # # # # # # # # # # # # ## ## # # # # # # # # # # # # ## ## # # # # # # # # # # # # # @.$# # # # # # # # # # # # # #### # # # # # # # # # # # # # # # # # # # # # # # # # # # ###### # # # # # # # # # # # # # # # # # # # # # # # ######## # # # # # # # # # # # # # # # # # # # # # ########## # # # # # # # # # # # # # # # # # # ############ # # # # # # # # # # # # # # # ############## # # # # # # # # # # # ################ # # # # # # ################## #####'; at: 134 put: ' ##### # ##### ## ###### ## # # # # ##### ####### #### ## # # ## ## ## # # # # # # # ##### ## ## ## # #### ## # #### ##### ## ## # # # # # # # # ##### ## ## # ## # #### ## # #### # # ##### ## ## # # # # # # # # # # ##### ## ## # # # ## # #### # # #### ## # # ##### ## # # # # # # # # # # ## ## ## ###### # # ## # # ## ##### # # ##### ## # # # ### # ## # # ##### # # # ## # # @ # # ## # # # ##### # # ## # ### # # # ## ##### # # ##### ## # # ## # # ###### ## ## ## # # # # # # # # # # ## ##### # # ## #### # # #### # ## # # # ## ## ##### # # # # # # # # # # ## ## ##### # # #### # ## #### # ## # ## ## ##### # # # # # # # # ## ## ##### #### # ## #### # ## ## ## ##### # # # # # # ## ## ## # # # ## #### ## # ## ##### # # $ # . # # ## ###### ## ##### # #####'; at: 135 put: ' #### # # #### ##### # # # #### # # # ##### # # # # #### # # # ##### # #### # # #### # # # # # # ##### # # #### # ##### # # # # ##### # ##### ## ##### ##### # # # # # # ## # ##### ##### ##### # ## # # ## # # ##### #### #### ## # ## ##### # ## # # # # ## ## ## ##### # ## ##### # # # ## ### ## ## ##### # # # # ## ### ### #### #### # # ##### ## ## ### # ##### # ##### ## # ##### ## # # # ##### # # ## # ##### ## ##### ##### # ##### ##### # # ## # # # # # ##### ##### ##### ## ##### # # # # ##### # ##### ##### ##### # # # # # ## # # ##### ##### # ##### ##### ## ##### # ## # # ##### # # # ## ##### # ## ##### # ##### # ### ## ## ##### # # #### #### ### ### ## # # # # ##### ## ## ### ## # # # ##### ## # ##### ## ## ## # # # # ## # ##### ## # ## #### #### ##### # # ## # # ## # ##### ##### ##### # ## # # # # # # ##### ##### ## ##### # ##### # # # # ##### # #### # # ##### # # # # # # #### # # #### # ##### # $# # #### # # # # .##### # # # #### # @# # ##### #### # # #### '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesMasSasquatch "http://users.bentonrea.com/~sasquatch/sokoban/massasquatch.html David W. Skinner " ^ IdentityDictionary new at: 1 put: '##### # ##### # $ $ $ # ### # # # # # # ## ### ## # .....@# # $ $ # # ### ### # # #######'; at: 2 put: ' #### ######..# # . # # # ..# # ## ### # $ ## # # #$ @# # # $ $ # # ## $ ## ##### # #####'; at: 3 put: ' ##### ## ## # ## # @ # ############ #. # # #.## # ############.# # .# ##$#$#$#$#$#$#.# # .# ###############'; at: 4 put: ' ##### ### # #### # $$ #### # ### $ # # # ###$$ $ # # *# @ ## # # ## ##### #..# ## # ## #..# # ## $ # #.. # # ## $ # ..#### # ## # # # #### ## # #####'; at: 5 put: ' ##### #### # # . # ### # $. $ $ # # #.## $ # ###@#..#$ # # ##.# ## # $ $ .# $# ## ###.## # # # ##### ### ####'; at: 6 put: ' ##### ## ###### # @ # # # # $ * # #### ###$#. # #.....# .## #.....# #$#. ### ### . ## # # ## ##$ ### #### # # # $ $ # # $$$# # $ $ # ##### # ###### # #$ # #### ## $ # # # $ # # ### ######'; at: 7 put: ' ##### ########## # #. ........ .## # #### # ## ## $ # # ## # $ # # # ## # $ $ # # # # # $ $ # @ # # $ $$ # # # $## ########### # # # # ## ######'; at: 8 put: ' ######### ##### # ## #### # # $ # @ *..*### # # # #.... # # #$# #.... # # $# # ##$### # # #$ ## ## $ $# #### ## $ #### ### $$ # # # # ### ######'; at: 9 put: ' #### #### ## ### #### $ # #*# #### ######## $ $ # ### # # # $ $ $ $ ## # # ## ## $ $ #### $ ####### # # $$ ##### $ ## # # # ## ## $ $ # # #.# $ # $ $ #### ## ## # #.# $ $ $ #### # # #.#.# $ # # # #.#. ### # ######## # #.#.###@#### ## # ## #............. # ###### # # .########### ## # #### ##### # # ######'; at: 10 put: ' #### ##### ##### ## ## ### ## ## * * . $ # @ ## # ## * ## ### # # # ## * # # $ # # # # * # # # # ## # ## # # ### # # ## # #. $ .## ## # #.# ## ## #.# ## # # $ #. $ .$ ## # #* $.# . ## ##### ## ## # ## # # $ # # # # # ## # #$## # ## ## ########'; at: 11 put: ' #### # #### # $ ######### # .# $ ## # # $# .## $ ## #### .### #$$ # ## ## # .. # $$ # # $ ...# $ # # $ #####... # ## # $# # .**@#### ### # # # # ##### #### # # ## ## ########'; at: 12 put: '# ### ## ## #*.$ # # .$.$ .## # $.$.$ # # $.@.$ # # $.$.$ # ##. $.$. # # $.*# ## ## ### #'; at: 13 put: ' ##### # ##### # # # # # # # #####.# ...##### # .$$ ###$# # # #.# $. # # # .# $$$ # # ### # $@$ # ### # # $$$ #. # # # .$ #.# # # #$### $$. # #####... #.##### # # # # # # # ##### # #####'; at: 14 put: ' ####### # ### # ###$ ## #....$ # ### ## # # ###@.$ # # ## # .*.$ ## # # $.$ #.$$# # ## ## # ##### # ### ### $ # ## # #####'; at: 15 put: ' ##### # ##### # $$# ##### # . $ # ##### ### ## . $ # ##### # ##.### ....$ # ##### # $$# ###.##. # $ # # # # $ # .##.### .$$ # ### ## .$$$# ###.## # # ##.### #$$$. ## ### # $$. ###.##. # $ # # # # $ # .##.### #$$ # ##### # $.... ###.## # ##### # $ . ## ### ##### # $ . # ##### #$$ # ##### @# #####'; at: 16 put: '############# # # # .$.$.$.$. # # $.$.$.$.$ # # .$.$.$.$. # # $.$.$.$.$ # # .$.$@$.$. # # $.$.$.$.$ # # .$.$.$.$. # # $.$.$.$.$ # # .$.$.$.$. # # # #############'; at: 17 put: '############################# # # # .$.$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$@$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$.$. # # # #############################'; at: 18 put: ' ##################### ## # # # # $ $ $ #$ $ $ $ $### # $##### $$ $## ## $ # # # ..# # # # # ##$ ... # # ...#$ ## ## $ ... #$ # ...$ ## # $####..# ##...##$ # # *.*..$$@$$..*.* # # $##...## #..####$ # ## $... # $# ... $ ## ## $#... # # ... $## # # # # #.. # # # $ ## ##$ $$ #####$ # ###$ $ $ $ $# $ $ $ # # # # ## #####################'; at: 19 put: ' ##### ##### # # # # # #.####.# # # .. .. # ##### ### #### ### # # # # # # # ## # #@## # # $ ## # # # ### ## $ ## # $ $.. # ## $ ### # #.# # ## $ ## ## # # ## $ # # ##### ## $ $ ## ##### ## ####'; at: 20 put: ' ######### #### # # #### # # $ # # # ####.# # # $ $ .#### # # $#$## #.#....# ### # $ # #.#....# # $ $ # #..*....# # # ## $ # #### # # $ # # $# ## ## $ # ###### ## $ # $$$# ## $$@## # ## ## ########'; at: 21 put: ' ############# # # # # $ $ $ $ $ # ### ##### ### ####.$ $ $.#### # ...# $ # $ #... # # $##*#.#.#*##$ # ## . . @ . . ## # $##*#.#.#*##$ # # ...# $ # $ #... # ####.$ $ $.#### ### ##### ### # $ $ $ $ $ # # # # #############'; at: 22 put: ' ########## ## # ## ### ####### # $$ # $# # # # ### #$$ # # $$ # #$$# # # #### #$ # ## # ###.*. # ## # ## *.*.#..*.## ### # ***...**.### $$ # # #....#...# # # # # ## ##.*. $ # ### # ## # $ ..## $ # # ## # $$### $#$$ # # # @ # $ # # ##### ##$#### ## ###### ## ########'; at: 23 put: '############## ####### # # # #.########## #$##### # # # # # #*######## # ###### # # # # # # # #*###### # ####### # # # # # # # # # #*#### # ######## # # # # # # # # # # # #*## # ######### # # # # # # # # # # # # # #$ # ########## # # # # # # # # # # # # # # # # # ########### # # # # # # # #. @ $ * * * * * . # ##############################'; at: 24 put: ' #### ####### # # $ ## ######## # ..## $ # ## ##.# # # ####### #.# $ $### ### #######.# # ## # ## # $. $$ # # ## #.# #@# #.# ## # # $$ .$ # ## # ## # #.####### ### ###$ $ #.# ####### # # #.## ## # $ ##.. # ######## ## $ # # ####### ####'; at: 25 put: ' ###### ## ########### # $ $ $ # * ###### # .*.#..*.# .$ ## # * # $ $ * $#*.$ # ## #### # . # * # # $ #########.## .$ # #.*.. * #### ## #$ $ #$#.$$.*# # # # # #*.$$.#$# $ $# ## #### * ..*.# # $. ##.######### $ # # * # . # #### ## # $.*#$ * $ $ # .$ # ## $. #.*..# * @# ###### * # $ *.$ # ########### ## ######'; at: 26 put: '###### ####### # ..# # # # # ..###### $# # ## #. $ ## $ # # $$$ # ##$## #.#. #$ $ # # #.#.## ## $ # #.# $ # # # #. ## @# ##$# #. #### # #. $ $# # #. ######## # #### #####'; at: 27 put: '################ # # ## # # # .$. $ # . . # ## ### # $ #$ # # . # ### ##.## # $ .$ #. # # ### ## # $ $ # ## # ### ## # # ## ### # ## # $ $ # ## ### # # .# $. $ # ##.## ### # . # # $# $ # ### ## # . . #@ $ .$. # # # ## # # ################'; at: 28 put: ' ########## # # # # $ # # #### ##### ### $$ ####### #### # ## $ $ ### ## $ # # $ ### # # ## ##### ### # #$# ..### ## # # # # #.# #.. # # $ $ # ### $ $ #.# #.. # # ## ## # # #.# #### #### ## # ########.# # $ $ # # .. #.# ###### # # # #.$$$$.#.# # # #### #### #.$ @$.#.# # # # $ # #.$$$$.#.# # # #### # # .. . # #### ##### ############'; at: 29 put: ' ##### ####### # ##### ###### #.### # ## # ### #. * # # ###### ## # ### ## # ## $ ..$ # $ ## # # # $ *.$@##### # ## # # ..$ # $ # ## #####$#######$## # . # # $ . #### #### # $$# #########$## . # # # . .# . # $$*$$ # # . # $.$.# #... ...# ##### $ # ## ##### $$*$$ # #.# # . # ######################'; at: 30 put: ' #### ##### ########## # # # # # # .. ## $### # # ##.#. # $$$@ # # #. # $ # # # ######## $ # # ### $ ## # #.############ # #. ## ################'; at: 31 put: ' ##### ## # #### # ### # # # @# # ##$#### ###### # ... ## ## # ... # ## # #### # ##### # ## # # $# # # # $ $ $$ # # # ##### # # ## # # # ###### ### # ## ## #######'; at: 32 put: ' # ## ## # # # .$. # ## $.$ ## # .$.$.$. # # $.$+$.$ # # .$.$.$. # ## $.$$ ## # .$. # # # # # ## ## # # ###'; at: 33 put: '##### # ## # $ ##### ## $ # # ## $ # $########### ## $ $ $ $ # #####$ # # # # # # # # # #######$####### ## #@# # # # # ## # # #..*.*.*...... # ########## # ## #### # #####'; at: 34 put: ' ##### ##### # #### # ## #$.*.$ # # # $.@.$ # # # $.*.$# ## # #### # ##### #####'; at: 35 put: ' ##### ########## # # $ $$$ # # $## # # # # # $ # # # # ##$## .#. # # ..... # # #$ ##.@.## $# # # ..... # # .#. ##$## # # # # $ # # # # # ##$ # # $$$ $ # # ########## #####'; at: 36 put: ' ####### ####### ## . ### ## # $$.$$ # .$.$. # # $ . $ # $.$.$ # #...#... .$@$. # # $ . $ # $.$.$ # # $$.$$ # .$.$. # ## . ### ## ### ### ### ### ## ### ## # .$.$. # .$$$. # # $.$.$ # $...$ # # .$ $. $.#.$ # # $.$.$ # $...$ # # .$.$. # .$$$. # ## ### ## ####### #######'; at: 37 put: ' ##### ##### ##### ##### # $ # ##### ##### # $$ $$ # ##### # #$$ . ##$## . $$# # # $$. ##### . ##### .$$ # # ##### ##.## ##### # ##$ # #.... . ....# # $## # . $ . # @ # . $ . # ##$ # #.... . ....# # $## # ##### ##.## ##### # # $$. ##### . ##### .$$ # # #$$ . ##$## . $$# # ##### # $$ $$ # ##### ##### # $ # ##### ##### ##### #####'; at: 38 put: '##### ##### # ################### # # # $ $ $ $ $ $ $ $ $ $ # # # $ # # # # $ # ## #.###.#.###.#.###.# ## #$ # . # * # . # $# # . # . # . # . # #$###.#.###.@.###.#.###$# # . # . # . # . # #$ # . # * # . # $# ## #.###.#.###.#.###.# ## # $ # # # # $ # # # $ $ $ $ $ $ $ $ $ $ # # # ################### # ##### #####'; at: 39 put: ' ################# # # ##$#.#.#.#.#.#.#$## # $.$.$.$.$.$.$ # # #$#$ $@$ $#$# # # $.$.$.$.$.$.$ # ##$#.#.#.#.#.#.#$## # # #################'; at: 40 put: ' ##### ############### ######## ## $ $ $ $ $ $ $ $ $ $ ## ### # # ### # #.##.#.##.#.##.#.##.#.## # # $# .$ $ $# .$ $ $# .$ # # . #$ $ $. #$ $ $. # # # $##.#.##.#.##.#.##.#.##.#$ # ## . # @ . # ## ## # . # . ## # $#.##.#.##.#.##.#.##.#.##$ # # # .$ $ $# .$ $ $# . # # $. #$ $ $. #$ $ $. #$ # # ##.#.##.#.##.#.##.#.##.# # ### # # ### ## $ $ $ $ $ $ $ $ $ $ ## ######## ############### #####'; at: 41 put: ' ########### ## # ## # $$*.$.*$$ # #... ...# # $$*.$.*$$ # ## * ## # $$*.$.*$$ # #... @ ...# # $$*.$.*$$ # ## # ## ###########'; at: 42 put: '########### # # # $## ### ## ##### # # $ $ $ ##### ### # $ # # $. . # # ##$###$## # #...# # # $ # # #. .# ## ## # $ $ $## # #...# # # ## ### #. # #. . # # # $ # # # # # @######## ### # # #### # ### # # #### # ## # ## ### ##### ## ######'; at: 43 put: ' ####### ######## #. # # $ * ##### # ## ## #. # # #### ### # $ $$#$#. # # ######## # # $# # $ * #...... # # $ ### $#. # #### # ## # #$$ # $ .# # # ## # # # $ @## # ## ## ## # ## $$$ # ## ### ##### ## #.##.### # ## #*$.*... ## # # # ## ## ## ### ########### #####'; at: 44 put: ' ####### # @ # ###### ### ###### # # $ # # # $ # $ # ##$###*###*###$## # $ # $ # # # * # # ##$###*###*###$## # # $ # # # ..*...#...*.. # ###### ### ###### # # #######'; at: 45 put: ' #### #### .# #### # .#### ### #### ##.. ## # $ # #$ #... # # # # # #... # # #$ # $ $ # # #### $ # # @## # # #$$##### ## # $ $ # # ##### ###### # # #### # ####'; at: 46 put: ' #### #### # ### # #### $ $ ####### # $ #$ ## #### # ### ### # # ## $ ###### # # # $ # ## ##### # # # # # # $$ # ## ### # # #$.## $ # # ###### $ # ### ## #....*.**.# # # # ## #### # ##### ##### ##$## ###$# ## # $ # ####### # $ ############# # $ ###### ## @ # # ......... # ##############################'; at: 47 put: ' ##### # . # ##### . ##### # $ . $ # # $ ##.## $ # # # $ # # ###$## ##$### # # *** # # #....$ *@* $....# # # *** # # ###$## ##$### # # $ # # # $ ##.## $ # # $ . $ # ##### . ##### # . # #####'; at: 48 put: ' # # # ## ## # $.$ # # . . # ## $.$.$.$ ## # . # # . # # $.$# $ #$.$ # # . . $@$ . . # # $.$# $ #$.$ # # . # # . # ## $.$.$.$ ## # . . # # $.$ # ## ## # # #'; at: 49 put: ' #### # ###### # $ $ ### #### # $ # ## # #####*#*#$$$ # ## $ # # $ $ $ # ## # # #$ $ $##### $$ ## ## # #### .....# ## # # $ **.## ### # # # $$ #.##. # ## # #.#+* # # # ######.##..$ # ####### # $..##.#### # # *..*.# # .#. # ######$# # # # #####'; at: 50 put: '############################# #. . . . . .# # ## # # # # # # # ## # # ## $ # $ # $ # $ # $ ## # # ##$$$#$$$#$$$#$$$#$$$## # # $...$...$...$...$...$ # # $$.#.$.#.$.#.$.#.$.#.$$ # # $...$...$...$...$...$ # #.###$$$#$$$#$@$#$$$#$$$###.# # $...$...$...$...$...$ # # $$.#.$.#.$.#.$.#.$.#.$$ # # $...$...$...$...$...$ # # ##$$$#$$$#$$$#$$$#$$$## # # ## $ # $ # $ # $ # $ ## # # ## # # # # # # # ## # #. . . . . .# ############################# '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 10/26/2005 00:23'! mazesMicroban "http://users.bentonrea.com/~sasquatch/sokoban/microban.html David W. Skinner " ^ self mazesMicroban1, self mazesMicroban2! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesMicroban1 "http://users.bentonrea.com/~sasquatch/sokoban/microban.html David W. Skinner " self flag: #rhi. "Player missing in #40!!" ^ IdentityDictionary new at: 1 put: '#### # .# # ### #*@ # # $ # # ### ####'; at: 2 put: '###### # # # #@ # # $* # # .* # # # ######'; at: 3 put: ' #### ### #### # $ # # # #$ # # . .#@ # #########'; at: 4 put: '######## # # # .**$@# # # ##### # ####'; at: 5 put: ' ####### # # # .$. # ## $@$ # # .$. # # # ########'; at: 6 put: '###### ##### # ### # # $$ #@# # $ #... # # ######## #####'; at: 7 put: '####### # # # .$. # # $.$ # # .$. # # $.$ # # @ # #######'; at: 8 put: ' ###### # ..@# # $$ # ## ### # # # # #### # # ## # # # # # # ### # #####'; at: 9 put: '##### #. ## #@$$ # ## # ## # ##.# ###'; at: 10 put: ' ##### #. # #.# # #######.# # # @ $ $ $ # # # # # ### # # #########'; at: 11 put: ' ###### # # # ##@## ### # $ # # ..# $ # # # # ###### ####'; at: 12 put: '##### # ## # $ # ## $ #### ###@. # # .# # # # #######'; at: 13 put: '#### #. ## #.@ # #. $# ##$ ### # $ # # # # ### ####'; at: 14 put: '####### # # # # # # #. $*@# # ### #####'; at: 15 put: ' ### ######@## # .* # # # # #####$# # # # #####'; at: 16 put: ' #### # #### # ## ## ## # #. .# @$## # # $$ # # .# # ##########'; at: 17 put: '##### # @ # #...# #$$$## # # # # ######'; at: 18 put: '####### # # #. . # # ## ## # $ # ###$ # #@ # # # ####'; at: 19 put: '######## # .. # # @$$ # ##### ## # # # # # # ####'; at: 20 put: '####### # ### # @$$..# #### ## # # # # #### # # ####'; at: 21 put: '#### # #### # . . # # $$#@# ## # ######'; at: 22 put: '##### # ### #. . # # # # ## # # #@$$ # # # # ### ####'; at: 23 put: '####### # * # # # ## # ## #$@.# # # #####'; at: 24 put: '# ##### # # ###$$@# # ### # # # . . # #######'; at: 25 put: ' #### # ### # $$ # ##... # # @$ # # ### #####'; at: 26 put: ' ##### # @ # # # ###$ # # ...# # $$ # ### # ####'; at: 27 put: '###### # .# # ## ## # $$@# # # # #. ### #####'; at: 28 put: '##### # # # @ # # $$### ##. . # # # ######'; at: 29 put: ' ##### # ## # # ###### # ## #. # # $ $ @ ## # ######.# # # ##########'; at: 30 put: '#### # ### # $$ # #... # # @$ # # ## #####'; at: 31 put: ' #### ## # ##@$.## # $$ # # . . # ### # #####'; at: 32 put: ' #### ## ### # # #.**$@# # ### ## # ####'; at: 33 put: '####### #. # # # $ # #. $#@# # $ # #. # # #######'; at: 34 put: ' #### ### #### # # #@$***. # # # #########'; at: 35 put: ' #### ## # #. $# #.$ # #.$ # #.$ # #. $## # @# ## # #####'; at: 36 put: '#### # ############ # $ $ $ $ $ @ # # ..... # ###############'; at: 37 put: ' ### ##### #.# # ###.# # $ #.# # $ $ # #####@# # # # #####'; at: 38 put: '########## # # # ##.### # # # $$ . # # . @$## # ##### # ######'; at: 39 put: '##### # #### # # # .# # $ ### ### #$. # # #@ # # # ###### # # #####'; at: 40 put: ' ##### # # ## ## # $$$ # # .+. # #######'; at: 41 put: '####### # # #@$$$ ## # #...# ## ## ######'; at: 42 put: ' #### # # #@ # ####$.# # $.# # # $.# # ## ######'; at: 43 put: ' #### # @# # # ###### .# # $ .# # $$# .# # #### ### # ####'; at: 44 put: '##### #@$.# #####'; at: 45 put: '###### #... # # $ # # #$## # $ # # @ # ######'; at: 46 put: ' ###### ## # # ## # # # $ # # * .# ## #@## # # #####'; at: 47 put: ' ####### ### # # $ $ # # ### ##### # @ . . # # ### # ##### #####'; at: 48 put: '###### # @ # # # ## # .# ## # .$$$ # # .# # #### # #####'; at: 49 put: '###### # @ # # $# # # $ # # $ ## ### #### # # # #... # # # #######'; at: 50 put: ' #### ### ##### # $ @..# # $ # # ### #### # # # ########'; at: 51 put: '#### # ### # ### # $*@ # ### .# # # # ######'; at: 52 put: ' #### ### @# # $ # # *.# # *.# # $ # ### # ####'; at: 53 put: ' ##### ##. .## # * * # # # # # $ $ # ## @ ## #####'; at: 54 put: ' ###### # # ##### . # ### ###. # # $ $ . ## # @$$ # . # ## ##### ######'; at: 55 put: '######## # @ # # # # #####$ # # ### ## #$ ..# ## # ### ####'; at: 56 put: '##### # ### # $ # ##* . # # @# ######'; at: 57 put: ' #### # # #@ # # # ### #### # * # # $ # #####. # ####'; at: 58 put: '#### # #### #.*$ # # .$# # ## @ # # ## #####'; at: 59 put: '############ # # # ####### @## # # # # # $ # # # $$ ##### # ### # # ...# #### # # ######'; at: 60 put: ' ######### # # ##@##### # # # # # # # $.# # ##$##.# ##$## #.# # $ #.# # # ### ########'; at: 61 put: '######## # # # #### # # #...@# # ###$### # # # # $$ $ # #### ## #.### ###'; at: 62 put: ' ########## #### ## # # $$$....$@# # ### # # #### #### #####'; at: 63 put: '##### #### # ##### .# # $ ######## ### #### .$ @ # # # # #### # #### #### #####'; at: 64 put: ' ###### ## # # $ # # $$ # ### .##### ##.# @ # #. $ # #. #### ####'; at: 65 put: ' ###### # # # $ # ####$ # ## $ $ # #....# ## # @ # ## # # ########'; at: 66 put: ' ### #@# ###$### ## . ## # # # # # # # # # # # # # # # # # # # # ## $ $ ## ##. .## # # # # #####'; at: 67 put: '##### # ## # # # #@$*.## ## . # # $# # ## # #####'; at: 68 put: ' #### # ###### ## $ # # .# $ # # .#$##### # .@ # ######'; at: 69 put: '#### #### # #### # # # # # # # $## # . .#$ # #@ ## # $ # # . # # ###########'; at: 70 put: '##### # @ #### # # # $ $$ # ##$## # # #### # .. # ##.. # ### # ####'; at: 71 put: '########### # # ### # $@$ # . .# # ## ### ## # # # # # # # # # # # ######### # # # #############'; at: 72 put: ' #### ## ##### # $ @ # # $# # #### ##### # # # # $ # # ..# # # .#### # ## ####'; at: 73 put: '#### # ##### # $$ $ # # # ## ## ## #...#@# # ### ## # # # # # ########'; at: 74 put: ' #### # ####### #$ @# .# ## #$$ .# # $ ##..# # # ##### ### # #####'; at: 75 put: ' ####### ## ....## # ###### # $ $ @# ### $ $ # ### # ######'; at: 76 put: ' ##### ## # # ##### # #.# # #@ #.# $ # # #.# ## # # # ## ##$$# ## # # #### ####'; at: 77 put: '########## # @ .... # # ####$## ## # $ $ # # $ # # ###### #####'; at: 78 put: ' ####### ## ## # $ $ # # $ $ $ # ## ### #### #@ .....# ## ### #######'; at: 79 put: ' ######### # # # ## $#$# # # .$.@ # # .# # ##########'; at: 80 put: '#### # ####### # . ## .# # $# .# ## ## # .# # # # #### # # # @$ ### # $$ # # # ######'; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesMicroban2 "http://users.bentonrea.com/~sasquatch/sokoban/microban.html David W. Skinner " ^ IdentityDictionary new at: 81 put: ' ##### # # # . # ## * # # *## # @## ## $ # # # #####'; at: 82 put: '##### # ### # . ## ##*#$ # # .# $ # # @## ## # # #######'; at: 83 put: '###### # ## # $ $ ## ## $$ # # # # # ## ## # . .# # @. .# # #### ####'; at: 84 put: '######## # ... # # ### ## # # $ # ## #@$ # # # $ # # ### ##### # # # ### # ##### #####'; at: 85 put: ' #### ####### # # $ # # $ $ # # ######## ## # . # # # # # # @ . ## ## # # # # . # #######'; at: 86 put: ' #### ### ## ## $ # ## $ # # # @#$$ # # .. ### # ..### #####'; at: 87 put: ' #### ###### # # # # ... .# ##$###### # $ # # $### ## $ # ## @ # ######'; at: 88 put: ' #### # ### # # # # # # # # # #$ #.# # # # # # # #$ #.# # # # # # ####$ #.# # # @ # # # # ## # ########'; at: 89 put: '########## # ## # # $ $@# # #### # $ # #.# ## # #.# $# # #. # # #. # ######'; at: 90 put: ' ######## # @ # # $ $ # ### ## ### # $..$ # # .. # ##########'; at: 91 put: '########### # .## # # $$@..$$ # # ##. # ###########'; at: 92 put: ' #### # # ##### # # # # # ######.# # #### $ . # # $$# ###.# # # # # # # ######### #@ ## # # ####'; at: 93 put: ' ######### ## # ## # # # # $ # $ # # *.* # ####.@.#### # *.* # # $ # $ # # # # ## # ## #########'; at: 94 put: '######### # @ # # # $ $ # ##$### ## # ... # # # # ###### # ####'; at: 95 put: '######## #@ # # .$$. # # $..$ # # $..$ # # .$$. # # # ########'; at: 96 put: ' ###### # # # # ##### # # #.##### # $@$ # #####.# # ## ## ## # $.# # ### #####'; at: 97 put: ' #### # ######## #### $ $.....# # $ ###### #@### ### # $ # # $ # # ## # # # # ######'; at: 98 put: '##### # ## #### # $ ### .# # $ $ .# ## $#####.# #### # $ # # .### # # # # .# @ # ### # # # #### ## ## #######'; at: 99 put: ' ##### # # ####### ####### # # # # # # # # @ #### # #### # # ....## #### # # ##### ## $$ $ $ # ###### # # # ########## ####'; at: 100 put: '####### # @# # #.$ # #. # $## #.$# # #. # $ # # # # ########'; at: 101 put: ' ##### # # # # ####### # * # # ## ## # # # #* # ### # # # ### # *#$+ # # # ## ## # # * # ####### # # # # #####'; at: 102 put: '########### #....# # # # $$ # # @ ## # # ##$ # ###### $ # # # ######'; at: 103 put: ' ##### # . ## ### $ # # . $#@# # #$ . # # $ ### ## . # #####'; at: 104 put: ' ##### ##### # # $ # # $#$#@# ### # # # ... # ### ## # # ####'; at: 105 put: ' #### #### ## ### ## # # # # # *. .* # ###$ $### # @ # ###$ $### # *. .* # # # # # ## ### ## #### ####'; at: 106 put: ' ######## # # #@ $ # ## ###$ # # .....### # $ $ $ # ###### # # # # #####'; at: 107 put: '######## # # # $*** # # * * # # * * # # ***. # # @# ########'; at: 108 put: '#### ##### # ### # ## # # #$ $ # #..# ##### # # # @ # $ $ # #..# ## ## ######### #####'; at: 109 put: ' ####### # # # # # # # # # @ $ # ### ### # # ### # # $ ##.# ## $ #.# ## $ .# # ## $#.# ## ## #.# ### # # ### #####'; at: 110 put: ' #### # # # $#### ###. . # # $ # $ # # . .### ####$ # # @# ####'; at: 111 put: '###### # #### # ...# # ...# ###### # # # # # $$ ## # @$ # # $$ # ## $# # # # ######'; at: 112 put: ' ##### ## #### # $$$ # # # $ # # $## ## ### #. # # # # ##### ### # # ## # @....# # # # # # ########'; at: 113 put: ' ##### ## # ### # # # . # # ## ##### # . . # ## # # @ $ ### #####. # $ # #### $ # ## $ ## # ## # # ####'; at: 114 put: '###### # ### # # $ # # $ @ # ## ## ##### # #......# # $ $ $ $ # ## ###### #####'; at: 115 put: ' ##### ##### #### # # # # #..... # ## ## # ### #$$@$$$ # # ### #######'; at: 116 put: ' ##### ### # ####.....# # @$$$$$ # # # ## ##### # #####'; at: 117 put: ' #### #### # ### ## # @ # ##..### # # # # #...#$ # # # ## $$ $ # # $ ### #### ### ####'; at: 118 put: ' ##### ## ## # $ ## # $ $ ## ###$# . ## # # . # ## ##. # # @ . ## # # # ########'; at: 119 put: ' ###### # ## ## ## # # $$ # # # @$ # # # # # #### # # # ... ## # ## #######'; at: 120 put: ' #### ####### # # $ ## # $##### # # @# # # ## ##.. # # # ..#### # $ ### # $### # # ####'; at: 121 put: ' ###### # . # ##$.# # # * # # ..### ##$ # ##### ## ## # # # #### # # # @ $ $ # ## # # ##########'; at: 122 put: '##### # ### # #$ # # $ # # $ $ # # $# # # @### ## ######## # ...# # # ########..# ####'; at: 123 put: '######## # # # $ $$ ######## ##### @##. . # #$ # . # # #. . ## #$# ## # # # # # ### ## # # #### ####'; at: 124 put: '############## # # # # $@$$ # . ..# ## ## ### ## # # # # # # # # # # # ######### # # # #############'; at: 125 put: ' ##### # ## # $ # ######## #@## # . # $ $ # # $# # #...##### # ##### #####'; at: 126 put: ' ########### ##....... # # $$$$$$$@ # # # # # ## # # # # # ####### #####'; at: 127 put: '## #### #### #### # $ $. # ## # .$ # # ##.### # $ . # # @ # # # ###### ####'; at: 128 put: ' ######### ### # # # * $ . . # # $ ## ## ####*# # # @ ### # ### #####'; at: 129 put: ' ######### ### @ # # # * $ *.. # # $ # # ####*# ### # ## # ### #####'; at: 130 put: '##### ##### # ####.. # # $$$ # # $# .. # ### @# ## # # ## # ##########'; at: 131 put: '##### # # # . # #.@.### ##.# # # $ # # $ # ##$$ # # ### # # ####'; at: 132 put: '#### # @### #.* ##### #..#$$ $ # ## # # # ## # # ##### #####'; at: 133 put: ' ####### # . .### # . . . # ### #### # # @$ $ # # $$ $ # #### ### #####'; at: 134 put: ' #### ######### # # ## $ # # $ ## # ### #. .# ## # #. .#$## # # # # # @ $ # # ####### ####'; at: 135 put: '####### # ##### # $$#@##..# # # # # $ # # # #### $ ..# ########'; at: 136 put: ' ####### # # ## ###$## #.$ @ # # .. #$ # #.## $ # # #### ######'; at: 137 put: ' #### ## ### #### # $ # # #### $ $ # # ..# #$ # # # @ ### ## #..# ### # ## # # # # ########'; at: 138 put: ' #### ### # # ### # # . .# # @ ...#### # # # # ## # # $$ # ##### $ $ # ##$ # ## # # ######'; at: 139 put: ' #### ## #### # ...# # ...# # # ## # #@ #### #### ##### $ ### # # ##$ $ # ### $$ # # $ ## ### # ###### ######'; at: 140 put: '######## ##### # # ### # # ## $ # #.# @ ## $ ## #.# # $ ## #.# $ ## #. ## ##### ## # ######'; at: 141 put: ' ######## # # . # # .*.# # # * # ####$##.## # $ # # $ ## $ # # @# # ##########'; at: 142 put: ' #### # # # #### ###$.$ # # .@. # # $.$### #### # # # ####'; at: 143 put: '#### # #### # $ # # .# # # $# ## # . # #### # # # ### ### # $ # ## #$# ## # $ @ $ # # ..#.. # ### ### #####'; at: 144 put: ' #### ### ##### # $$ # # # $ . .$$## # .. #. $ # ### #** . # # . **# ### # $ .# .. # ##$$.@. $ # # # $$ # ##### ### ####'; at: 145 put: ' ##### # @ # ## ## ###.$$$.### # $...$ # # $.#.$ # # $...$ # ###.$$$.### ## ## # # #####'; at: 146 put: ' ####### ## . ## # .$$$. # # $. .$ # #.$ @ $.# # $. .$ # # .$$$. # ## . ## #######'; at: 147 put: ' ##### ######## # #. . @#.# # ### # ## $ # # # $ ##### # $# # ## # # # ## #####'; at: 148 put: '########### # . # # # #. @ # # #..# ####### ## ## $$ $ $ # ## # #############'; at: 149 put: ' #### ## ### #@$ # ### $ # # ###### # $....# # # #### ## # # # $# # # # # ### ####'; at: 150 put: ' #### ##### # # $####### ## ## ..# ...# # $ $$#$ @ # # ### # ####### # #### ####'; at: 151 put: ' #### # # ### # ## $ # # # # # #$$ ###### # # # .# # $ @ .# ### ####..# #### ####'; at: 152 put: '###### #### # # # #.## #$## # # # # # #$ # ### # # # # # # # # # #### # # # #. @ $ * . # ###############'; at: 153 put: '############# #.# @# # # #.#$$ # $ # #.# # $# # #.# $# # $## #.# # $# # #.# $# # $# #.. # $ # #.. # # # ############'; at: 154 put: ' ############################ # # # ######################## # # # # # # # #################### # # # # # # # # # # # ################ # # # # # # # # # # # # # # # ############ # # # # # # # # # # # # # # # # # # ############ # # # # # # # # # # # # # # # ################ # # # # # # # # ##$# # #################### # #. @ # # #############################'; at: 155 put: ' ###### #### #####*# ################# ## # ### # # ######## #### ## # ### #### # #### #### ## #*# # .# # # # # # # #*# # # # ## # ## ## # ### ### ### # ## # ## ## # # #*# # # # # # # ### ##### #### # # ##### ##### ####### ###### # # # #**# # ## # # #**# ####### ## # # ######### # ##### ### # # # $ #*# # ######### ### @##### #*# ##### #### #### ###### '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesSasquatch "http://users.bentonrea.com/~sasquatch/sokoban/sasquatch.html David W. Skinner " ^ IdentityDictionary new at: 1 put: ' ### ## # #### ## ### # ## $ # # @$ # # ### $### # # #.. # ## ##.# ## # ## # ## #######'; at: 2 put: ' ## ##### ## ## . # # ## $. # ## $ # ## $@ ### # $ ## #.. ## ## # # ## ##### #'; at: 3 put: ' ##### ## # # # #### # $ ## # ####$ $# # $ $ # ## ## $ $ $# # .# $ $ # # .# # ##### ######### #.... @ # #.... # ## ###### ####'; at: 4 put: ' ########### ## # @# ### $ $$# # # ##$ $$ # # # $ # # ###### ###### #.. ..$ #*## # .. ### # ..##### #########'; at: 5 put: ' ########### ## # ## ### $ $#$ $ ### # #$ $ # $ $# # # $ ..#.. $ # # $...#...$ # # $ .. * .. $ # ###### @ ###### # $ .. .. $ # # $...#...$ # # $ ..#.. $ # # #$ $ # $ $# # ### $ $#$ $ ### ## # ## ###########'; at: 6 put: ' ########### ###. .$. .### ## $ $ $ ## ## ..$.. ## ##$#$#$## #.$ $.# # @ # ### ### ## $ $ ## #. $ .# ### . ### #####'; at: 7 put: ' ###### #### ## # ### # # ## ### ### #### # $ # # $ @ ...*.. $ # # $ $ ## ### ### ### ### # ##### # ### # #### #####'; at: 8 put: ' ####### # ## ##### ### ## # # ## #@$***. ##$ # # # ## .# ## ## # $ # ## ####.$.# ## # ###### ## ####'; at: 9 put: '######### #. . # #.$. . # ## ###@ # # $ ## # $$ ## # $ # # ### ####'; at: 10 put: ' ###### # # # @ ### #### # # # ####..#.#$##### # $ $ ##... # # .....#$$ # ###### ##$## ##### # $ # #### #### # # # ##### ### $ # # $ $ # # #$# #### # # #######'; at: 11 put: ' #### ### #### # @ ## # #. .#.### # $$$ $$$ # ###.#.#.# # ## # #### ### ####'; at: 12 put: ' ##### # # ##### # ####### # ##### # ..... # ##### # ## # # # # # # $ $ $ $ $ # ## ## $ # # # ##......#### ### $$ ### # ## * # # # $$ # ##########+$$ ## # # #.$ $# # ######## #.## # ########'; at: 13 put: ' ####### ### ## # ### # # # # ###$#@ # # # ##### # # # *. # ##$$# *.## # *..# #### #...## # #$$$ # # $ # ##### # ####'; at: 14 put: ' ####### ## # # # *.$.# # *.#.### # #$@$$ # # ## # # ###### # #####'; at: 15 put: ' #### #@ # ## ## # .$##### #$. # # ###..$# # # # ..$ $ # # $ $ # ### ##### # # # # ###.# ###'; at: 16 put: ' ###### ## # ### ## # # ## # # $.# # ## $ $.# # # #####. ## # $. @# # $. #### ### # #*# # ### #### .$ # # .$ # ## .##### # # #.$ $ ## # #.$ # # ## # # ## ### # ## ######'; at: 17 put: ' ########### ## . . . . ### # $$ $ $ $ # # ######## # ##### #### ## $ # # # # # $ $ # ### # # ## # # #### $ # #... ##### $ #### ### #... @ $ # # #...############ $ $ # ##### ##### # ####'; at: 18 put: ' #### ##### # # # #$ $ $ # #.*.*.*# #*.*.*.# # $ $ $# #......# #.*.*.*# #$ $ $ # # $ $ $# #$ $ $ # # # #@ ##### ####'; at: 19 put: '##### # ####### # $ ## ## ###### ## # # # # ######## # # ## $ ## # #. #@###### $ ## # #.# ### ## $ ## # #. # ## $ ## # #.# # ## ## $ ## ## #.# ## ### ## $ # # #.# # #*## ## # # .# # # ##*## ##### ###### # ###### #####'; at: 20 put: ' #### # # ######$.# # $ $.# # $@$...# # $$$..## # $ ..# ########'; at: 21 put: '##### ######## # ### . $ # # $ *.. #$ ## ## $# ..* $ @# # $ . ### # ######## #####'; at: 22 put: ' ##### #### #@ .### ### #### $$ $ # # # . . ## # # $ # . . ## # ## . $ $$ # # # # ###. # # # #### ##### # # # # ####### # #### # .$ # #### # ## ##### ###'; at: 23 put: ' ####### ###### ###### # . ..$#$.. . # # $ $ . $ $ # ###$####@####$### # $ $ . $ $ # # . ..$#$.. . # ###### ###### #######'; at: 24 put: ' ###### # ## ####### $ # # $ $ $ #$ # # #. $ # ####.#.# $### # ..... # # $ ..##$# ### ## .. # # $.#$ # $# # $ # # ##@ # #### ## #### ####'; at: 25 put: ' ##### ##### ##### # .#$ $ # # #. $$$ @ ## # .#$ $ # ###.# $ $ # #. ##$ ### #######*###.$ # # $ ....#### ## #$#$$....# # $ $ #..# # $ #..# # ########## #####'; at: 26 put: ' #### ########### # # $ $ $ $ ## # # # # # #$## ##. . . . . .# #$# # # # #$#### ###. . . . . . # ###$# # # # # @ # # $ $ $ $ ### # ########### ####'; at: 27 put: ' ######## ###### ########## ## $ ### ## # $ $ ## # ######### # # $ # # # # $ $ # # ######### # # # $ # # #. . . . # # # $ $ # # . . . .## # # $ # # # . . . . # # ##$ $## # #### # # ## # #@ # # #### ###### ##### # # ## # # # ##### ## ## ## ## ######'; at: 28 put: ' ###### # ### ##### $ $ # #### #.# ## # $ #$#.##$##### # $$. .#.$ ## # $.#.#.##### #### ## ....... @# # ####$ #.### #$###$## ## $ . # $ $ $ # # $ ### # # # ############ #####'; at: 29 put: '#### # # #### # ######## ####### # # ### ## $ # ##.###### ... #. # #.# # .# # $ # #$$$$#$$$ #.# ##. # #.# $ $ #.. ## #.# $ $ # # ## # # $$ # ##### #. ##$ ###### #. # $. # ##. @ ###.#$ # # # # # # ## ###### ######'; at: 30 put: ' ##### # # # # ###### ### ## ##### # ### # # ## #$$ # ##$ ########## $ $ # ### ## ..........$ #$$@# # # $$# ####### $ # # $ #...# ### #### # # $ ### ## #### ######## # # # # # ######'; at: 31 put: ' ##### # ##### # $$# ###### ###. . $ # # # .##.####### # # $. . # # # ##.##$$$$#$$$ ###### #... . # # #..##.####.### ##@# ## # $ $ $ # $ $ # # # # ### # #.##.#.###### # # $ # $. $ # # ###.## ###$## ###### # # ##########'; at: 32 put: ' ##### # # ######### $ # ###### # # # # # # # $ $ #@# ### ## #### ### ## ### # $ $ # # # # $ $ # #$ # $$ $$ # ###### $ # # # # ## ## ############### # .# $ # # #.. # ###### #...#### # #....# #### #....# ######'; at: 33 put: ' ####### ## ## # ### # # ## $ #### # # .# $.#### # # * *###.$ # # # *# ### ##### # # @ * * # # # # # ### #*# * # # ## # * *.# # ####### # # # ....$ $ # # # ## $# $####$ # ###* * # ####### # ########## #### # # ## ############ ####'; at: 34 put: ' ##### # ..######## # ......# # #.. ##$$ $# #####.## $ # # ....# $ $$# ##### ## # .. .#$ $ # # # # ##.### $$ $### # ### # ## # $ # # # @ #### # # # ###$ # # # # $ $ # # #### ### ####$$## # ## #### # # # # ## ###### # #### ## # # $ # ## # # # ###### #####'; at: 35 put: ' ##### # # ## # ##### # ## ####### # # $ #### # #### $ $$ # # ##### # $$$ $ #$ # # $ $ $ $ ###### ###$ #$ $ $ # # $ $$ ### @ ## # $ $$$$####... # # $ $ #. .#...# ### $$$$ ...... # # ##..#.....# ###### ##.....#### # .....# # ##########'; at: 36 put: ' ##### #### # ###### # # # $ $ # # #### # $##$ ### # ######### # $ $ # # ..........# $ # ###### ##....@### # $$ # # # #####.## # ## $ # # # #$ $$ $ # #### # ##### # # $ # # # # # # ### #### # # # # ##### # # ##### ##### # #######'; at: 37 put: ' ##### ######### # # # # ### #$### ##### # # # ##### # $. . # # . . . . # # # # #$### # # # # # # #$# # . . . . $ $ $ $ . . # ###$# # #$###########$# #$# # . . ## # . # ###$# #$####### # #$# #$### # . .$ $ $ # # . . # #$# # # # # #####$# # # # # . . . . . $ . . . # ### # # # # # # # # # # # # $ $. . .$ $ $ $ $ $ # ##### # # ############# # @ # #######'; at: 38 put: ' #### #### ######## # ###@ ## # # # # # # ### $ $ # # ....########## # #..# # . # ## $ $ $# # #..# ### # $ $$$ # # $ $ # # ...# $ $$ # # # # # ..# $ $ $ # # ## # ##...# $ $$ $ #$# ##### # ## $ $ $ # # ### ###### ### # ### # . ## #### . . # ## . # # #.#.# # # . # # # # # # # . #### ######### # ## ####'; at: 39 put: ' #### ##### # ####### #### # # @ $ #### $ # # ###.# # $$ # ###.## $ #$ # # ## # ..# $ ...# ### ## # $ ...$##.## ## ##.###$ $.. $$ ## #. #. .### $ $ # # $...## ## # # ## ###### # ## ## ## ##### # $$ # # $ # ### $ # # ## ####'; at: 40 put: ' ####### #### # # # ### $$$ # # ....$ ##### # ..# $ # @# ###$##$#### # ###### #.*....$ $ ### ##### # ..##### ## $ $ # #....*.... # $$ # $ # ########## #$$ ## # # # $.### $ ## # $###$# # # ##### $ $ #### #### #### ######'; at: 41 put: ' ##### # # ### ######## ## *** # # # # * * ## # ##### ## *** ## # ## ## ### #### # # # # # # # # ####$ $### ## ## # ## $...$ ## ##### # ## .@. # # # # $...$ ## ########$ $### # # #####'; at: 42 put: '#### # ###### # #### # $ $ # ##### ##### ### $ # # # $ # # # ##$###### # $### # ...# # ## #@#$ ##.#.# # # # #...# # # $ ##$ $#...##### ### ## #... # # # $ $ $ # # # # $### ###### # # # # # ############# # #####'; at: 43 put: ' #### ## ############# ## .......... # ## # ####$### ## # # # # ## # # # $$$ # # ##### ##### # . .# ### . . . ## # $. .# # $$ $ $ @# ####### ### # ####### # $ $ # ## ### # $ $ # # ## # #### # $### #### # # # ## #### # $ $$$ # ## # ## # ## # ## #### $$$ # ## ####### ..... ##### # $ ###### # # ###### ## #### ##### ####'; at: 44 put: ' ############# ## # ### # $ $$$$$ # ### $ $ ### # # $ $ $### # # ## $ ## # ### #### #### # ### # ### #### #### # #@ $ ### #.# ##### # $ $ ## # .... # # $$ ## ####..... # ## $ # #..#.## # # $ $ ## #...... # # $ $ # # . ..# ## ## $ # ## ##.# # # ## # # ###### ########'; at: 45 put: ' #### ######## # ##### ## # # # $ ### $ $ # # $ # ## $ #### ### # # ###$## # ##### ### #### $ # # # $ $$## .. ##$ # # $$ # $ ## ## # $## #### # #### ### # ##$ ###..#..# # ###.. # .....### # # *.### # #.. # ##$$# *.##@ # # # # *. #### ### # ###### # # # ##### ## ### # ### ####'; at: 46 put: ' #### ################### ##### ### .$ # ### $. #####$#### # # # $. #### # . ### .# # $ $.### ## # #### # $.# $# ### $.## # # # # # # $ # # ###### # ## #$ $ ## #. # # ##### #.#. # ### # # ##### # # ### ### # # ##*## # .# # #$$* ## #*### ### ## ## ## # .#. ## ###*# # .$ .# $.$.## ### # ##*## # #.#### # $. ## #*### # $$ ### ### ## ## ###*# # # . $@$ #######. # ##### # ### ####.# $ # # # ########### # ####### ####'; at: 47 put: '######### # # ###### # $ ###### ### # #$#$ $ $ # $ # # $ $@$ $ $ $ $$ # # $ $# $ # $$$ # # $ $ ####### ##### ## ###....##### ..# ###$$# $$$$ #...* ..# # ## #.. # # # #$###....##*## # ##..$. .... # ### .* .#....# # ##################'; at: 48 put: ' #### #### ## # # # ####### ### ###$ ## # ### # $ $ ### # # $ $ ###$ # # # ### ### # # # # # $ # ## ### # ### # $ # #@ ## # $# # ### ### # # # $ # # $ $ # # # # ## # $ # #. # ## # # ## #.. ### ## # # ## #... ## ### # #### #....## # $.*.## ############..## ####'; at: 49 put: ' ######################### # # # # # # # # # # $#$ # $#$ # $#$ # $#$ # # # # # # # # # # ## # ### # ### # ### # ## # # # # # # # # # # # # # # ## ### # ### # ### # ### ## # # # # # # # # # # # # @ # # # ## # ### # ### # ### # ## # . . . . . . . . # #########################'; at: 50 put: ' # # # # # # # # # # # # # # # # # # # # # # # # # # .$ . $. . $ .$ # # $# #$# # # #$# # # # # # . . $. . .$ . . # # #$# # # # #$#$ $# #$# # # . .$ .$ . $. . # # $# # # # #@# # # # #$ # # . .$ . $. $. . # # #$# #$ $#$# # # # #$# # # . . $. . .$ . . # # # # # #$# # # #$# #$ # # $. $ . .$ . $. # # # # # # # # # # # # # # # # # # # # # # # # # # '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesSasquatchIII "http://users.bentonrea.com/~sasquatch/sokoban/sasquatchiii.html David W. Skinner " ^ IdentityDictionary new at: 1 put: ' ####### # * # # @ # ##$#.## # # # # $#. # # # # ## ## ## # * * # # * # ### ## #####'; at: 2 put: ' #### ####### # # * .## # $$# * ## # $@ #* * ## ## $ # * * # ### #. * * # # . # .# # # ##### ########'; at: 3 put: ' #### ######### # # # # #*### # # # $ # # # #*#*## # # # $ # # # # *# # # # # $ # # # ## ###$. . . . # #@####### # # # ###########'; at: 4 put: ' ############# ## # ## #########@### ## # * # # ## ########*# # # # $ $ $ $ # # # #$.. . . ..$# # # # .#######. # ## # $.#######.$# # ### . . . . . # # # $ $ $ $ $ # # ######### ## # # $ $ # # # #######'; at: 5 put: ' ########### ## # # #######$## # # $ ### # #...***.*.@ # # # $ # # # #######$# # ## $ ## ######## ## #####'; at: 6 put: ' #### ######### ### # . . . . # # $$.$# #$.$ # ## . .# #. . # # $ $# $ $ # # $ #* ##### ##### # ## # @ # ## # ##### ##### *# $ # # $ $ #$ $ # # . .# #. . ## # $.$# #$.$$ # # . . . . # ### ######### ####'; at: 7 put: ' ##### # ##### ### # ## # * #### # # * ## # # # * ** # # # # # # #@#** * ## # ### #$ # # # .$ .* # # # # # # ## # ## #########'; at: 8 put: ' #### ########@ # # ...#$ # # $ $ $ * # ##### . # ##$#$. # ###. # .## # .$#$ # # .$ # ###.$# # # #### ####'; at: 9 put: ' # ########### # # # # # $ #$ $ # #$.*.*.#* # # . $. # #$.$#. .$# ## .$ #* ## # .#.*##. # # $ $ $ # ### # # ##### ##@ # ######'; at: 10 put: ' # # # # # # ## ## # . # # .$. # # $.$ # .$ $. # # * @ $ * $ # # $.$ # .$ $. # # . # # .$. # # # ## ## # # # #'; at: 11 put: ' # # # ## ## # . # # ## $.$.$ ## # # # $.$.$.$ # # . # # .$.$.$. # $.$ # # .$.$@$.$. * # # .$.$.$. # $.$ # # $.$.$.$ # # . # ## $.$.$ ## # # # . # # ## ## # # #'; at: 12 put: '######## # . . # # $.$. # ##$#$# ## # . . # #$#$# @# # . . # ##$#$# ## # . . # # $#$# ### ## . . # ###$#$# # # . # #$# ### # # #####'; at: 13 put: ' #### ######## # #@ $ $ $$ ### # ....*.* # ## ### ..*# # #$$ # .* # # # $ #.*# # # $ #.. # ## $ ### ### #$#.# # $ $ # # ## #######'; at: 14 put: ' ##### ######### # ### $ $ $ $. # # .$.$ $.$.# # # #.*..@..*.# # # #.$.$ $.$. # # .$ $ $ $ ### # ######### #####'; at: 15 put: ' ##### ############ ####### # # # ## # # # # # # #$ $ # .$ $ # ## # ..*.** *@* **.*.. # ## # $ $. # $ $# # # # # # # ## # # # ####### ############ #####'; at: 16 put: ' ######### ## * ## # # # # # # #.$.$.# # # $.$.$ # #*#.$@$.#*# # $.$.$ # # #.$.$.# # # # # # # ## * ## #########'; at: 17 put: ' # # ##### ##### #### # ..$$ # # # $ $ .#@#$ ## #### # *## # # # * #$.# ## $## . . # # $.**.#.**.$ # # . . ##$ ## #.$# * # # # ##* # #### ## $# #. $ $ # # # $$.. # #### ##### ##### # #'; at: 18 put: ' ############# ## # # ## # .##$$ $ . # # ...#.#.#.# # ## # $ $ .# # # $. # # #$.$ # # # $ $ #$## # .$# @ #$. # ##$# $ $ # # # $.$# # # .$ # # #. $ $ # ## # #.#.#.#... # # . $ $$##. # ## # # ## #############'; at: 19 put: ' ############# ## * ## # ##.# ##.# # # # $ $ $ $ # # # .$. ## .$# # # # # . # . # # #$ $.$ #$# # #* #..@..# *# # #$# $.$ $# # # . # . # # # # #$. ## .$. # # # $ $ $ $ # # # #.## #.## # ## * ## #############'; at: 20 put: ' ### ### ### ## # @ # ## # $#$ $#$ # # . . . . . # ##$#$ $#$## # . . . . . # # $ $#$ $ # # . . . . . # ##$#$ $#$## # . . . . . # # $#$ $#$ # ## # # ## ### ### ###'; at: 21 put: ' ### ### # ### # # # # ## $$$.$$$ ## # .# . . #. # # . # $ # . # # .$ #.# $. # ##$ .$@$. $## # .$ #.# $. # # . # $ # . # # .# . . #. # ## $$$.$$$ ## # # # # ### # ### ###'; at: 22 put: ' ########### # # ##$####.####$## # $. $ $.$ $ .$ # # # ... ... # # # #$.$ $.$ $.$# # # # . *#.#* . # # # #$ $# $ #$ $# # # .. ..$@$.. .. # # #$ $# $ #$ $# # # # . *#.#* . # # # #$.$ $.$ $.$# # # # ... ... # # # $. $ $.$ $ .$ # ##$####.####$## # # ###########'; at: 23 put: ' #### ### #### # # # # # # # # # # # **$***$** # # * . . * # ##$.## ##.$## # * # # * # # * @ * # # * # # * # ##$.## ##.$## # * . . * # # **$***$** # # # # # # # # # # # #### ### ####'; at: 24 put: ' ############### #. $ . $ .# # ##$# # #$## # # .* .#. *. # # # *$* # # ##$$* # *$$## # #. $. .$ .# # #@ #* * *# # # #. $. .$ .# # ##$$* # *$$## # # *$* # # # .* .#. *. # # ##$# # #$## # #. $ . $ .# ###############'; at: 25 put: '# #### # #### # # # # # # *. ### .* # # $# $ $ $ $ #$ # # # .* *. # # # . # $ # . # # $ ##$## $ # #.* # . # *.# # # ..$@$.. # # #.* # . # *.# # $ ##$## $ # # . # $ # . # # # .* *. # # # $# $ $ $ $ #$ # # *. ### .* # # # # # # #### # #### #'; at: 26 put: ' ############### ## # ## # *$ $*$$$*$ $* # # $...$...$...$ # # .$.$.$.$.$. # # $...$...$...$ # # *$$$*$$$*$$$* # # $...$...$...$ # ##$.$.$.@.$.$.$## # $...$...$...$ # # *$$$*$$$*$$$* # # $...$...$...$ # # .$.$.$.$.$. # # $...$...$...$ # # *$ $*$$$*$ $* # ## # ## ###############'; at: 27 put: ' ############# ## . . . ## ## $.$ $.$ $.$ ## # $ * $ * $ * $ # #..*.*.*.*.*.*..# # $ * $ * $ * $ # # $.$.$.$.$.$ # # $ * $ * $ * $ # #..*.*.*@*.*.*..# # $ * $ * $ * $ # # $.$.$.$.$.$ # # $ * $ * $ * $ # #..*.*.*.*.*.*..# # $ * $ * $ * $ # ## $.$ $.$ $.$ ## ## . . . ## #############'; at: 28 put: ' ##### #### . #### # ##$.$## # #### . #### # ## $$.$$ ## # ## ## . ## ## ### $##$.$##$ ### # $ $ $...$ $ $ # #.......@.......# # $ $ $...$ $ $ # ### $##$.$##$ ### ## ## . ## ## # ## $$.$$ ## # #### . #### # ##$.$## # #### . #### #####'; at: 29 put: '################# # . . . # # ##$###$###$## ############# #.## ## ## ##.# . . # # $ * * $ # ##$###$## # # ## # # # #.## ## ##.# # ##*###*###*## # $ * $ # # # # # ## # ## # # # #.$ * * $.@ ##*###*## # # ## # # # # # # ## # # ##*###*###*## # $ * $ # # # # # ## #.## ## ##.# # $ * * $ # ##$###$## # #.## ## ## ##.# . . # # ##$###$###$## ############# # . . . # #################'; at: 30 put: ' ############### ## ## # ##### ##### # ########### # # . . . . . # ### ## # #$ $ $ $ $ $# ### ### # # # .#.#.#.#. # ## # . . . # # # #$ $ $ $ $ $# ## #$ $ $ $# # # # .#.#.#.#. # ## # .#.#. # # # $ $ $@$ $ $ ## $ $ $ $ # # # .#.#.#.#. # ## # .#.#. # # # #$ $ $ $ $ $# ## #$ $ $ $# # # # .#.#.#.#. # ## # . . . # # # #$ $ $ $ $ $# ### ### # # # . . . . . # ### ## # ##### ##### # ########### ## ## ###############'; at: 31 put: ' ##### ##### ### # @ #### ## # $ # ## # #..*.#*...# # # # . $# $ $# . # # .# # $.# # # #.$ #$ #* # #. * # $ # .$# # # $ #$ $$#$$ $# $ # # #$. # $ # * .# # *# $# $.# # # #.$ # #. # # . #$ $ #$ . # # # #...*#.*..# # ## # $ # ## #### # ### ##### #####'; at: 32 put: ' ###### ##### ## #### # # ## $ # # # # .# $# $ # # #$.$ # ####### # $. # ### # # ### .$. . # #.$.$ # # $. ###$#$# ## ## #### #$ # # # # $ ###@###. # # $ # #.. #..## ###### # ..# . # # $$ #..## ..# # $ $## # # # $$ # # # ############# ####'; at: 33 put: ' #### ####### #### # $ ## ####$ ###.### ## # $ # #.# # # # # $ # . @ # # # # #..### # # # # $#.... # # # # # #...#$ # # # # #$ # ## $$ $ # # # # # .* ## # # #$$## # ## ## # # ### ### # ####$ ### ## ##### ########'; at: 34 put: ' #### ##### # ##### ## # # # # # ##### # # # # # $ $ $ $ # ## # # # # # # ######$## # # #### # * # # # # # $ # .. $ # # # # # # #*...# # # # # .***#. ..# ## ## ##*....*.* $ # # ##* ##.##### # $ # ## # $ # # # ##@ #.#$ $ $ $# # ## $ $ # # ## ########### ####'; at: 35 put: ' #### #### ### # # ######### ..# # $ @ $ $ #..# # $# $ # # #..# # ##*##$#$#$#..# # $ #..#. ## # #*. .##$## # ##$ $#..#. # # ##$######### # $$ $ # ## # #########'; at: 36 put: ' ##### ## . ## ##.$ $.## # $ * $ # #. * * .# # $ * $ # ##.$ $.## ####### ## . ## ####### ## ## ## ## ## ## # .$.$. # # # # $.$.$ # # $.$.$ ##### ##### .$.$. # # .$ $. $.@.$ # # $.$.$ ########### .$.$. # # .$.$. # # $.$.$ # ## ## ##### ## ## ####### #***# ####### #####'; at: 37 put: '######### ####### # # ####### # # # .$. $ # . . # ## ### # # # $ $ #$ # # . # #.$ $.## ##.## # $ .$ .# #. #. # # ### ## #.$ $. $ $ # ## # ##$$ .## ## # # ## ##. $$## # ## # $ $ .$ $.# ## ### # # .# .# #. $. $ # ##.## ##.$ $.# # . # # $# $ $ # # # ### ## # . . # @ $ .$. # # # ####### # # ####### #########'; at: 38 put: '##### ### # ############### # $ * @ * # # # # * * * * # ## # * . * # ### # # * * * * # # # # * . * # # # # * * * * # # ## # * . * # ## ## ########### # # $ $ # # ########## # ##### #####'; at: 39 put: ' #### #### # ##### #### #### $ $ ## # $ ### ## ## #@### # ###.#..# # # $ # # .# # # $ # # # # . # ## # # ########### # ## $ $ $ # ###### #.#.#.### # # # # # # #.#.#.# # # # $ $ $ # # # # # # # # ## ### # # ## ### # #### ## #######'; at: 40 put: ' ####### ## ####### # ###### ## #.### ## . ## ## # . # $*# .# # # # #. ###.# *$ # ####### # $ * ### . # ## ###$# * $$ ##$ .######## # ## $ # * # # # . # # # # $$ $#. .# @ #. .#$ $$ # # # # . # # # * # $ ## # ########. $## $$ * #$### ## # . ### * $ # ####### # $* #.### .# # # # #. #*$ # . # ## ## . ## ###.# ## ###### # ####### ## #######'; at: 41 put: '############################## # ......... # # $ ###### ## @ # ####### # $ ############# ## # $ # ##$## ###$# #### ..# ##### ##### # ..*.**.# # # # ## # ######.. $ # ###$ ## # # #*. # $ # # # # # # $$ # ## ### # $ # ## ##### # ## $ ###### # # # ### ### $# # # $ #$ $ ## #### #### $ $ ###### # #### # #### ####'; at: 42 put: '######################### # # # # # # # # $ # # # # # # # # # $ # # * * $ $ * * $ $ * * # ### # # # # # # # # # ### # * *...... ......* * # # # # ###### ###### # # # # $ .# $ #. $ # ### #$ $$$$ @ $$$$ $# ### # $ .# $ #. $ # # # # ###### ###### # # # # * *...... ......* * # ### # # # # # # # # # ### # * * $ $ * * $ $ * * # # $ # # # # # # # # # $ # # # # # # # # #########################'; at: 43 put: ' #### ## #### # $ .######## # $ # . $ $ # #### ### .#### # # # ....#$.# # # # # #. $ # .#$ # # # # ## $$$@$ # # # ## ## # # # # ### # ## # # # ### # ... # # #$* *$# ## # # ...$ ### # $$ # # # ###### ##### '; at: 44 put: ' ##### ## ## # $ # ## $.$ ## ## $.*.$ ## ### $.*.*.$ ### ## $.*.$.*.$ ## # $.*.$ $.*.$ # # $.*.$ $.*.$ # # $.*.$ $.*.$ # ## $.*.$.*.$ ## ### $.*.*.$ ### ## $.*.$ ## ## $.$ ## # $ # ## @ ## #####'; at: 45 put: ' ##### # # ## $ ## ### $.$ ### # $.*.$ # ## $.*.*.$ ## ### $.*.$.*.$ ### # $.*.$ $.*.$ # # $.*.$ $.*.$ # # $.*.$ $.*.$ # ### $.*.$.*.$ ### ## $.*.*.$ ## # $.*.$ # ### $.$ ### ## $ ## # @ # #####'; at: 46 put: ' ##### ########### @ ########### # . . # . # # $$*$$$*$$ # .$ $$$.$. # #.....*.....#*$.$...*.$*# ## $$*$$$*$$ # .$.$$$ $. ## # . . # . # # ####################### # # . . . # . . . . # ## $$* $$* $ # $.$.$.$.$ ## #.*.* * *.*.#*$$$ * $$$*# # $ *$$ *$$ # $.$.$.$.$ # # . . . # . . . . # ########### * ########### #####'; at: 47 put: ' ##### ########### @ ########### # . . # .$. # # .$.$$$.$. #.$ $.$ $.# #.$$$.*.$$$.#$.*** ***.$# ## .$.$$$.$. #.$ $.$ $.## # . . # .$. # # ####################### # # $. .$ # $ . # ## * .$. * # .** **$ ## # $.$*$.$ # * *** * # # * .$. * # $** **. # # $. .$ # . $ # ########### * ########### #####'; at: 48 put: ' ######################### # # # # # # # # # # $#$ # $#$ # $#$ # $#$ # # # # # # # # # # # $#$ # $#$ # $#$ # $#$ # # # # # # # # # # ## # ### # ### # ### # ## # # # # # # # # # # $ # $ # $ # $ # ## ### # ### # ### # ### ## # # # # # # # # # # # $ # $ # $ # # ## # ### # ### # ### # ## #...........+...........# ######### # ######### # ### # #### ####'; at: 49 put: ' ######################### # # # ###$$ $$ $$ $$.$$ $$ $$ $$### # $+.$..$..$..$..$..$..$..$ # # $..$..$..$..$..$..$..$..$ # # $$.$$.$$.$$.$$.$$.$$.$$ # # $..$..$..$..$..$..$..$..$ # # $..$..$..$..$..$..$..$..$ # ##.$$.$$.$$.$$ $$.$$.$$.$$.## # $..$..$..$..$..$..$..$..$ # # $..$..$..$..$..$..$..$..$ # # $$.$$.$$.$$.$$.$$.$$.$$ # # $..$..$..$..$..$..$..$..$ # # $..$..$..$..$..$..$..$..$ # ###$$ $$ $$ $$.$$ $$ $$ $$### # # # #########################'; at: 50 put: ' #### #### # ##################### # # ....... @ ....... # # # .###############. # # ### #. # # # .# ### # # $ # $ # # # ##$## ##$## # # ### # ##$## ##### ### # # # $ $ $ # # # # # # # # # # # # #####$######$## # # ## ## # # # ## ## ####### $ # $ ####### ##$## ##$## # ###### # ##### ##$## ###### # # # $ $ $ # # # ###### # # # # # ###### ############### '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesSasquatchIV "http://users.bentonrea.com/~sasquatch/sokoban/sasquatchiv.html David W. Skinner " ^ IdentityDictionary new at: 1 put: ' #### #### # # #### # $ # . ## # # . # ## #$$#. # ## ##### # @ ### # # #####'; at: 2 put: ' ##### ###### # # $ # # $### ## ##.$. . .# # $# # # @###### # # ####'; at: 3 put: ' ##### #### # # @ $# # # #....# ##$ $ $ # # ### ## # # ##### # ####'; at: 4 put: ' ###### # . ## # #* # # $.$ # ## *. # ## $.@ # ## # .$ # # $$.# # # ## ########'; at: 5 put: ' #### # # ## .### # .$ # #* * ## # $.$$ # # . # ###*#### #@# ###'; at: 6 put: ' #### ### # # ..# ####### # #..# # #### # #. ### $ # # #. # $ $ $$ # # # @ ### $## # # ##### ## ######### ####'; at: 7 put: ' ############### ## $. .$ ## # # ####### # # # # # # # .***$#$***. # ### # ### # ####@#### # # # #############'; at: 8 put: '####################### # # # # # # $@$$ # $ # .. ..# ## ## ### ### ### ## ## # # # # # # # # # # # # # ################# # # # #####################'; at: 9 put: '########### #@ # # # # $#$ $# ## #..# # # #..# # # #..# ## #$ $#$ # # # # # ###########'; at: 10 put: '###### # # # .$ # # ** # ##$. # # #### # ## # # # # # # #.**$@# # # # #######'; at: 11 put: ' ######## ##.... @# # # . # ## # # ## # #$ # # # $ # ## ###$ ## # # $$ # # # # ########'; at: 12 put: ' ###### # # # ### ##*# # ## . ## # # # ## # #.# $ # # $.###$ # ### ## # # $$@# ##..## # # ##### # # #####'; at: 13 put: ' #### ##### # ###. #$ ## # * .*.# # $.$ #$ # ### ### # # ### ### # $# $.$ # #.*.@ * # ## $# .### # ##### ####'; at: 14 put: ' ###### # ##### # $ *# # # * * $ # ###* . * # # * .@. * # # * . *### # $ * * # # #* $ # ##### # ######'; at: 15 put: '########### # * # # $$ ## $ # # $..#$$ # # ##*.*. # #*#..@..#*# # .*.*## # # $$#..$ # # $ ## $$ # # * # ###########'; at: 16 put: '############# # $ . # #.$ $### *$ # # ** ## .* # # .$#..$ $ # # # .$.$### # #$##..@..##$# # ###$.$. # # # $ $..#$. # # *. ## ** # # $* ###$ $.# # . $ # #############'; at: 17 put: '############### # # # $.$.$.$.$.$ # # .$.$.#.$.$. # # $.$.$ $.$.$ # # .$.$.#.$.$. # # $.$.$ $.$.$ # # .# # @ # #. # # $.$.$ $.$.$ # # .$.$.#.$.$. # # $.$.$ $.$.$ # # .$.$.#.$.$. # # $.$.$.$.$.$ # # # ###############'; at: 18 put: ' ############### ## # # # ## # **.. ..** # # * $$$ * # ##* .### ###. *## # * ## $@$ ## * # # . # # . # # .$#$ ### $#$. # ## $ # # $ ## # .$#$ ### $#$. # # . # # . # # * ## $ $ ## * # ##* .### ###. *## # * $$$ * # # **.. ..** # ## # # # ## ###############'; at: 19 put: ' ######### # * # # ## ## # # * * # ### # ### # .$#$. # # # @ # # # .$#$. # ### # ### #######'; at: 20 put: '#### # ######### # ## # # $$$# # ##...# #$$$# #...# #...# #$$$ #...## # ##$$$ # ####### @ # ######'; at: 21 put: ' ######### ## # # ## $# # #$### # #. .# # # $ *.@.* $ # # #. .# # ###$# # #$ ## # # ## #########'; at: 22 put: ' #### #### # #### #### ### $ $ # # # $ *...## # $ # #### #.. # ## # # # $$ $$@ #...## # # ####### #### # # #####'; at: 23 put: ' #### ###### # ## $ $ # ## $ #$ # # $ # $# # # ## ## ###$ ..# # # #*...@# # ..#### # #### ####'; at: 24 put: ' #### # ### # # ########$$ # # $ ## # #### $$ ## ####....# $ # # ...# $$ # # #...# $ ### # @## ## $ # # ## # # ##### #######'; at: 25 put: ' ############### ## ....# ## # # # ### # # ....# # # # # # $ $ # # ## # $@$ # # ####### $ $ # # ##*# $ $ # # ### #### # # ## ### # ##### ## #######'; at: 26 put: ' ##### ##### # @ ### # # # $ # #### #$ $ #### # # $ $# # ### $ $ # #.......# ## #### ## # # # # # ###### # ####'; at: 27 put: ' #### ### ### ### ## # $$#$$$@ ## # # # # ### #$$$# # # # # #### .## # ####.## ## ## .## # ##... # # .##### # .# #####'; at: 28 put: ' #### # ##### # $ $ # #* . . # # ######## # # # #### $ # # #$### # # @$# # #### # $$ $$ # # # # ## $ * # ## ###.....#. # #... ###$# . # # $ $ . # ######## ##### ####'; at: 29 put: ' # ## #### ## # # ### # ##$ # #### # * # # # # * # # #### * # # ### . # # #@#.****$# # # # # # ##### # # # ## # ###### ## ######'; at: 30 put: ' ##### # ####### # ## ## #.# ### #####.# # ####### ## ##.####. ## ## ## .....@.# $ ### # ###.# #.# $ $ ## # #. # .# $ $ $ # # # #. ## #$ $ $ # ## # #. # $ $ $ #### ### #. # $ $ ## # # # $ $ # # # ######$## # #### # ## ####### ########'; at: 31 put: ' ############# # @ # #**.*****.**# # $ $ # # # ### # ##### ##### ######## ###### # # #**.*******.**# # $ $ # # ####### # ##### #####'; at: 32 put: ' #### ### # ######## $$ ## ### # .*.$ # # $$ # #....$ # # $.. # $ $ # ##$*. ## ###### # ..$## ### # ## . # $# # # #$ @# . ## # ### ##$.. # ###### ## .*$## # $ $ # ..$ # # $....# # $$ # # $.*. # ### ## $$ ######## # ### ####'; at: 33 put: ' ####### ## ## # *.* # # #$ $# # ##### *.* ##### ## ## ## ## # # ###.### # # # *$* # $*$ # *$* # # . . ..$@$.. . . # # *$* # $*$ # *$* # # # ###.### # # ## ## ## ## ##### *.* ##### # #$ $# # # *.* # ## ## #######'; at: 34 put: ' ##### # @ # # $ # # $ # ## $ ## #####.*.*.##### # *. .* # # $$$. # .$$$ # # *. .* # #####.*.*.##### ## $ ## # $ # # $ # # # #####'; at: 35 put: ' ##### # # ## $ ## ## $.$ ## ## $ * $ ## ## $.*.*.$ ## ### $.*.#.*.$ ### # $ *.# #.* $ # # $.*.# #.*.$ # # $ *.# #.* $ # ### $.*.#.*.$ ### ## $.*.*.$ ## ## $ * $ ## ## $.$ ## ## $ ## # @ # #####'; at: 36 put: ' ##### ### ## ## $ ## ## $ *$ ## ## $.#.$.$ ## ## $.$. .$.$ ## ## $.$. . .$.$ ## # *$. * * .# $## # . . @ . . # ##$ #. * * .$* # ## $.$. . .$.$ ## ## $.$. .$.$ ## ## $.$.#.$ ## ## $* $ ## ## $ ## ## ### #####'; at: 37 put: ' ## ## ## # ## ## ## # *$#$* # # $...$ # # #.@.# # # $...$ # # *$#$* # ## ## ## # ## ## ##'; at: 38 put: ' ## ## ## # ## # .$ $. # # * * # # .* #.# *. # # $ # $ # $ # # .$@$. # # $ # $ # $ # # .* #.# *. # # * * # # .$ $. # ## # ## ## ##'; at: 39 put: ' ##### # ##### ## # ##### # ## # # # # # ## $* $ $ *$ ## # ..*# #*.. # ###*.. # ..*### # $ *$ # $* $ # # # * # # ### ###* *### ### # # * # # # $ *$ # $* $ # ###*.. # ..*### # ..*#@#*.. # ## $* $ $ *$ ## # # # # # ## # ##### # ## ##### # #####'; at: 40 put: ' ### ################# ###### ## ## ###### #### # $$ # $$ # #### # #$$ #.. ..# $$# # # ### #.###.# ### # #* ##### ### #*# ### ##### *# # ..@.. # #* ##### ### #*# ### ##### *# # ### #.###.# ### # # #$$ #.. ..# $$# # #### # $$ # $$ # #### ###### ## ## ###### ################# ###'; at: 41 put: '############### # .. . . # # $##$ # $$##.# # # ### # # #.## # # ##$ # # $ $ $ $ # #.## # # # # #.## #@# ###.# # $ # ### # #.# # $ $ # #.### ### # # # # # # ###.# # $#$$###$# # # # . . . . # ###############'; at: 42 put: '#### ##### #### # ## # ##### # # $.# # $ $ # # .# # ##### # ## .#### ### ##$## #$. $ # $ # # ..### # # # #*..@#######$##### # ..#### # # #$. $ # # ## .######$## # # .# # ##$## # $.# # $ # # ## # # # #### ########'; at: 43 put: ' ################ ## ## # ############ # # # # # # # $$$ $ $ @# # # # ### $$# ## ## $ ## # $ $ # ## # # #### # ###.. # # ### ## .. # .# $ #### # #### ## .# #.# # # # ###* $ .# ## #### # .# #. # # ## .###.## # ###### # # # # # ############'; at: 44 put: '############################### # . . . . . . . . . # # $ $ # $ $ # $ $ # $ $ # $ $ # ###.#####.#####.#####.#####.### # $ $ # $ $ # $ $ # $ $ # $ $ # # . . # . . # ###.#####.###########.#####.### # $ # $ . *@# # * * $ # # $ * * # # * . $ # $ # ###.#####.###########.#####.### # . . # . . # # $ $ # $ $ # $ $ # $ $ # $ $ # ###.#####.#####.#####.#####.### # $ $ # $ $ # $ $ # $ $ # $ $ # # . . . . . . . . . # ###############################'; at: 45 put: ' ##################### ## # # # # ## # * * * * * * * * * * # # # # # # # # # # # # # $.$ $.$ $.$ $.$ $.$ # ##. .#. .#. .#. .#. .## # $.$ $.$ $.$ $.$ $.$ # # # # # # # # # # # # # $.$ $.$ $.$ $.$ $.$ # ##. .#. .#.@.#. .#. .## # $.$ $.$ $.$ $.$ $.$ # # # # # # # # # # # # # * * * * * * * * * * # ## # # # # ## #####################'; at: 46 put: ' # # # # # ##################### ## # # # ## ### .$$. .$$. .$$. .$$. ### # .* *.* *.* *.* *. # # $ ## $ ## $ ## $ ## $ # # $ ## $ ## $ ## $ ## $ # # .* *.* *.* *.* *. # ### .$$. .$$.@.$$. .$$. ### # .* *.* *.* *.* *. # # $ ## $ ## $ ## $ ## $ # # $ ## $ ## $ ## $ ## $ # # .* *.* *.* *.* *. # ### .$$. .$$. .$$. .$$. ### ## # # # ## ##################### # # # # #'; at: 47 put: ' ##### ############ @ ############ # # # #$.$ .$.$.$.#**.**$$$*.**# #.$.$.$.$.$.$# $. ..$.$ # #$.$.$.$.$.$.# $.$.. .$ # ##.$.$.$. $.$#**.*$$$**.**## # # # # ######################### # # .. .. # $ . $. $ . # ## $*$*$$$$*$ # $ $.$. . ## # *. .. .$.$ #.$.$. $.$.$# # $.$. .. .* #$.$.$ .$.$.# # $*$$$$*$*$ # . .$.$ $ # # .. .. # . $ .$ . $ # ############ * ############ #####'; at: 48 put: '############################# # # # # # # # # # # # # # # # # # # # .$*$.$*$.$*$.$*$.$*$. # ###.# # # # # # # # # # #.### # $ . . . . . . . . . $ # # *# #$#$#$#$#$#$#$#$# #* # # $ * . . . . . . . * $ # ###*..$ #$#$#$@$#$#$# $..*### # $ * . . . . . . . * $ # # *# #$#$#$#$#$#$#$#$# #* # # $ . . . . . . . . . $ # ###.# # # # # # # # # # #.### # .$*$.$*$.$*$.$*$.$*$. # # # # # # # # # # # # # # # # # # # #############################'; at: 49 put: ' ############################# # * * * # # $ ### $ ##### $ ### $ # # $ $ ### $ ### $ ### $ $ # #*# $ ### $ # $ ### $ #*# # ## .*.*.*.*.$.*.*.*.*. ## # # ###$ $ $ $ $.$ $ $ $ $### # ## ..*.....*...$...*.....*.. ## ## $ $ $ $ $ *@* $ $ $ $ $ ## ## ..*.....*...$...*.....*.. ## # ###$ $ $ $ $.$ $ $ $ $### # # ## .*.*.*.*.$.*.*.*.*. ## # #*# $ ### $ # $ ### $ #*# # $ $ ### $ ### $ ### $ $ # # $ ### $ ##### $ ### $ # # * * * # #############################'; at: 50 put: '############################## # .$ ## $. ## .$ ## $. ## .$ # #$ . . $##$ . . $##$ .# #. $##$ . . $##$ . . $# # $. ## .$ ## $. ## .$ ## $. # ### # # ## ## # # ## ## ## ### # # ## # . # # ## ## ## # $. ## .$ # $ # .$ ## $. # #. $##$ . .$## #$ . . $# #$ . . $# @#$. . $##$ .# # .$ ## $. # $ # $. ## .$ # ## ## ## # # . # ## # # ### ## ## ## # # ## ## # # ### # .$ ## $. ## .$ ## $. ## .$ # #$ . . $##$ . . $##$ .# #. $##$ . . $##$ . . $# # $. ## .$ ## $. ## .$ ## $. # ##############################'; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesSasquatchV "http://users.bentonrea.com/~sasquatch/sokoban/sasquatchv.html David W. Skinner " ^ IdentityDictionary new at: 1 put: '#### # ### # # # $ # ### ### # $ $ # #..@..# # $ # ### ## ####'; at: 2 put: '##### # @#### # $. # ###$.# # # $.# # # #$. # # ### ######'; at: 3 put: ' ##### # # #### # # # . .# # # . # # .## $## ## #$$ # ## $@# ## ### ####'; at: 4 put: '#### #### # ### # # # $$ # # $$ # # # # ## ### $.# # #..*.@.# ## ### #####'; at: 5 put: '###### #### # ### # # * * # ## #***# # # *+* ## ## #*$*# ## # # # # # # # # ######## ####'; at: 6 put: ' ######## ## . . # # *$# # # #. #$# ## ##* # # # # # * # # $#@ .# # # $ ### ## # # ########'; at: 7 put: ' #### # # #$ # # # #### #### #### # # .. .. # # $*. *.$@## # #$ $#$ # ##### # # #########'; at: 8 put: ' #### # # #$ # # # #### ### #### # # .. .. ### # $*. *.$@ # ## #$ $#$ # # # # # # # # ###### # ## ## ##########'; at: 9 put: ' ####### # @ # # ### ## #### # # # ##### # ### # # . # # . # # * $$ # # * $$ # # *## ## # *## ## # * # # . # # *## # # #### # . # #### # #### ####'; at: 10 put: ' ######## ## ## # .#### # # . # # # * $$ # # # *## # # # + # ## # $### # ## ## #######'; at: 11 put: ' ######### ## ## # .##### # # . # # # * $$ # # # *## ## # # * # ## # *## # ## # + # # # $### # ## ## #######'; at: 12 put: '####### # @ # # $.$ # ##.$.## ## $ ## # $.$ # # .$. # # .$. # # # # #######'; at: 13 put: ' ##### #### # # $$# # ## *..$ # #@ .#. # # $..* ## # #$$ # # #### #####'; at: 14 put: ' ###### ####### # ## # ### ## ## # # $.##$ # ## # # *.@.* # # ## # $##.$ # # ## ## ### # ## # ####### ######'; at: 15 put: '####### # #### # # # . ## # $$$**$$ # #....@....# # $$**$$$ # ## . # # # #### # #######'; at: 16 put: ' ######## # # ## ##### # #### # $ $$ $ $ # #..........# # $ $ $$ $ # #### # ##### ## @ # # ########'; at: 17 put: ' ##### # # ## # # # * # # # ## ####### # # # # .$.$.#### # # $$.$$ ### # *##..@..##* # ### $$.$$ # # ####.$.$. # # # # ####### ## # # # * # # # ## # # #####'; at: 18 put: ' ####### ## ### ### .$### # $$.$ # # . . # ## $.$### ###$.$ # # . . # # .$$ # ###. ### ###@ ## ######'; at: 19 put: ' ####### ###### ### # ### # # $$##.# ##### $ $ ### #$ ##.# # $ $ # # .# ## # # $ # ### # ## # # $ $ #### # ## # # $#.*##$ # ## ### #.*..... .# ###### # .####### ## @# # # ####'; at: 20 put: ' ########### ## ## # ####### # # # # # # # ##### # # ## # $# ## #### ## ### .$ # # ###$ .....# # # #$ $ $ # @ # # ### ######### ##### ####'; at: 21 put: '############## # # # #### # #### # @ . # # $..... # #$ # ##$##### # ##. # # ### $ # # ## $ ## ## # ## ### $ ##### # $ # ##### # #### ### # ####'; at: 22 put: ' ##### # ### #### ## ### #.## ## # $ $ $ $$@ # # # ##.## # ## # # . ##### # # ...*. # # $### # # # $ ### ### # # ## ###########'; at: 23 put: ' ###### ###### # # $ $$ # # $ ## # # $## #$ # # $ $$ # # # .....#$ # ##@#.#$ $ # #.....#$ # #...**# # # $ ## #### ### ####'; at: 24 put: ' ######## # # ###*####.# # $ $ # # #......### # #$ # # # #. #@# # # # $$## #$# # # $ $ # # ######### ####'; at: 25 put: ' ##### # ##### ###### # ## # ## * #### ## ### $ # ### # #####$# $ # # # $ $ # $$# # # ###.#..*......... ## ### $# # $ $ # # # $ $## #### #### # # # ## @ # ## # ## ###### #### ## ## ##############'; at: 26 put: ' ##### ## # ##### ###### # $ # # #### # ### #$#### # ## # ## # # $$ ### # # ### ##$ @ $ # # # # . # $$ # $ $$ # # #..# .## $# ## # # . ##$ #### # #..##.# # ####### # . # ## #..# . #### # ###.# # #### # # #####'; at: 27 put: ' ####### ######## # # # ## # #### ### # #####$ $## # # ### # ## $ # # # # # $ $$$## # # # #####$ # ### # ### ##### ## # $# $ # # # # #$ # ##### # # # ## ## # # # # #### ## # $ $ # ##### ## ## # # # # #### ##### ###### # # # # $$$ # ## # # ## $ $ # ######## ############## # # # @..................# # # ################## # # #####'; at: 28 put: ' ##### #### # ############..# # $# $ $ $ $ $ # ## $ # # # #$ ..# # # . . . *.. # ### $####@## # ## ## ## ## # ## ####$ ### # ..* . . . # # #.. $# # # # $ ## # $ $ $ $ $ #$ # #..############ # #### #####'; at: 29 put: ' ##### # # ## # ##### ## * # # ### # ## # ##### ### $$# * # # # *#. $ # ## # # # # *... $$# * # # #$$ ....$ # ##### ##### # $.+.. $$# # # * #$$ ...* # # # # ## # $ .#* # # # * #$$ ### ##### # ## # ### # # * ## ##### # ## # # #####'; at: 30 put: ' #### # # # # # # ########## # # $ $ $$# # @ $..*. # # # *...$# #####$...* ##### # .*..$# # #$$ $ $ # # ########## # # # # # # ####'; at: 31 put: ' #### # # # # # # ############ # # $ $.* $$# # @ $..*.*. # # # * $ .$# #####*.$ *.# #.* $.*# #$. $ * ##### # .*.*..$# # #$$ *.$ $ # # ############ # # # # # # ####'; at: 32 put: ' ######### # # # ## # # # ## # *.*$*.* # # # # ### $@$ ### # # # # *.*$*.* # ## # # # ## # # # #########'; at: 33 put: ' # # ######## # # # # *$.$.$* # # *###* # # $# #$ # #.. .@. ..# # $# #$ # # *###* # # *$.$.$* # # # # ######## # #'; at: 34 put: ' #### # #### ## # # ## # ##### # # $. * .$ # ###.$.$.$.### # .$ $. # # #*$ @ $*# # # .$ $. # ###.$.$.$.### # $. * .$ # # ##### # ## # # ## #### # ####'; at: 35 put: ' ########### ## # ## # .$$. .$$. # # $..$ $..$ # # .$$...$$. # # $..$ $..$ # ## $$.*.$$ ## # $..$ $..$ # # .$$...$$. # # $..$ $..$ # # .$$.@.$$. # ## # ## ###########'; at: 36 put: '############# # # # # # # # # # # .$.$.$. # # #$.$.$.$# # # .$.$.$. # # #$.$@$.$# # # .$.$.$. # # #$.$.$.$# # # .$.$.$. # # # # # # # # # # # #############'; at: 37 put: ' ############ # @ # # # $ ## $ # # # #.## ##.# # # . ## . # # $# #*##*# #$ # # # * * # # # # ## * ## # # # # ## * ## # # # # * * # # # $# #*##*# #$ # # . ## . # # #.## ##.# # # # $ ## $ # # # # ############'; at: 38 put: ' ########## ##### @ *##### ## $$ ##. . ## # # ## # # ## # ## ## # ## ##. ## $## #* # #*##*# # $ # # . # * * # # # ## ## * ## ## # # ## ## * ## ## # # # * * # . # # $ # #*##*# # *# ##$ ## .## ## # ## ## # ## # # ## # # ## . .## $$ ## #####* ##### ##########'; at: 39 put: ' ######### # # ###$#$ $#$### # . . . . . # ###$#$#$ $#$#$### # . . . . . . . # # #$#$#$#$#$#$# # # . . . . . . # ###$#$##@##$#$### # . . . . . . # # #$#$#$#$#$#$# # # . . . . . . . # ###$#$#$ $#$#$### # . . . . . # ###$#$ $#$### # # #########'; at: 40 put: ' ###### ###### # ### # # .$.$. # .$.$. # # $.$.$ # $.$.$ # # .$.$ ### $.$. # # $.$.# .$.$ # # .$ #$ $## $. # ## # $...$ # ## #### .@. #### ## # $...$ # ## # .$ ##$ $# $. # # $.$. #.$.$ # # .$.$ ### $.$. # # $.$.$ # $.$.$ # # .$.$. # .$.$. # # ### # ###### ######'; at: 41 put: ' ##### # ## ###### # ## # ## # # # # # # ### # # # # ### # # # # # $ # $ # # # #$#*.#.*#$## # ## *.$ $.* ## ### .$ . $. #### ### .#. ### #### .$ . $. ### ## *.$@$.* ## # ##$#*.#.*#$# # # # $ # $ # # # # # ### # # # # ### # # # # # # ## # ## # ###### ## # #####'; at: 42 put: ' ##### ##### # # # # ### ##### ### # .$.$. # $.$ # ### $.$.$ #.$.$.$.### # $.$.$.$ $.$.$.$ # # .$.$.$. .$.$.$. # # $.$.$.$ $.$.$.$ # ### $.$.$ #.$.$.$.### # .$.$. . $.$ # ### #.@.# ### # $.$ . .$.$. # ###.$.$.$.# $.$.$ ### # $.$.$.$ $.$.$.$ # # .$.$.$. .$.$.$. # # $.$.$.$ $.$.$.$ # ###.$.$.$.# $.$.$ ### # $.$ # .$.$. # ### ##### ### # # # # ##### #####'; at: 43 put: ' ##### ## ## ##.$.$.## ##$.$.$## # .$.$. # # $.$.$ # # .$.$. # ###### $.$.$ ###### ### .$.$. ### ##.$.$.$.$.$.$.$.$.$.## # $.$.$.$.$ $.$.$.$.$ # # .$.$.$.$ @ $.$.$.$. # # $.$.$.$.$ $.$.$.$.$ # ##.$.$.$.$.$.$.$.$.$.## ### .$.$. ### ###### $.$.$ ###### # .$.$. # # $.$.$ # # .$.$. # ##$.$.$## ##.$.$.## ## ## #####'; at: 44 put: ' # # # ## ## # $ # # $ $ # ## .$.$.$. ## # .$.$.$.$. # # .$.$.$.$.$. # ## .$.$.$.$.$.$. ## # $.$.$. .$.$.$ # # $.$.$. .$.$.$ # # $ $.$. @ .$.$ $ # # $.$.$. .$.$.$ # # $.$.$. .$.$.$ # ## .$.$.$.$.$.$. ## # .$.$.$.$.$. # # .$.$.$.$. # ## .$.$.$. ## # $ $ # # $ # ## ## # # #'; at: 45 put: ' #### # ######## # . # # ### $$ # # $# # .$# ##### # . .#.###### # $. # # . $ # # $.#.###$### $ # # $ . #. .#####.## # # ## *$$ # # # # # . $ $@$ $ . # # # # # $$* ## # # ##.#####. .# . $ # # $ ###$###.#.$ # # $ . # # .$ # ######.#. . # ##### #$. # #$ # # $$ ### # # . # ######## # ####'; at: 46 put: ' ##### # ##### # # # ##### # # # # #####$# #$# # $ $ ####$ ##### # # # # ## # # # ##### # # $$ # # ### $ #@# # # # ####.... # # ### # # # .... # # # # # # .... # # # ### # # ....#### # # # # # $ ### # # $$ # # ##### # # # ## # # # # ##### $#### $ $ # #$# #$##### # # # # ##### # # # ##### # #####'; at: 47 put: '################ ####### # # # # # $ $ $ $ ### ##### ### ## # $ $ $ $ $ . # $ . ## # $ $ ### #.#.# ### #.#.### # $ $ $ . # . $ . # . # ## ### #.#.# ### #.#.# ### ## # . # . $ # . $ $.$## ###.#.# ### # @ # ### #.#.### ##$.$ $ . # $ . # . # ## ### #.#.# ### #.#.# ### ## # . # . $ . # . $ $ $ # ###.#.# ### #.#.# ### $ $ # ## . $ # . $ $ $ $ $ # ## ### ##### ### $ $ $ $ # # # # # ####### ################'; at: 48 put: ' ########################## # ## ## # *.*.* *.*.* *.*.* *.*.* ### # .$ $.$.$ $.$.$ $.$.$ $. .### # * $ * * $ * * $ * * $ *# # # .$ $.*.$ $.*.$ $.*.$ $.*.* # # *.*.$ $.*.$ $.*.$ $.*.$ $. # # $ * $ * * $ * * $ * * $ * # # *.*.$ $.*.$ $.*.$ $.*.$ $. # # .$ $.*.$ $.*+$ $.*.$ $.*.* # # * $ * * $ * * $ * * $ * $ # # .$ $.*.$ $.*.$ $.*.$ $.*.* # # *.*.$ $.*.$ $.*.$ $.*.$ $. # # #* $ * * $ * * $ * * $ * # ###. .$ $.$.$ $.$.$ $.$.$ $. # ### *.*.* *.*.* *.*.* *.*.* # ## ## # ##########################'; at: 49 put: ' #################### # # # # ###$.$ $.$ $.$ $.$### # $. .$$.#.$$. .$$.#.$ # # .###.. # ..###.. # . # # $. .$$.#.$$. .$$.#.$ # # $.$ $.$ $.$ $.$ # # $.$ $.$ $.$ $.$ # # $.#.$$. .$$.#.$$. .$ # ##. # ..###.. # ..###.## # $.#.$$. .$$.#.$$. .$ # # $.$ $.$ $.$ $.$ # # $.$ $.$ $.$ $.$ # # $. .$$.#.$$. .$$.#.$ # ##.###.. # ..###.. # .## # $. .$$.#.$$. .$$.#.$ # # $.$ $.$ $.$ $.$ # # $.$ $.$ $.$ $.$ # # $.#.$$. .$$.#.$$. .$ # # . # ..###.. # ..###. # # $.#.$$. .$$.#.$$. .$ # ###$.$ $.$ $.$ $.$### # # # @# ####################'; at: 50 put: ' ######################### ## # # # ## # # .$.$.$.$ $.$.$.$. # # # .$.$.$.$.$.$.$.$.$. # # .$.$.$.$.$.$.$.$.$.$. # ##.$.$.$.$.$.$.$.$.$.$.$.## # $.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$. .$.$.$.$. # # $.$.$.$.$ $ $.$.$.$.$ # ## $.$.$.$. $@$ .$.$.$.$ ## # $.$.$.$.$ $ $.$.$.$.$ # # .$.$.$.$. .$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$ # # .$.$.$.$.$.$.$.$.$.$.$. # # $.$.$.$.$.$.$.$.$.$.$.$ # ##.$.$.$.$.$.$.$.$.$.$.$.## # .$.$.$.$.$.$.$.$.$.$. # # .$.$.$.$.$.$.$.$.$. # # # .$.$.$.$ $.$.$.$. # # ## # # # ## ######################### '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:27'! mazesSasquatchVI "http://users.bentonrea.com/~sasquatch/sokoban/sasquatchvi.html David W. Skinner " ^ IdentityDictionary new at: 1 put: ' ##### ## ## #### # # # # # # *$* ###$ ## # .$. ... $ ## # *$* ### ## # # # # @# ## ## ####### ##### '; at: 2 put: '########## # # # # #$$$$$ # # .#.# # # ... ## ### @ ### ##### '; at: 3 put: ' ######## ## ## # *..* # # #$ $#@# # **** # ## ### ### ## #### '; at: 4 put: ' ####### ### # # # .$$. ## # * *@ # ## .$$. # # # ### ####### '; at: 5 put: ' #### ##### #### ## # $ # # .# # #* # ## * @ * ## # *# # #. # # $ # ## #### ##### #### '; at: 6 put: ' ######## # # ### ## # #### # *.** .* # # $ $# @ # ####### ### ##### '; at: 7 put: ' ######## ## # # # # # # # # # ## ## ## .# #####.# # #.# #### # ### ## # # ##$##. # # $ $ ##### # $ @ # ## #### #### '; at: 8 put: '########### # @ # # ###$### # # # .$. # # # #$ . $# # # $. .$ # ###$. .$### # . # ####### '; at: 9 put: ' ####### # # # $ $ #### ### ## . # # #. $ # # @ .#*### ### #.. # ## $ # # # $ $ # # ##. # ######### '; at: 10 put: ' #### # # #######$ # # . $ $ # # . .. ## ##$##+#$# # . .. #### ##. $ $ $ # # ##### # # $# ##### # # #### '; at: 11 put: ' #### # # # ## ### # # # #### # . @ # ### ##.# # # #.# #$$$$ # #.**$ # ###. ## # # ## ## ######## '; at: 12 put: ' #### ###### # # #$.# ## ## # # # $ $$$$ # ##.*.*.*..# # @ # # ####### ##### '; at: 13 put: ' #### #### # # # #### ** # ## # # # # *** #### ##$ ..... # # $ # $ $ # # ####$ ## ##### # @ # # # ###### '; at: 14 put: ' ##### # @ # ### # ##### # $ ## # # . ## ##### #### ## $$ $ # # $ # # # . ##$ #### #### ### # # $ # # # . # # #### ### ### # $ # # .....# # ####### # ##### '; at: 15 put: ' #### ## ## # $ ## ##### * # ## . * * # ## * * $* .# # * *$..$* ### # $ *$.##. ## ## .##.$* $ # ### *$..$* * # #. *$ * * ## # * *@ . ## # * ##### ## $ # ## ## #### '; at: 16 put: '######## ## #### ##. # # # *$$ ###### # $. ## #####*###. ## # * * # # #.$@$.# # # * * # ## .###*##### ## .$ # ###### $$* # # # .## #### ## ######## '; at: 17 put: ' ##### #### # ##### # # $ $ # ## ## ### # # . # ## #$#....#*# ########### # .$ # # # # ## ### ## ## # $ $ # $ $ # ## ## ### ## # # # # $. # ########### #*#....#*# ## # . ### # ###@##$ # # $ $ # # ###### # #### ##### '; at: 18 put: '#### #### # #### #### # #### ####### #### # # .$. # .$. # .$. # .$. # #. $ . . $ . . $ . . $ .# #$$#$$*$$#$$@$$#$$*$$#$$# #. $ . . $ . . $ . . $ .# # .$. # .$. # .$. # .$. # # #### ####### #### # #### #### # #### #### '; at: 19 put: ' ######## ## # ## ## $.$ ## ## $.$.$ ## ## .$.$.### # .$.$.$ ## # $.$ $. ## ##.$.$.$.## # $.$.$.$ # # . . # #####@##### # # #### ### ## # ## ## $.$ ## ## $.$.$ ## ###.$.$. ## ## $.$.$. # ## .$ $.$ # ##.$.$.$.## # $.$.$.$ # # . . # ########### '; at: 20 put: '##### ##### ########### ## . ## ## .$.$. ## ## $*$*$ ## #..$@$..# ## $*$*$ ## ## .$.$. ## ## . ## ########### ##### ##### '; at: 21 put: '########## # ## # # # # * #### ###$ .$ ## # . @ * # # * . # ## $. $### #### * # # # # ## # ########## '; at: 22 put: '########## # ## # # $. .$ # # .**$*. # ## $ @* ## ## * $ ## # .*$**. # # $. .$ # # ## # ########## '; at: 23 put: '########## ### ## # $.*.*$## # *#$ #. # # . @$* # # *$ . # # .# $#* # ##$*.*.$ # ## ### ########## '; at: 24 put: '########## ## #### ##.$.$.$ # ##$.$.$. # # .$ @.$ # # $. $. # # .$.$.$## # $.$.$.## #### ## ########## '; at: 25 put: '########## # $. # # * * # # * ** *$# # * @* .# #. * * # #$* ** * # # * * # # .$ # ########## '; at: 26 put: ' ######## ## @ ## # #$.$.# # # $.$.$. # # .$ .$ # # $. $. # # .$.$.$ # # #.$.$# # ## ## ######## '; at: 27 put: '########## # ## # $.$.$. # # .$.$.$ # # $.##$. # # .$##.$ # # $.$.$. # # .$.$.$ # ## @# ########## '; at: 28 put: '########## # .$ # # .$.$ # # .$.$.$ # #.$.##$.$# #$.$##.$.# # $.$.$. # # $.$. # # $. @# ########## '; at: 29 put: ' ####### ## ## ## ##### $### # $ .. # # # *$*.### ## .$@$. ## ###.*$* # # # .. $ # ###$ ##### ## ## ## ####### '; at: 30 put: ' ####### ## ## ###$ $### # $.* *.$ # # *.*.* # # *@* # # *.*.* # # $.* *.$ # ###$ $### ## ## ####### '; at: 31 put: '############# ##### .$ # #### .$.$ # ### .$.$ $ # ## .$.$.$.$# # .$.$.$.$.# # .$.$@$.$. # #.$.$.$.$. # #$.$.$.$. ## # $ $.$. ### # $.$. #### # $. ##### ############# '; at: 32 put: '###### ###### # ##### # # # # # # # $.$.$.$ # ## .$.$.$. ## ## $.$.$.$ ## ##.$.@.$.## ## $.$.$.$ ## ## .$.$.$. ## # $.$.$.$ # # # # # # # ##### # ###### ###### '; at: 33 put: ' ########### ## # ## # $.$.$.$.$ # # .$.$.$.$. # # $.$.$.$.$ # # .$. .$. # ##$.$ @ $.$## # .$. .$. # # $.$.$.$.$ # # .$.$.$.$. # # $.$.$.$.$ # ## # ## ########### '; at: 34 put: '############### # # # # #.$.$.$.$.# # # .$.$.$.$.$. # # $.$.$.$.$.$ # # .$.$.$.$.$. # # $.$.$ $.$.$ # ##.$.$ @ $.$.## # $.$.$ $.$.$ # # .$.$.$.$.$. # # $.$.$.$.$.$ # # .$.$.$.$.$. # # #.$.$.$.$.# # # # # ############### '; at: 35 put: ' #### #### # # # # # ###.$#####$.### # $ .$ $. $ # # . $. .$ . # ###$.## ##.$### #.$# #$.# ## @ ## #$.# #.$# ###.$## ##$.### # $ .$ $. $ # # . $. .$ . # ###$.#####.$### # # # # # #### #### '; at: 36 put: ' ##### #### ### # # ### ## # $.# # # $.#.$.$# # ## #.$.$ $. ## # .$ $.$.# # # #$.$.@.$.$# # # #.$.$ $. # ## .$ $.$.# ## # #$.$.#.$ # # #.$ # ## ### # # ### #### ##### '; at: 37 put: ' ####### ### ### ## # ## # $#$.$.#.$ # ## .$.#.$.$# ## # #.$.$.$.$ # # .$.$ $.#. # # #$.$ @ $.$# # # .#.$ $.$. # # $.$.$.$.# # ## #$.$.#.$. ## # $.#.$.$#$ # ## # ## ### ### ####### '; at: 38 put: ' ####### ###### ###### ## $. .$ ## # $ $.$#$.$ $ # # #.$.$.$.# # ## $. .$.$. .$ ## ##$.$.#.$.#.$.$## # .$.$. .$.$. # # #$.$ @ $.$# # # .$.$. .$.$. # ##$.$.#.$.#.$.$## ## $. .$.$. .$ ## # #.$.$.$.# # # $ $.$#$.$ $ # ## $. .$ ## ###### ###### ####### '; at: 39 put: ' #### # ## ## $#### ###. . # #### $ # $ # # # . .#### ## $####$ # ## ###. . $. $# $#### # $ # $ **.#. . # # . .#.** $ # $ # ####$ #$ .$ . .### ## # $####$ ## ####. . # # # $ # $ #### # . .### ####$ ## ## @# #### '; at: 40 put: ' #### # # # # # # ################ # # $ $ $ $ $ $$# # @ $ *.*.*. # # # ..* $... $# #####$... $ $..* # # *.$. $. *.$# #$.$ $.. $ * # # * $ ..$ $.$# #$.* .$ .$.* # # *..$ $ ...$# #$ ...$ *.. ##### # .*.*.* $# # #$$ $ $ $ $ $ # # ################ # # # # # # #### '; at: 41 put: ' # # # # . # # $.$ # # .$. # # $.$ $.$ # # $. . . .$ # # $.$.$ $.$.$ # # . . # # . . # # $.$.$# $ #$.$.$ # # ..$ $@$ $.. # # $.$.$# $ #$.$.$ # # . . # # . . # # $.$.$ $.$.$ # # $. . . .$ # # $.$ $.$ # # .$. # # $.$ # # . # # # # '; at: 42 put: ' # # # # # # # # # # # # # $ # #.*********.# # * * # # * ******* * # # * * * * # # * * *** * * # # ###$* * *@* * *$### # # * * *** * * # # * * * * # # * ******* * # # * * # #.*********.# # $ # # # # # # # # # # # # # '; at: 43 put: ' # # # ################### # # # # # # # # # # # # # **$***$***$** # # * . . * # ####$ #### #### $#### # * ## #.# ## * # # *.# ## ## #.* # # * ### ### * # ####$ . @ . $#### # * ### ### * # # *.# ## ## #.* # # * ## #.# ## * # ####$ #### #### $#### # * . . * # # **$***$***$** # # # # # # # # # # # # # ################### # # # '; at: 44 put: ' ##### ##### ##### ##### ##### # # # # # # # $.$$$.$ $.$$$.$ # ###.#...#...#...#.### # $.$ $.$$$.$ $.$ # # .$ $. .$ $. # # $.$ $.$$$.$ $.$ # ###.#...#...#...#.### # $.$$$.$ $.$$$.$ # # $. .$@$. .$ # # $.$$$.$ $.$$$.$ # ###.#...#...#...#.### # $.$ $.$$$.$ $.$ # # .$ $. .$ $. # # $.$ $.$$$.$ $.$ # ###.#...#...#...#.### # $.$$$.$ $.$$$.$ # # # # # # # ##### ##### ##### ##### ##### '; at: 45 put: '####################### ## # * # ## # # # # # # # # # $.$.$ $.$.$ $.$.$ # ###.$.$.#.$.$.#.$.$.### # $. .$ $. .$ $. .$ # # #.$.$.#.$.$.#.$.$.# # # $.$.$ $.$.$ $.$.$ # # # # # # # # # # $.$.$ $.$.$ $.$.$ # # #.$.$.#.$.$.#.$.$.# # #* $. .$ $.@.$ $. .$ *# # #.$.$.#.$.$.#.$.$.# # # $.$.$ $.$.$ $.$.$ # # # # # # # # # # $.$.$ $.$.$ $.$.$ # # #.$.$.#.$.$.#.$.$.# # # $. .$ $. .$ $. .$ # ###.$.$.#.$.$.#.$.$.### # $.$.$ $.$.$ $.$.$ # # # # # # # # # ## # * # ## ####################### '; at: 46 put: ' ###### ########### ## #######. . . . ## ##.$.$.$ .$.$.$.$.$.## # $.$.$.#####$.$.$.$.$.$ # # .$.$.$# # $.$.$.$.$. # #.$.$. # $ ####.$.$ # # .$.##### ### ## # .$. # #.$.$# # # $ $ # $.$## # .$.# $ $ # # # #### # #.$.$## ## # # ## # # # .$. # ###### $ $ # # #.$.$ $# # # # # # ##.$ # # ## ##### ## # # ## ##### ## # # $.## # # # # # #$ $.$.# # # $ $ ###### # .$. # # # ## # # ## ##$.$.# # #### # # # $ $ #.$. # ##$.$ # $ $ # # #$.$.# # .$. # ## ### #####.$. # # $.$.#### $ # .$.$.# # .$.$.$.$.$ # #$.$.$. # # $.$.$.$.$.$#####.$.$.$ # ##.$.$.$.$.$. @ $.$.$.## ## . . . .####### ## ########### ###### '; at: 47 put: ' ###### ##### ##### ###### ## ############### ## # $ $ $.$ $ $.$ $ $.$ $ $ # # $.$ . $.$ . $.$ . $.$ # # $.$.*.*.$.*.*.$.*.*.$.$ # # $.$ . $.$ . $.$ . $.$ # ##$ * $.$ $ $#$ $ $.$ * $## #.....#.....#.....#.....# ##$ * $.$ $ $#$ $ $.$ * $## ## $.$ . $.$ . $.$ . $.$ ## ##$.$.$.$.$.*.*.$.$.$.$.$## ## $.$ . $.$ . $.$ . $.$ ## ##$ * $.$ * * * * $.$ * $## #....###... @ ...###....# ##$ * $.$ * * * * $.$ * $## ## $.$ . $.$ . $.$ . $.$ ## ##$.$.$.$.$.*.*.$.$.$.$.$## ## $.$ . $.$ . $.$ . $.$ ## ##$ * $.$ $ $#$ $ $.$ * $## #.....#.....#.....#.....# ##$ * $.$ $ $#$ $ $.$ * $## # $.$ . $.$ . $.$ . $.$ # # $.$.*.*.$.*.*.$.*.*.$.$ # # $.$ . $.$ . $.$ . $.$ # # $ $ $.$ $ $.$ $ $.$ $ $ # ## ############### ## ###### ##### ##### ###### '; at: 48 put: ' # # # # ########################## ## # # # # ## # $.$.#.$.$#$.$.#.$.$#$.$. # # .$.$ $.$. .$.$ $.$. .$.$ # # $.$. .$.$ $.$. .$.$ $.$. # # .$.$#$.$. .$.$#$.$. .$.$ # #### # ### # ### #### # .$.$#$.$. .$.$#$.$. .$.$ # # $.$. .$.$ $.$. .$.$ $.$. # # .$.$ $.$. .$.$ $.$. .$.$ # # $.$. .$.$#$.$. .$.$#$.$. # #### ### # ### # #### # $.$. .$.$#$.$. .$.$#$.$. # # .$.$ $.$. . @$ $.$. .$.$ # # $.$. .$.$ $ . .$.$ $.$. # # .$.$#$.$. .$.$#$.$. .$.$ # #### # ### # ### ### # .$.$#$.$. .$.$#$.$. .$.$ # # $.$. .$.$ $.$. .$.$ $.$. # # .$.$ $.$. .$.$ $.$. .$.$ # # $.$. .$.$#$.$. .$.$#$.$. # #### ### # ### # #### # $.$. .$.$#$.$. .$.$#$.$. # # .$.$ $.$. .$.$ $.$. .$.$ # # $.$. .$.$ $.$. .$.$ $.$. # # .$.$#$.$.#.$.$#$.$.#.$.$ # ## # # # # ## ########################## # # # # '; at: 49 put: ' ##### ##### ## ## ## ## ##.$.$.## ##.$.$.## ##$.$.$## ##$.$.$## # .$.$. # # .$.$. # # $.$.$ # # $.$.$ # # .$.$. # # .$.$. # ###### $.$.$ ### $.$.$ ###### ### .$.$. .$.$. ### ##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.## # $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ # # .$.$.$.$ $.$.$.$ $.$.$.$. # # $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ # ##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.## ### .$.$.# . #.$.$. ### ###### $.$.$ #*# $.$.$ ###### # .$.$..*@*..$.$. # ###### $.$.$ #*# $.$.$ ###### ### .$.$.# . #.$.$. ### ##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.## # $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ # # .$.$.$.$ $.$.$.$ $.$.$.$. # # $.$.$.$.$ $.$.$.$.$ $.$.$.$.$ # ##.$.$.$.$.$.$.$.$.$.$.$.$.$.$.## ### .$.$. .$.$. ### ###### $.$.$ ### $.$.$ ###### # .$.$. # # .$.$. # # $.$.$ # # $.$.$ # # .$.$. # # .$.$. # ##$.$.$## ##$.$.$## ##.$.$.## ##.$.$.## ## ## ## ## ##### ##### '; at: 50 put: ' # # ##### ######### ######### ##### ## ### # ### # ### ## # $.$. .$.$ $.$. .$.$ $.$. .$.$ # # .$.$ $.$. .$.$ $.$. .$.$ $.$. # # $.$. .$.$ $.$. .$.$ $.$. .$.$ # ##.$.$#$.$. .$.$#$.$. .$.$#$.$.## # # ### # ### # # ##.$.$#$.$. .$.$#$.$. .$.$#$.$.## # $.$. .$.$ $.$. .$.$ $.$. .$.$ # # .$.$ $.$. .$.$ $.$. .$.$ $.$. # # $.$. .$.$#$.$. .$.$#$.$. .$.$ # ### ### # ### # ### ### # $.$. .$.$#$.$. .$.$#$.$. .$.$ # # .$.$ $.$. .$.$ $.$. .$.$ $.$. # # $.$. .$.$ $.$. .$.$ $.$. .$.$ # ##.$.$#$.$. .$.$ $.$. .$.$#$.$.## # # ### @ ### # # ##.$.$#$.$. .$.$ $.$. .$.$#$.$.## # $.$. .$.$ $.$. .$.$ $.$. .$.$ # # .$.$ $.$. .$.$ $.$. .$.$ $.$. # # $.$. .$.$#$.$. .$.$#$.$. .$.$ # ### ### # ### # ### ### # $.$. .$.$#$.$. .$.$#$.$. .$.$ # # .$.$ $.$. .$.$ $.$. .$.$ $.$. # # $.$. .$.$ $.$. .$.$ $.$. .$.$ # ##.$.$#$.$. .$.$#$.$. .$.$#$.$.## # # ### # ### # # ##.$.$#$.$. .$.$#$.$. .$.$#$.$.## # $.$. .$.$ $.$. .$.$ $.$. .$.$ # # .$.$ $.$. .$.$ $.$. .$.$ $.$. # # $.$. .$.$ $.$. .$.$ $.$. .$.$ # ## ### # ### # ### ## ##### ######### ######### ##### # # '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 7/30/2003 17:10'! mazesSetNames "^ " ^ IdentityDictionary new at: #mazesLoma put: 'Loma'; at: #mazesMasMicroban put: 'Mas Microban'; at: #mazesMasSasquatch put: 'Mas Sasquatch'; at: #mazesMicroban put: 'Microban'; at: #mazesSasquatch put: 'Sasquatch'; at: #mazesSasquatchIII put: 'Sasquatch III'; at: #mazesSasquatchIV put: 'Sasquatch IV'; at: #mazesSasquatchV put: 'Sasquatch V'; at: #mazesSasquatchVI put: 'Sasquatch VI'; at: #mazesUAlberta put: 'University of Alberta'; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 7/30/2003 17:09'! mazesSets "^ " ^ IdentityDictionary new at: #mazesLoma put: [self mazesLoma]; at: #mazesMasMicroban put: [self mazesMasMicroban]; at: #mazesMasSasquatch put: [self mazesMasSasquatch]; at: #mazesMicroban put: [self mazesMicroban]; at: #mazesSasquatch put: [self mazesSasquatch]; at: #mazesSasquatchIII put: [self mazesSasquatchIII]; at: #mazesSasquatchIV put: [self mazesSasquatchIV]; at: #mazesSasquatchV put: [self mazesSasquatchV]; at: #mazesSasquatchVI put: [self mazesSasquatchVI]; at: #mazesUAlberta put: [self mazesUAlberta]; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 12/21/2003 22:23'! mazesUAlberta "http://www.cs.ualberta.ca/~games/Sokoban/Mazes/Screens/ Andreas Junghanns " ^ IdentityDictionary new at: 1 put: ' ##### # # #$ # ### $## # $ $ # ### # ## # ###### # # ## ##### ..# # $ $ ..# ##### ### #@## ..# # ######### ####### '; at: 2 put: '############ #.. # ### #.. # $ $ # #.. #$#### # #.. @ ## # #.. # # $ ## ###### ##$ $ # # $ $ $ $ # # # # ############ '; at: 3 put: ' ######## # @# # $#$ ## # $ $# ##$ $ # ######### $ # ### #.... ## $ $ # ##... $ $ # #.... ########## ######## '; at: 4 put: ' ######## # ....# ############ ....# # # $ $ ....# # $$$#$ $ # ....# # $ $ # ....# # $$ #$ $ $######## # $ # # ## ######### # # ## # $ ## # $$#$$ @# # # ## ########### '; at: 5 put: ' ##### # ##### # #$## # # $ # ######### ### # #.... ## $ $### #.... $ $$ ## #.... ##$ $ @# ######### $ ## # $ $ # ### ## # # # ###### '; at: 6 put: '###### ### #.. # ##@## #.. ### # #.. $$ # #.. # # $ # #..### # $ # #### $ #$ # # $# $ # # $ $ # # ## # ######### '; at: 7 put: ' ##### ####### ## ## # @## $$ # # $ # # $ ### # ### #####$### # $ ### ..# # $ $ $ ...# # ###...# # $$ # #...# # ### ##### #### '; at: 8 put: ' #### # ########### # $ $ $ # # $# $ # $ # # $ $ # # ### $# # #### # #@#$ $ $ ## # # $ #$# # # # $ $ $ $ # ##### ######### # # # # #......# #......# #......# ######## '; at: 9 put: ' ####### # ...# ##### ...# # . .# # ## ...# ## ## ...# ### ######## # $$$ ## ##### $ $ ##### ## #$ $ # # #@ $ $ $ $ # ###### $$ $ ##### # # ######## '; at: 10 put: ' ### ############# ##@#### # # # $$ $$ $ $ ...# # $$$# $ #...# # $ # $$ $$ #...# ### # $ #...# # # $ $ $ #...# # ###### ###...# ## # # $ $ #...# # ## # $$ $ $##..# # ..# # $ #.# # ..# # $$$ $$$ #.# ##### # # #.# # ######### #.# # #.# ############### '; at: 11 put: ' #### #### # # ### @###$ # ## $ # ## $ $$## ## # #$## # # # $ $$ # ### # $ # # $ ##### #### # $$ # # #### ## $ # #. ### ######## #.. ..# #### #...#.# #.....# ####### '; at: 12 put: '################ # # # # ###### # # # $ $ $ $# # # # $@$ ## ## # # $ $ $###...# # # $ $ ##...# # ###$$$ $ ##...# # # ## ##...# ##### ## ##...# ##### ### # # ####### '; at: 13 put: ' ######### ## ## ##### ### # # ### # $ #$ # # ... # # # $#@$## # #.#. # # # #$ # . . # # $ $ # # #.#. # # ## ##$ $ . . # # $ # # #$#.#. # ## $ $ $ $... # #$ ###### ## # # # ########## #### '; at: 14 put: ' ####### ####### # # # $@$ # #$$ # ######### # ###......## # # $......## # # # ###...... # ## #### ### #$## # #$ # $ # # # $ $$$ # $## # # $ $ ###$$ # # ##### $ # # ### ### # # # # # ######## # #### '; at: 15 put: ' ######## # # # # $ # ### #$ #### # $ ##$ # # # @ $ # $# # # $ #### ## ####$## # # $#.....# # # # $..**. $# ### ## #.....# # # ### ####### # $$ # # # # # ###### # ##### '; at: 16 put: '##### # ## # # #### # $ #### # # $$ $ $# ###@ #$ ## # ## $ $ ## # $ ## ## .# # #$##$ #.# ### $..##.# # #.*...# # $$ #.....# # ######### # # #### '; at: 17 put: ' ########## #.. # # #.. # #.. # #### ####### # ## # # # # ## # # #### ## #### ## # $ ##### # # # # $ $ # $ # # @$ $ # ## #### ## ####### # # ###### '; at: 18 put: ' ########### # . # # # #. @ # ##### ##..# #### ## # ..### ### # $ #... $ # $ # # .. ## ## ## # ####$##$# $ # # # ## # #$ $$ # # # $ # # # $## # # # # ########### # #### #### '; at: 19 put: ' ###### # @#### ##### $ # # ## #### # $ # ## # # $ # ##### # ## $ $ # # ## $ $ ### # # ## # $ # # # ## # #$# # # ## ### # # ###### # $ #### # #....# # $ $ ..#.# ####$ $# $ ....# # # ## ....# ################### '; at: 20 put: ' ########## ##### #### # # $ #@ # # #######$#### ### # # ## # #$ ..# # # $ # # #.# # # $ # #$ ..# # # ### ## #.# # ### # # #$ ..# # # # #### #.# # #$ $ $ #$ ..# # $ # $ $ # #.# #### $### #$ ..# # $$ ###....# # ## ###### ######## '; at: 21 put: '######### # # # #### ## #### # # ## #@## # # $$$ $ $$# # # ## $ # # # ## $ #### #### $$$ $# # # ## ....# # # # #.. .# # # # ##...# ##### $ #...# ## ##### ##### '; at: 22 put: '###### #### # ####### ##### # $# # $ # # # $ $ $ # $ $ # ##$ $ # @# $ # # $ ########### ## # # #.......# $# # ## # ......# # # # $........$ # # # $ #.... ..# # # $ $####$#### $# # $ ### $ $ ## # $ $ $ $ # ## ###### $ ##### # # # # ################### '; at: 23 put: ' ####### # # #### ##### $#$ # ## #.. # # # # #.. # $#$ # $#### #. # #$ # # #.. $# # $ # #..@# #$ #$ # # #.. # $# $# # #.. # #$$#$ # ## #.. # $# # $#$ # #.. # # # # # ##. #### ##### # #### #### ##### '; at: 24 put: '############### #.......... .#### #..........$$.# # ###########$ # ## # $ $ $ # ## #### # $ # # # # ## # ## # $# # ## ### ## # $ #$### ### ## ### $ # # ### ## ### $ ## # # ## # $ # $ $ $ # # $ $#$$$ # # # # $ ##### # @## # # # ############## '; at: 25 put: '#### # ############## # # ..#......# # # # ##### ...# ##$# ........# # ##$###### #### # $ # ######@ # ##$ # $ ###### # # $ #$$$## # # # #$#$### # #### #$$$$$ # # # $ # # # # ## ### # ######$###### $ # # # # # ########## ##### '; at: 26 put: ' ####### # # ##### ## # #...### # $# #... # # $ #$$ ... # # $# #... .# # # $######## ##$ $ $ # ## # $$ # # ###### ##$$@# # ## ######## '; at: 27 put: ' ################# #... # # ## ##..... $## # #$ # #......# $ # # #......# # # # # ######### $ $ $ # # #$##$ ##$## ## $ # $ # # ## ### # ##$ # # $ $$ $ $ # # $ $##$ ###### ####### @ ## ###### '; at: 28 put: ' ##### ##### # ## $ $ #### ##### $ $ $ ##.# # $$ ##..# # ###### ###.. # ## # # #... # # $ # #... # #@ #$ ## ####...# #### $ $$ ##..# ## $ $ $...# # $$ $ # .# # $ $ #### ###### # ##### '; at: 29 put: '##### # ## # $ ######### ## # # ###### ## # $#$#@ # # # # $ # $ # # ### ######### ## # ## ..*..... # ## ## ## *.*..*.* # ## # $########## ##$ # # $ $ $ $ # # # # # # # ################### '; at: 30 put: ' ########### # # # ##### # $ $ # # ##### $## # ## # $ ## # ## $ # # $ @$$ # ##$$$ # ## ### # ## # ## # ### #####$# ## # $ #....# # ### ## $ #....## # $ $ # #..$. # # ## $ # ##.... # ##### ######...## ##### ##### '; at: 31 put: ' #### # ######### ## ## # # # $# $@$ #### #$ $ # $ $# ## ## $## #$ $ # # # # # $$$ # # $ $ $## #### # $ $ #$# # # ## ### ###$ # # #.... # ####......#### #....#### #...## #...# ##### '; at: 32 put: ' #### ##### # ## $# ## $ ## ### #@$ $ # $ # #### ## $# #....#$ $ # #....# $# #.... $$ ## #... # $ # ######$ $ # # ### #$ ### # # #### '; at: 33 put: '############ ## ## # ## $ $ # #### ## $$ # # $ # # # $$$ # #### # # # $ ## # # # $ # # $# $# # # ..# #### ####.. $ #@# #.....# $# # ##....# $ # ###..## # ############ '; at: 34 put: ' ######### #.... ## #.#.# $ ## ##....# # @## # ....# # ## # #$ ##$ # ## ### $ # #$ $ $ $# # # # $ $ ## # # ### ## # # ## ## ## # $ # $ # ###$ $ ### # ##### #### '; at: 35 put: '############ ###### # # # ###....# # $$# @ .....# # # ### # ....# ## ## ### # ....# # $ $ # # #### # $ $## # # #### # #### # ## # # # #$ ## # # # $ $ # ## # ## # # $ $ # # # # $ ## ## # ##### # $$ $$ # ## ## ### $ # # # # # ###### ###### '; at: 36 put: ' ##### ##### ###### # # #### $ $ $ # # $ ## ## ## ## # $ $ $ $ # ### $ ## ## ## # ##### #####$$ # ##$##### @## # # $ ###$### $ ## # $ # ### ### # $$ $ # $$ # # # ## # #######.. .### #.........# #.........# ########### '; at: 37 put: '########### #...... ######### #...... # ## # #..### $ $ # #... $ $ # ## # #...#$##### # # ### # #$ #$ # # $$ $ $ $## # # $ #$#$ ##$ # ### ## # ## # # $ $ ## ###### # $ $ # ## # # # #####@##### ### '; at: 38 put: ' #### ####### @# # $ # # $## $# ##$#...# # # $... # # #. .# ## # # #$ # #$ $ # # ####### #### '; at: 39 put: ' ###### #############....# ## ## ##....# # $$## $ @##....# # $$ $# ....# # $ ## $$ # # ...# # $ ## $ # ....# ## ##### ### ##.### ## $ $ ## . # # $### # ##### ### # $ # # # $ #$ $ $### # # $$$# $ # #### # # $$ # ###### ### ##### '; at: 40 put: ' ############ # ## # # #$$ $ # #$ #$# ## @# ## ## # $ # ## # $ #$ # # # # $ # # ## $ $ ## # # # ## $ # # ## $$# # ######$$ # # #....# ######## #.#... ## #.... # #.... # ######### '; at: 41 put: ' ##### ## ## ## # ## $$ # ## $$ $ # # $ $ # #### # $$ ##### # ######## ## # #. $$$@# #.# ####### ## ## #.# #######. #$ $## #........... # # ############## $ # ## ## #### '; at: 42 put: ' ######## #### ###### # ## $ $ @# # ## ##$#$ $ $## ### ......# $$ ## # ......# # # # # ......#$ $ # # #$...... $$# $ # # ### ###$ $ ## ### $ $ $ $ # # $ $ $ $ # ###### ###### ##### '; at: 43 put: ' ####### ##### # #### # # $ # #### #$$ ## ## # ## # # ## ### # ### $#$ $ $ # #... # ## # # #...# @ # ### ## #...# ### $ $ # ######## ## # # ######### '; at: 44 put: ' ##### # # # # ####### # $@###### # $ ##$ ### # # #### $ $ # # ##### # #$ #### ## #### ##$ # # $# $ # ## ## # # # #...# # ###### ### ... # #### # #...# # # ### # # # # ######### '; at: 45 put: '##### #### #...# # #### #...### $ # #....## $ $### ##....## $ # ###... ## $ $ # # ## # $ # # ## # ### #### # $ # #$ $ # # $ @ $ $ # # # $ $$ $ ### # ###### ### # ## #### ### '; at: 46 put: '########## # #### # ###### # ## # # $ $ $ $ # # #$ # ###$ $$# ### # ## # $## ##$# $ @# # $ $ ### # # $ # # ## # # ## ##### # # # #.......### #.......# ######### '; at: 47 put: ' #### ######### ## ## $ $ ##### # ## ## ##...# # #$$ $ $$#$##...# # # @ # ...# # $# ###$$ ...# # $ $$ $ ##....# ###$ ####### # ####### #### '; at: 48 put: ' ######### #*.*#*.*# #.*.*.*.# #*.*.*.*# #.*.*.*.# #*.*.*.*# ### ### # # ###### ###### # # # $ $ $ $ $ # ## $ $ $ $ ## #$ $ $ $ $# # $@$ # # ##### # #### #### '; at: 49 put: ' #### # ## # ## # $$ ## ###$ $ ## #### $ # ### # ##### # # # #....$ # # # $ ....# # # $ # #.*..# # ### #### ### # #### @$ ##$## ### $ # # ## # ######### '; at: 50 put: ' ############ ##.. # # ##..* $ $ # ##..*.# # # $## #..*.# # # $ # ####...# # # # # ## # # # @$ $ ### # ## # $ $ # # # ###$$ # # # # # # $ # # ##### # $# ##### # #$ # # # # # ### ## # # # # ## #### ###### '; at: 51 put: ' ######### # # # $ $$ $# ### # $ # #.# $$ ## #.### $ # #.#. $ ## #### #... $## $ # #...$ $ # #..###$### #@# #..# # ### #### ####### '; at: 52 put: ' ######## #......# #### #......# # #########...# # $ $ #...# # # # # # # # ##### # # #@# # # # # ### ### ## ## # $ # $ $ $ # # # $$$ $ # # # # ###$###$## # ### # $ # # ## $ # $ $ $ ### # # ### ### ## # $ # # ########### #### '; at: 53 put: '################## # ## # $# $ ## $ # # $### # $$ # #.### $ $ ## ## #...# # # #$ # #..##$$#### $ # # #...# $ ## ### #...$ ### # # # ##.. $# ## ##@ # ##.# # ################## '; at: 54 put: '#################### # # # # #@# # $ $ $ # # ## ###..## ### # # #....#$# $### # # $ #....# $ $ $ # # #....# # # $ $ # # ##..## #$# # ##$## ## # #$## # $ $ # # # # # # # # #################### '; at: 55 put: '#################### # @## # ## # ## $ $ ## # ###....# # # ### # #....# # # $ # ### #...# # # ## ##.# $ $ # ## $ $ ### # # ### ## $ # # $ # #### $ $# # # # $ # #### # # ## #################### '; at: 56 put: '#################### # # ## # @### ## $ # $### # ##$# $ ##$# $ $ # # $# $ ### # ## $ ### #....# # # $# # # # #....## # $ $ # #....### ##$ ### $ #....#### # # $ ###### # # # ###### #################### '; at: 57 put: '#################### #@ ### # # # # # # # $ $ # ##### # $ $#$# # #.#..# ##$ $ # #..... $ # ## #..... ###$##$### #.#..# $ # # ##### # #$ $ # ##### # $ $ $ # ##### # # # # # #################### '; at: 58 put: '#################### ##... ## # # # #.... $ ## # #....# # #$###$ # #...# # # # ##.# #$ # $## # # # # $ $ ### $ # # $ $ # # ## # ## # ## #$$# $# # # # # $ $ # ## # # # # @# #################### '; at: 59 put: '#################### # # #@# ## ##### # # # $ $ ##### # # ###### $ ### # # #....# $$ # ##$##$##....# # # #....##$##$## # $$ #....# # # $ $ # # ### # ##### $ $ $ # ##### # # # ## #################### '; at: 60 put: '#################### # # # # # $ ## ### ## ##### ## $ $ # ##..## # # $ # # # #.... $ ##$# ## #.... $##### #$## ##..# # # # $ # ###.# # $ $ # @# ## $ $ # # #### ## ########### #################### '; at: 61 put: '#################### # ###..### # # $$ ###..### $@ # # # ##......# $ # # #......# $ # #### ###..######$ # # $$$ #..# # # # $# $ $ $$ #$ # # # ## $ ## # # # $ $ ## $ $ # # # ## ## # # #################### '; at: 62 put: '#################### # # # # # # # # @# # ## $ $ ## #### # # # $ # # # ## #$ ## ## # # $ $ $ # #..###$$## $##$ ## # #..#.# # $ $ # # #....# $$ ##$ #### #....# ##### # #...### ## # #################### '; at: 63 put: '#################### #....# # # # #....# # $ $ # #.... ## $# # $#$ # #...# $ $# $ # #..#### # $ $$ # # #### #### ### # # # # # ## # $ # $ $ # # ## $ ## $ $ # # @# # # # #################### '; at: 64 put: '#################### #....### # #....##### # #$# ## #....### #$ $ # #....### $ #$$## ## #### $# #$ $ # ## #### $ $ # # #@ ####$###$## $ # ## # # $ # ## ### # $ #### ######## # # # #################### '; at: 65 put: '#################### # # @#...### # # ##...## # # # ##$## ## ....# # $ # $$$ ....# ###$### $$ ### ##.# # $ # # #### # $ # ### # # # ## #$## $ $$ # # $ ## # # # # # # # # # #################### '; at: 66 put: '#################### # # #...#@ # # # ....# # # $ # #....# # # ##$#### ##....# # # $ $ # #...# # # $$ # # # $$ # ### $$$# $$ $ # # $ # # # $# # # $# # $ # # # # # # # #################### '; at: 67 put: '#################### #####@###.##...## # #####$ ..#...# # #### ......# $ # ### $ #.....## # ## ## $$# ##### $ $ # ## $# $ ## $$ # ## # # # $ $ # ## $$ ### #$## # ## $# $ $ $ ## ### # # ### #################### '; at: 68 put: '#################### #@ # # # ## ### ## #### # ## # # # $$ # # # # # $ # $ ## ## # $ # #$$ # # # ### # ## ## #..#.# $ # $ # # #..#.# $ # ## $$ # #....## $$ $ # # #.....## # # #################### '; at: 69 put: '#################### # # # # ## # $# $ $ ##...$ $ # # $ # ##....# $ # # ## $ ##....# $ # # $ #....## $ # # $## #...# # # $$$##$## ### ## # # # # # # # # $ # $ ## # # # #@ # #################### '; at: 70 put: '#################### # # # # # # # # $ $ $ # ## # #$###$## ## # # $ $ # $ # # ###$##$# # $ # # # $ $ ###### $# # $ $$ $ #@#.#...# # # # # #.#...# # ########## #.....# # #.....# #################### '; at: 71 put: '#################### # # # ## ## # $# $ # ## # # $ $ #..# $ # # $ $ #....# # ## # $# #......### $ # # # #....# #$ # # $ ####..# # # ## $ ## # # $ $## ### $ $#@$ $# # #### # # # #################### '; at: 72 put: '#################### # ....# #### # .... # # # ########## # # #$ # ###..# # $ #$$### #..# # $ ### $ $ #..# # $ # $ $ # ##..# # # $$ # $ ## ## #@## $# $ $ ## ## ## # ### #################### '; at: 73 put: '#################### # # #@ # # # $$ #$$# # # ## # # # $ $ #$$ # # ## # # # # # # # # ## # # # # $ # # # # # $ #$ # # $ #..# ##$ # #### #...# # $ #....# # # # #.....# #################### '; at: 74 put: '#################### # # ##### # ## $ # #### $ # #### $$ #..# # # # $ $ ##..#### ## # $ ###.... $$ # # #$# ....# # $ # # # # $ ..###$# # # # $ #..# ## # # $# #### # $## # # # @# ## #################### '; at: 75 put: '#################### # # # # #@# # $ $ # $ # # ##$# $### # $$# # # # #.### #$ $ # # #$#....# # ### # # $ #.....## # # ##$ #.#....#$$ $ # # ######..## # # # # $ $ ### # # # # # # #################### '; at: 76 put: '#################### # # # # #@## # # # $ # # ##$# ##### $ # ## ## ##.....# # # ##$##$#.....###$#$ # # # ##.....# # ## # $ ##..## # # # $ # $ $ $$$ # ## $ $# # # $ # # ## # # # #################### '; at: 77 put: '#################### # ## # # # # $ $ ## $ # ## ##### .###### ## # ## ##....#### ## ## ##$ ###..## # # #... .# $ $ # # $ ## ## . ### #### # # $ #.## # # # $ $ # .#### ## # # ## # ## # ## ####### $##$ $ # ## $ #@# # ## ###### ####### '; at: 78 put: ' ########### # # # $ $ # ###### # $ ##### # # ##### $ ##$# # $ $ # # ## ## # # ##@##### ## # # #### # ## ## #....# # $ # #....# # # ###### ####### '; at: 79 put: '############# # # # ### $$ # # # $ $ # # $####$###### # $ ## ##### # $$ $ ...# ### ## $$# ...# # ## # ...# # # ...# ###@############# ### '; at: 80 put: ' ################# ###@## ...# # # ...# # $ # ...# # $$ # ...# ## $ ###$########## # ### $ # ## $ $ # # $ # $ # # $ # # # $ # # # # # ########### '; at: 81 put: ' ##### ########## # # # # # $ $ $$ # # ##### ## $ # #$$ #$## $ # # ### # ##$ # ###### ### $ $ # #.... ## # #.... ###### #.... # ###########@## ### '; at: 82 put: ' ###### #### # # ## # # $ # ### #### ######## # $ $ ## ...# # $$ $$ ...# # $ $## ...# ##@## ## ## ...# ### $ ######## # $$ # # # # ######### '; at: 83 put: '####### ######### # # # ## # # ### # # $ # # # $ ### $ # # $$ ##$ # # #### ## # #@############ ## ###.. #####$ # #.. #### # #.. $$ # #.. #### $ # #.. # # # ######## ##### '; at: 84 put: '####### # ########## # # # ## # $ # $ $ # # $ # $ ## # # $$ ##$ $ # ## # ## ####### ## # ## ...# # #$ ...# # $$ ...# # ##@# ...# ################ '; at: 85 put: '############ # # ## # $ $ # ###### #### ##### # #.. # #### # #.#### #### # #.... # $ #### # ...# # $$$# ## ###.#### ## $@$ # # ##### $ # # # #.# $ $###$ # # #.######## # $ # # #.. ## $ # # # ####### $ # # # # # # ## ##### ########## '; at: 86 put: '################ # #@ # # # # # # # $ $$# # #...# #$$$ # # ...# # $ $$## # ##.## # ## # # #... $ # # ## ### ####### # # #### ###### '; at: 87 put: ' ##### #### ## ##### # $ ### # # $@$ $ $ # # #$######## ## # # $ # # # # $ $ # # # ## # $# # ##### # ## # # # $ # ### # ##### ## #....# # $ ....# # #....# ################ '; at: 88 put: '############# #........#### #...#### # ##### #...# ### $ # #...$$ $ $ # # .# $ $# $ ## #...# #$# $ # #.# # $ $ # #. #$###$####$# ## # $ $ # # # $@$ # # # # #### $ $# # # ### # # # $$ # ##### # # # ######### '; at: 89 put: ' ################## # $ ...#.## # ####..... # # ####### #..... # # # $ $ ##....## # # $ # # ###...# # # $@$ $ ##### # ## # $ $ $$ $ # # #$# $# # $## # # ## ## ## $ # # # # $# $ $ # # # # ####### # ########$## # # # $ # ######## ##### ### # #### '; at: 90 put: '#################### #..# # # #.$ $ #$$ $## $## #.$# ### ## ## # # # $ # $$ $ # # ### # # #$ #### # ## # $ #@ # # # $ $ ##.## $ # # # $# $# $ ### # # # # ### # # ######## # # # # #.#.# ##$########$# ...# # .* # ##.#.# # .*...* $ .....# #################### '; yourself! ! !SokobanWorld class methodsFor: 'mazes' stamp: 'rhi 9/9/2004 13:27'! setMazesNamed: aSymbol self mazes: (self mazeSets at: aSymbol) value; mazeSetName: (self mazeSetNamesAt: aSymbol).! ! !SokobanWorld class methodsFor: 'private' stamp: 'rhi 7/14/2003 17:42'! extentOf: aSequenceableCollection ^ (aSequenceableCollection inject: 0 into: [:longest :each | each size max: longest]) @ aSequenceableCollection size! ! !SokobanWorld class methodsFor: 'private' stamp: 'rhi 7/30/2003 13:33'! importHackMazesFromFile: aString "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\loma.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\masmicroban.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\massasquatch.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\microban.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\sasquatch.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\sasquatchiii.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\sasquatchiv.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\sasquatchv.txt']" "inspectIt: [self importHackMazesFromFile: '.\SokobanPuzzles\sasquatchvi.txt']" | lines imported lastLineWasEmpty count maze beforeFirst code | self flag: #rhi. "Very bad, but good enough..." lines _ (FileStream fileNamed: aString) contentsOfEntireFile findTokens: String crlf. imported _ IdentityDictionary new. lastLineWasEmpty _ true. count _ 0. lines do: [:line | (line withBlanksTrimmed isEmpty or: [(line first = $;) or: [line first = $']]) ifTrue: [lastLineWasEmpty _ true] ifFalse: [ lastLineWasEmpty ifTrue: [ lastLineWasEmpty _ false. count _ count + 1]. (imported at: count ifAbsentPut: [OrderedCollection new]) add: line]]. "-=-=-=-=-=-=-=-=-=-=" imported copy keysAndValuesDo: [:idx :coll | maze _ WriteStream on: String new. beforeFirst _ true. coll do: [:line | beforeFirst ifTrue: [beforeFirst _ false] ifFalse: [maze nextPut: Character lf]. maze nextPutAll: line]. imported at: idx put: maze contents]. "-=-=-=-=-=-=-=-=-=-=" code _ WriteStream with: ' ^ IdentityDictionary new'. imported keysAndValuesDo: [:idx :str | code cr; nextPutAll: ' at: '; nextPutAll: idx printString; nextPutAll: ' put: '; nextPutAll: str printString; nextPut: $;]. "-=-=-=-=-=-=-=-=-=-=" ^ code contents! ! !SokobanWorld class methodsFor: 'private' stamp: 'rhi 7/30/2003 12:44'! mazeFrom: aString ^ (self tokensFrom: aString) do: [:row | row replaceAll: self playerAtGoal with: self player]! ! !SokobanWorld class methodsFor: 'private' stamp: 'rhi 7/14/2003 17:42'! playerPositionIn: aSequenceableCollection | row | 1 to: aSequenceableCollection size do: [:idx | row _ aSequenceableCollection at: idx. (row includes: self player) ifTrue: [^ (row indexOf: self player) @ idx]]. self error: 'Player missing...'.! ! !SokobanWorld class methodsFor: 'private' stamp: 'rhi 7/30/2003 12:41'! tokensFrom: aString ^ aString findTokens: String crlf! ! !SokobanWorld class methodsFor: 'private' stamp: 'rhi 7/30/2003 12:43'! wallsFrom: aString ^ (self tokensFrom: aString) do: [:row | row replaceAll: self player with: self free; replaceAll: self box with: self free; replaceAll: self boxAtGoal with: self goal; replaceAll: self playerAtGoal with: self goal]! ! SokobanWorld initialize! SokobanMorph initialize!