[squeak-dev] Morphic issues / extras

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[squeak-dev] Morphic issues / extras

In case these are of any use to anyone:

1. There was not a morphic scripting Tile for doing simple 'while' loops, so I have implemented one.
It is in SqueakMap and it is called: WhileLoopForMorphicScripting.

2. Due to a lack of availability of reasonable demonstrators, I have implemented a CalculatorMorph as a demo application (also in SqueakMap).

3. I found it irritating that it is not easy to write very simple straightforward morph code in workspaces (see the example below) or to write methods rather than scripts - you have to know about players and costumes and do idiocyncratic things like call 'assuredPlayer'.  While this is ok for serious programming, it is clumsy for the initial teaching of Smalltalk.

What I wanted was something that is like traditional turtle programming in traditional (Seymour Papert type) Logo. To get around the problem have written a TurtleMorph (also on SqueakMap).  It is somewhat irreligious (it traps doesNotUnderstand) but it does mean that you can do each of the following couple of lines (and execute them one at a time) without getting an error (apart from setting X to be a global variable of course):

X := TurtleMorph new openInHand
X forward: 99

The reason this is an issue is that you will get an error if you do the same with a standard morph. Try:

X := EllipseMorph new openInHand.
X forward: 99

Morphic scripts put their code into a 'player' which is also not very obvious for simple programming - with TurtleMorph you can put methods into the TurtleMorph class.

I got shot-down when I suggested that all morphs should behave this way (costumes and players are important at a deeper level and doesNotUnderstand is unethical (although fun sometimes)).  However, I see no problem in having a TurtleMorph that gets round this. If anyone has a better solution please tell me where I have gone off-track.