|My answer was Plumbin'. It's a self contained Smalltalk application
written to be used in the hands-on lab section of an advanced Smalltalk
class. Students were asked to read the program and then extend it. Plumbin'
is designed to be small enough to read in one sitting while still offering
Plumbin' has a direct manipulation interface. One arranges assorted tiles by dragging them with the mouse. When dropped, the tile aligns itself percisely with the rest of the mosaic. A shift-drag pulls off a copy of a tile. This makes for an endless supply of material.
Tile Faucet Spout StraightPipe TeePipe ElbowPipe ReverseElbowPipe PressureTank
|Plumbin' is a game of sorts. The goal is to connect a faucet
to a spout. The images on each tile can change. A drop appeared
at a spout the moment the path is complete.
Plumbin' is also a simulator. Each tile models a device capable of propagating both pressure and flow. A right-click on the faucet gets a menu for changing the pressure. We offered a pressure tank as an add-on. It relates pressure to flow and vice-versa. The level of the tank (state held within the tile) is animated as the simulation progressed.
The name Plumbin' is a take off on Truckin', another educational simulator developed by the Loops group under Lynn Conway at Xerox PARC. Their spelling probably goes back to the Greatfull Dead, Janice Joplin or Robert Crumb.
|Mosaic example edit
|One launches the Plumbin' application by sending edit to a mosaic. The mosaic class will create an example on demand. It creates mosaics preloaded with one of every kind of tile.
|I've recently retrieved Plumbin' from an old Tektronix 4404 that had
been collecting dust in the basement. I've loaded it into Squeak
Smalltalk and gotten all the graphics converted to color. Oooh.
I've also added an infinite recursion check. Plumbin' was originally written for a dialect that could only allocate 32 thousand objects. If you assembled a loop of pipe the simple simulator would loop too and quickly exhaust all but a small reserve of the object space -- just enough to bring up a notifier. I thought this behaviour to be quite sophisticated and loved to show it off. Now an infinite loop just drives Smalltalk into paging so I have to explicitly check for loops and issue my own notice.
|I've zipped up the portable image with a Windows interpreter. Drop the image on the exe to get Squeak running. This image will work on any Squeak platform. Check the archives for an interpreter for your Mac or Unix or whatever. I've also zipped up the source and a couple of patches I needed for version 1.20. You will want to get a full Squeak environment (with source and change files) before you try to look at these.
|Try adding a new kind of tile to Plumbin' yourself. Make a subclass of Tile and TileView or TileController too, if you need them. Put it in a category with your name on it, something like Plumbin-PressureTank, and email me the fileout. I'll add it to the add-on repository.