Logo Foundation Home
What's New?
Calendar

 
       

  Event Programming
by
Michael Tempel
 

© 1995 Logo Foundation

You may copy and distribute this document for educational purposes provided that you do not charge for such copies and that this copyright notice is reproduced in full.

Logo Foundation
250 West 85th Street, Suite 4D
New York, NY 10024
Telephone: (212) 579-8028
FAX: (212) 579-8013

Board of Directors
Seymour Papert, Chair
Clotilde Fonseca
Tessa R. Harvey
Geraldine Kozberg
Michael Tempel
Takayuki Tsuru

The Logo Foundation is a nonprofit educational
organization incorporated in New York State.

 

Overview

During the first two weeks of July, 1994 I taught two workshops in Event Programming at the Omar Dengo Foundation in Costa Rica. This document includes articles about these workshops, workshop notes, and sample programs.

"Advancing Logo", by Seymour Papert, appeared in the Spring 1994 issue of Logo Update. Papert recalls discussions that led to the July workshops. "A New Approach" appeared in the Fall 1994 issue of Logo Update. In this article I summarize the planning and execution of the workshops and place them in the context of the ongoing work of the Programa Informática Educativa in Costa Rica.

"Workshop Notes" were the materials used in the first July workshop. They include Logo tool procesudre, sample programs, and comentary. Of course, things did not go as planned. "The Second Workshop" describes the changes and simplifications we made to the tools and samples in preparation for the session in the second week of July.

Advancing Logo
by Seymour Papert

The following is based on an interaction with a group of teachers who will surely recognize themselves in it. I decided not to identify them because the limited space available here forces me into an oversimplified presentation that casts me in the role of "the expert" coming with "answers" to problems that other people ("just teachers") couldn't solve. I hate this role. In reality the discussions were far richer and more creatively interactive. A fuller narrative would cast me as a catalyst rather than as an expert.

In the last issue we were grappling with the theoretical problem of defining what kind of Logo is advanced Logo. Soon after writing my contribution I found myself in a meeting of Logo teachers who were grappling with a related but very practical problem. They felt that many of their students were not advancing in programming skills. For example even after several years of doing Logo, students still composed long and intricate strings of Logo instructions and resisted all suggestions of organizing their work as subprocedures. The teachers saw the situation as a "bug" in their own work and had tried, so far with limited success, a number of strategies to remedy it. Some of them, working on the assumption that the students did not understand the idea of subprocedure, had developed teaching units to explain some principles of structured programming. Others tried to influence the students by showing concretely how their code could be written differently. The teaching materials they developed were excellent and I am sure that these teachers would have exercised great skill in engaging students in discussion about the relative merits of different styles of programming. Why then did their strategies not succeed?

In the course of the discussion I came to appreciate more sharply than I had before the force of another factor that enters into this kind of situation. One might call it "the Piaget insight" which I formulated in the following way back in the days I when worked in Geneva. One of the major contributions Piaget made to the investigation of children's thinking is understanding that it is not right to label as "wrong" children's declarations that there are more red beads than blue beads or more water in the tall glass. If you truly succeed in putting yourself in their intellectual framework (no easy task!) you will understand that "the children are correctly answering the questions they are really answering . . . only their questions are not the same as yours even if both use the same words." This does not mean that children, like the rest of us, aren't sometimes just plain wrong. But the whole point of Piaget's empathic and interactive way of conducting these conversations is to distinguish between errors or slips or "mere misunderstandings" and what the children really believe.

The Piaget insight applies to programming. For example, in the early days of our work at the Hennigan School a remarkable fifth grader, Nicky Brown (now an MIT undergraduate), put me right when I tried to advise him to break up a program into subprocedures. He systematically refuted all my arguments. No, it would not help him understand his program more clearly: he demonstrated by his ease of debugging and modifying his work that his own way of understanding it worked perfectly well. Well yes, subprocedures might help others take over parts of his work, but this wasn't his main goal and besides he didn't really think that they were interested anyway. Finally it was clear from his discussion that he just didn't like the kind of structuring of his project that would be produced by the subprocedurization I suggested.

Remembering Nicky Brown - and many other talented young programmers - was a sharp reminder that there is something wrong with describing the problem raised by these teachers as if their students lacked "programming skill." They may have lacked one particular programming skill, but what their style of programming required was another kind of skill - and when one looks at how fluently many students debug their "spaghetti code," one is impressed by the level of that skill.

This diatribe against imposing structured programming on these children is not intended to avoid the issue that it would be immensely valuable for them to learn new programming ideas. Quite the contrary, it led me to a crisper formulation of an alternative strategy to achieve this not by trying to force new ways to write the children's old programs but by introducing them to new programming domains in which other ideas would come up more naturally.

My new insight consisted of looking more closely at the development of the practice of Logo in the schools from which these teachers came - and when it was finally formulated I see that it applies on a much larger scale perhaps to the way that Logo programming in schools has developed across the board. One of the most positive educational benefits that came with the introduction of Logo into the schools I was looking at was a shift towards project-based learning. An excellent progressive step. But every progress risks bringing a certain kind of conservatism in its wake. In this case the conservatism took the form of establishing a certain model of "project" and this model of project carried with it a match to a certain style of programming, in fact precisely the style from which the teachers were now trying to wean their students.

The style of project in question developed a wide presence with the introduction of LogoWriter. Schematically described, it consists of using Logo to make a presentation of the results of research conducted by students. In the best cases Logo serves as more than just presenting ideas that are already formulated; the struggle to represent material is part of thinking about it. Some examples of this kind of work have become well known in the Logo community. Early examples included a project on the life cycle of the fly developed by Marian Rosen's computer summer camp group, and projects by students in Joanne Ronkin's class at Hennigan on such topics as the human skeleton. From Costa Rica came a bold students' project on human reproduction and many on historical and ecological themes. There was no doubt in the minds of the teachers at the meeting I am reporting here that such projects were educationally valuable and a good use of Logo. What emerged only slowly during the meeting was an awareness that the projects favor a certain style: they are essentially narrative projects and favor a "narrative" style of programming that looks in the end more like a page full of text than like a structured piece of mathematics. Indeed I would go further and say that there has been a co-evolution of this kind of project and this style of programming.

The best way to diversify the style of Logo programming is to diversify the kinds of projects for which Logo is used. A clear example is provided by Lego-Logo. Programming a Lego turtle to follow a light requires programming based on repetitive runs of conditionals. But there is room for infinite diversity without hardware beyond the computer. Writing a video game in the style of Pacman or Mario requires efficient testing for new conditions and thinking carefully about a user interface that will permit rapid response. Simulations involving probability lead into issues of representation. All of these put so much of a real premium on small self-contained tool-like procedures that there is no need to persuade students to use them. They are what comes naturally in these contexts.

A New Approach
by Michael Tempel

It was near the end of a five-day Logo workshop, time for sharing projects on the big screen. There were car races, boat races, and fish races; a rabbit searching for carrots and a turtle trying to find its way home; a maze, a pacman, and a pong game.

I was facilitating this workshop for 25 "Tutors", the people who provide training and support for teachers in 160 Costa Rican elementary schools in the Programa Informática Educativa (PIE), a joint project of the Fundación Omar Dengo (FOD) and the Ministerio de Educación Pública (MEP). During the past year I have spent a good part of my time in Costa Rica as one of a group of international consultants working at the FOD under a grant from the Banco Interamericano Desarrollo(BID) [Interamerican Development Bank] . Our charge has been to develop Logo curriculum materials, and to define what that means.

The workshop was inspired by discussions Seymour Papert referred to in "Advancing Logo," his column in the spring, 1994 issue of Logo Update. The "narrative" style of Logo program that he describes - using Logo to present a report or tell a story - has been developed to a remarkable degree in the Costa Rican schools over the past six years. I attended a Children's Logo Conference last October where students presented a series of such projects to schoolmates, parents, and guests. One major work was a study of the presidents of Costa Rica. This 20 minute extravaganza included biographical and historical information, along with a full color portrait, drawn using the turtle, for each of Costa Rica's 39 presidents. Remarkable projects like this have been presented at national and regional Children's Logo Conferences over the years.

One is so overwhelmed by the beauty and quality of these projects that it is difficult to adopt a critical stance and look for areas of potential growth and improvement. Yet that is precisely what is happening within the PIE. In part there is a wish to encourage children to use a more procedural style of Logo programming. But also, with the PIE now six years old, there is a growing feeling of wanting to broaden and diversify the kinds of activities that students engage in - to develop a "new approach" to Logo programming and projects.

In April we began designing workshops for the Tutors and teachers to be followed by testing of materials and teaching strategies in the schools. The school year in Costa Rica goes from March through December with a two-week break in July. We planned to use this July break for workshops, and then pilot our new approach in selected schools during the second half of the school year.

As part of the workshop planning I wrote a game program and saved versions of it at various stages of development. Along with the game I wrote a collection of Logo tool procedures that could be used as if they were primitives. As I went along, I modified the Logo tool procedures and added new ones. This process helped me to become familiar with possibilities and problems and in the end, I had a collection of tools and sample programs for use in the July workshops. (See the "Logo Tool Box" on page 3.)

We began to use the term "event programming" to refer to a range of Logo projects that include interactive video games, animations, and simulations. An important element in this type of program is the uncertainty about its course and the unpredictability of its outcome. The flow of action is affected by pressing keys and there may be elements of randomness, as well.

I don't mean to suggest that with our "new approach" we were journeying into uncharted territory. Interactive programs and games have long been a part of the Logo culture, familiar in Costa Rica as well as in other centers of Logo activity. In fact, some of the Tutors used the workshop time to modify and improve projects they had begun previously. But in Costa Rica, and elsewhere, the narrative style of Logo project has tended to be dominant, at least among LogoWriter users. In our approach to event programming, we drew upon old ideas but added some new dimensions, especially in our way of using Logo tool procedures to support the style of programming we sought to encourage.

During several months in which I was involved in planning and teaching these workshops we had frequent discussions about the many educational issues involved in this new approach. How do we present the tools? Do we introduce them to learners in an orderly sequence, or on an "as needed" basis as projects are developed? What relevance do games have to school subjects and curriculum, and to important domains of human knowledge?

Papert shed light on this last issue in a video tape he prepared for use in the workshop. He showed several examples of Logo programs. In one, a bee flies randomly around the screen. When it encounters a red flower, it stops, but it ignores flowers of other colors. This beginning could be elaborated into a simulation of insect behavior and plant propagation. Later in the video, we see a person walking across the screen and attempting to jump over an obstacle. There are many ways to program the jump. While working on this problem the learner will be engaged in questions about the laws of motion.

Papert was involved in this workshop not only through his video presence, but much more directly, as well. He participated in the planning process during the months leading up to the workshop. During the workshop itself we had numerous email exchanges and a few live telephone calls using a speaker phone so that the entire group could participate in the conversations.

During the second week of July there was another workshop for the teachers who had been selected to pilot the new ideas and materials with their students. This time two of the Tutors, Efraim Lopez and Julia Rivera, joined me as instructors. As soon as the first workshop ended, the three of us looked closely at people's projects, sorted out what had happened, and developed plans for the following week. Based on our experience we simplified the tools and samples. During the second workshop the projects that people created were similar to those we saw during the first week, but they were more elaborate. This was partly because there were fewer problems with the tools, allowing people to move ahead more easily with their projects. And, since it was the final week of the World Cup competition, the projects included a soccer game.

The months of planning and the two weeks of workshops were an intense experience for me, and a very rewarding one. It has also been a time of exciting change and growth for the Logo project in Costa Rica. In May, a newly elected government took office. President José Figueres and Education Minister Eduardo Doryan are committed to increasing resources for education. This includes expansion of computers in education projects. The PIE, which now serves 30% of Costa Rica's elementary school children, will grow to reach 50% within the next four years and a new project is being initiated in the secondary schools.

But the FOD has other changes to adjust to. Clotilde Fonseca, Executive Director of the FOD, and Eleanora Badilla, Diretor of the PIE, have both taken postions in the new government. The expansion of the PIE is proceeding with the guidance of its new director, Andrea Anfossi. The BID project has come to an end and its director, Claudio Gutierrez, has returned to his position as Professor of Computer Science at the University of Delaware.

After I left Costa Rica in July there was yet another round of workshops for more teachers and for ten new Tutors who had just been hired to provide the additional support needed for the growing project. This story is far from over. To be continued . . .

Workshop Notes:
Interactive Logo Game Programs

By Michael Tempel
May 19, 1994

In preparation for the proposed July workshops I have developed a series of game programs in order to familiarize myself with the possibilities and problems of programming in this domain, and to develop tool procedures for this type of programming activity. I haven't given much attention to content or cosmetics, focusing rather, on the structure of the games.

In a workshop I would present the idea of an interactive target game and provide the initial tools. As people develop their games, new tools and techniques can be introduced. By going through the development of some programs myself, I hope to be able to anticipate some of the needs of people in the workshop. I expect that new possibilities and problems will emerge and we will create some new tools, and so be better prepared for future workshops with teachers and for work with children in the schools.

These programs are based on the flower eating turtle program we used in a workshop here at FOD last January, and on ideas discussed with Seymour over the past several weeks.

I started with a target game that used several Logo tool procedures to simplify the programming. The tools appear at the bottom of the flip side of each LogoWriter page. Some tools are used on all the pages. I added more as I went along incorporating new featured and modifications into the game.

The games are all structured in the same general way. At the top of the flip side is this procedure:

to game
setup
play
end

Setup sets up the game by placing the turtle, the target and other objects, if any, and in some cases setting an initial level of "energy" for the turtle.. On all the pages, play is

to play
forever [go]
end

Forever is a tool used on all the pages. It causes endless repetition of the list of instructions it gets as input, in play this list contains just the procedure go.

to forever :stuff
run :stuff
forever :stuff
end

A pair of tools work together to capture keystrokes and use them to activate instructions. Get.key remembers a key that is pressed. If.key takes two inputs. The first is the name of a key. The second is a list of instructions to activate if that key was the last key pressed. The first line of if.key prevents an error that would occur in the next line if current.key had no value. This situation will occur the first time a game is run before any key has been pressed. The instruction make "current.key "nothing prevents :actionfrom being run over and over again. This would happen when the program repeatedly calls if.key many times before a new key is pressed.

to get.key
if key?
[name readchar "current.key]
end

to if.key :key :action
if no name? "current.key [stop]
if :key = :current.key
[run :action
make "current.key "nothing]
end

If.color is another tool used in all the games. It activates a list of instructions when the turtle is over a particular background color.

to if.color :color :action
if colorunder = :color
[run :action]
end

Here is the progression of games. The pages are named SAMPLE, SAMPLE2, etc.

SAMPLE
In this first version of the game the turtle stamps a target at a specific spot. The turtle is then restored to its original shape and color and placed at home. Go moves the turtle forward or back 20 steps, or turns it right or left 90 degrees, depending upon which key is pressed. Go also checks for the color of the target. You win when you reach the target. You can't lose, but you can lose interest.

to game
setup
play
end

to setup
rg
ct
target
place.turtle
end

to target
setsh 11
setc 2
pu
setpos [120 80]
pd stamp pu
end

to place.turtle
setsh 0
setc 1
home
end

to play
forever [go]
end

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 20]
if.key "b [bk 20]
if.color 2
[pr "|I win!|
stopall]
end

SAMPLE2
In the second game, a live turtle is used as the target rather than a stamp. I tried this with the idea of eventually using moveable and moving targets.

to setup
rg
ct
pu
ask 1 [target]
end

to target
setsh 24
setc 2
pu
setpos [120 80]
st
end

A new tool is needed to check if the wandering turtle is touching the target turtle.

to if.touching :who :action
if pos = ask :who [pos]
[run :action]
end

This change revealed a bug. In SAMPLE the turtle moved forward or back 20 steps with each keypress. If you press "a" several times from the start of the game ycor increases in the pattern 0, 20, 40, 80. The next "a" sends it beyond the top of the screen. It returns at the bottom with a ycor of -90. Then repeated presses of "a" move it in the pattern -70, -50, -30, -10, 10, 30, 50, 70, 90. Since the target is at [120 80] the turtle will be 10 steps high or 10 steps low, never "touching" according to if.touching. (If the turtle wraps again, it's back in sync with the target. A third wrap throws it off again, and a fourth wrap . . .)

This wasn't a problem in SAMPLE because the target was large enough so that if.color would still detect a hit even when the turtle was high or low by 10 steps. My quick fix was to change the step from 20 to 10.

SAMPLE4
I went back to using a stamped target and if.color to detect it. I added the idea of energy. The turtle starts with a certain amount of energy determined by setenergy in setup.

to setup
rg
ct
target
place.turtle
setenergy 20
end

She loses energy at each step forward or back. Less.energy is called in go to do this. If energy gets to 0 you lose.

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 20 less.energy]
if.key "b [bk 20 less.energy]
display :energy
if energy = 0
[pr "|I lose!|
stopall]
if.color 2
[pr "|I win!|
stopall]
end

Another new instruction in go is display :energy which prints the current energy level on the screen after erasing what was previously printed.

The new tools required are

to setenergy :how.much
make "energy :how.much
end

to energy
output :energy
end

to more.energy
setenergy energy + 1
end

to less.energy
setenergy energy - 1
end

to display :thing
ct
print :thing
end

It takes 10 steps to get to the target by the shortest route possible. You can lose, but you really have to go out of your way to do so. The game could be made more difficult by lowering the starting energy to reduce the margin of error. You could also change it so that energy is lost for turns as well as for forward and back steps. This would make routes that were previously equivalent very different.

SAMPLE5
I went back to the problem caused by wrapping in SAMPLE2 trying a different solution that I thought might be generally useful later. Instead of if.touching which demanded and exact hit, I tried a fuzzier if.near which checks for being near. How near is determined in near. To solve the immediate problem a distance of 11 or more is good.

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 20]
if.key "b [bk 20]
if.near 1
[pr "|I win!|
stopall]
end

to if.near :who :action
if near? :who [run :action]
end

to near? :wh
output
(distance ask :wh [pos]) < 11
end

SAMPLE7
Instead of a target we now have a house. The turtle is trying to get home. But the big change is the addition of a flower which gives the turtle more energy if she eats it. Setup now builds the house and plants the flower.

to setup
rg
ct
house
flower
place.turtle
setenergy 20
end

to house
setsh 20
setc 2
pu
setpos [120 80]
pd stamp pu
end

to flower
ask 2
[st pu
setsh 1
setrandompos]
end

The turtle is now also put at a random place rather than at home.

to place.turtle
setsh 0
setc 1
setrandompos
end

Flower and place.turtle use a new tool to plant the flower and place the turtle at random places.

to setrandompos
setheading 0
fd 10 * random 100
setheading 90
fd 10 * random 100
end

The positions are restricted so that ycor and xcor are always multiples of 10. I did this so that if.touching could work.

Here's the new version of go:

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 10 less.energy]
if.key "b [bk 10 less.energy]
display :energy
if energy = 0
[pr "|I lose!|
stopall]
if.touching 2
[setenergy energy + 10
ask 2 [setrandompos]]
if.color 2
[pr "|I win!|
stopall]
end

The new instruction in go is

if.touching 2
[setenergy energy + 10
ask 2 [setrandompos]]

It checks to see if the wandering turtle is on a flower. If so, she eats it and her energy goes up by 10 points. a new flower is planted somewhere else. Actually, she doesn't eat it. It just moves to a new position, but the illusion is okay.

In setup, the turtle may be placed at a position that is too far from the house for her to get home without eating. You may have to plan a route so as to get the flower. When the flower is eaten, a new one appears and the situation changes again. It is also possible for a game to be unwinnable.

SAMPLE8
The only change here is in house. Now the house is also placed randomly.

to house
setsh 20
setc 2
pu
setrandompos
pd stamp pu
end

SAMPLE10
One flower is not enough. Unfortunately there are only four turtles in LogoWriter. I didn't think three flowers was much better so I tried a different approach. Now the flowers are stamped so we can have as many as we want. When the turtle eats one, it is unstamped by erasing it with pe. Here's the new flower:

to flower
ask 1
[pu
setsh 1
setrandompos
pd stamp pu]
end

Setup is changed to plant 10 flowers

to setup
rg tr
ct
house
repeat 10 [flower]
place.turtle
setenergy 10
end

Go is changed to include a new procedure eat.

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 10 less.energy 1]
if.key "b [bk 10 less.energy 1]
display :energy
if.color 1
[eat
flower]
if.color 2
[pr "|I win!|
stopall]
if energy = 0
[pr "|I lose!|
stopall]
end

to eat
pe stamp pu
more.energy 5
end

In the instruction

if.color 1
[eat
flower]

in the procedure go, eat erases the flower and increases the turtle's energy by 5 points. Flower plants a new flower.

I also changed more.energy and less.energy so that they each take an input and change energy level accordingly. So in go, moving forward or back reduces energy level by one point:

if.key "f [fd 10 less.energy 1]
if.key "b [bk 10 less.energy 1]

In eat, more.energy 5 increases energy by 5. The new tools are

to more.energy :how.much
setenergy energy + :how.much
end

to less.energy :how.much
setenergy energy - :how.much
end

SAMPLE11
I added obstacles. Bumping into one reduces energy. Setup now looks like this:

to setup
rg
ct
house
repeat 10 [flower]
repeat 10 [obstacle]
place.turtle
setenergy 10
end

to obstacle
ask 2
[pu
setsh 2
setc 3
setrandompos
pd stamp pu]
end

Go is changed to include a check for the obstacles ofcolor 3. Crash causes energy to be lost. It also backs the turtle off the obstacle. Before I added this back-up, the turtle stayed on the obstacle and was rapidly drained of all energy. There's a small bug, though. If you press "r" and back the turtle into an obstacle, she still moves back to get off it. I'd prefer she move forward in that case, but I let it go for now. I also put sound effects in eat and crash.

to go
display :energy
get.key
if.key "f [fd 10 less.energy 1]
if.key "b [bk 10 less.energy 1]
if.key "r [rt 90]
if.key "l [lt 90]
if.color 1
[eat
flower]
if.color 3 [crash]
if.color 2
[pr "|I win!|
stopall]
if energy < 0
[pr "|I lose!|
stopall]
end

to eat
tone 500 1
pe stamp pu
more.energy 10
end

to crash
tone 40 1
bk 10
less.energy 5
end

At first I used shape 11 for the obstacles, but it was too big in the vertical direction. The turtle could record two hits while passing over it. I made a smaller box in shape 2.

It is possible to accumulate so many points that you will always be able to get to the house. This makes the game less interesting. One could alter several factors to change the difficulty of the game. The initial conditions that may be changed are the numbers of flowers and obstacles, and the initial energy level of the turtle. The amount of energy gained when eating a flower and lost when hitting an obstacle may also be changed.

There are some little bugs I found and haven't bothered to fix, yet. A flower may be stamped on top of an obstacle. If this happens then the turtle may safely go on the obstacle and eat the flower. This is because the flower is centered in the obstacle and that's where if.color is checking. Not only is it safe, but eating that flower also puts a hole in the obstacle making it safe for the turtle to go over it in the future. (Actually, it's not a bug, it's a feature.)

SAMPLE12
Here's a big change. The turtle moves forward automatically. Keystrokes only turn left or right. You have to think quickly since the turtle is always in motion (and losing energy). Here's the new go.

to go
display :energy
fd 10
less.energy 1
wait 20
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.color 1
[eat
flower]
if.color 3 [crash]
if.color 2
[pr "|I win!|
stopall]
if energy < 0
[pr "|I lose!|
stopall]
end

Wait 20 keeps things from going to fast. You can change the input to wait for a faster or slower paced game. You could add procedures to allow the player to set the speed by typing "hard" or "easy".

Crash doesn't need bk 10 anymore since the turtle moves forward off the obstacle after a hit.

to crash
tone 40 1
less.energy 5
end

SAMPLE13

Now there's a red rabbit on the screen. The rabbit is very dangerous. (He bears a long-standing grudge against the turtle that dates back to a foot race they had many years ago.) If the turtle bumps into the rabbit she loses 10 energy points.

The rabbit is turtle number 2 which is randomly positioned with setrandompos.

to rabbit
ask 2
[pu st
setsh 22
setc 4
setrandompos]
end

Rabbit is added to setup.

to setup
rg tr
ct
house
repeat 10 [flower]
repeat 10 [obstacle]
rabbit
place.turtle
setenergy 10
end

Collision is detected with if.touching. But, the rabbit may suddenly jump to a new poisition without warning. This requires a new tool:

to maybe :action
if 1 = random 10
[run :action]
end

Go now includes a line that may cause the rabbit to jump and a line to detect a collision which uses if.touching

to go
display :energy
fd 10
less.energy 1
quiz s [rabbit]
wait 20
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.color 1
[eat
flower]
if.color 3 [crash]
if.color 2
[pr "|I win!|
stopall]
if.touching 2
[ay!]
if energy < 0
[pr "|I lose!|
stopall]
end

to ay!
tone 60 2
tone 40 4
less.energy 10
end

That's it for now. I have some other ideas to try later:

  • Some flowers, of a different color, will contain more energy.
  • Some obstacles will cause a greater loss of energy than others.
  • New obstacles will appear and disappear in a random way.
  • When you accumulate a certain number of points, you go to another world with a new game (on another LogoWriter page.)

The Second Workshop

During the second week of July another workshop was held for a group of five teachers who would then work with other teachers on the "New Approach". The facilitators were Julia Rivera, Efraim Lopez, and myself.

The three of us spent the afternoon following the end of the first workshop planning for the next one. We sought to simplify the tools and samples and fix some bugs in the earlier materials.

Rather than include the tool procedures on the flip side of each sample page, we created a set of tools that could be used by all the samples, and saved it on a separate page. There was a startup procedure on the flip side of each sample page:

to startup
gettools "tools
end

The first sample places a stamped target in the upper right corner of the screen. The player directs the turtle to the target by pressing single keys to go forward, back, left or right. The target is detected with colorunder.

Sample1

to startup
gettools "tools
end

to game
setup
play
end

to setup
rg
ct
target
place.turtle
end

to target
setsh 11
setc 2
pu
setpos [120 80]
pd stamp pu
end

to place.turtle
setsh 0
setc 1
home
end

to play
forever [go]
end

to go
get.key
ifkey "r [rt 90]
ifkey "l [lt 90]
ifkey "f [fd 20]
ifkey "b [bk 20]
ifcolor 2
[print "|I win!|
stopall]
end

The second sample keeps track of energy, which decreases as the turtle is moved forward or back. Energy can run out before the target is reached, in which case, you lose.

Sample2

to startup
gettools "tools
end

to game
setup
play
end

to setup
rg
ct
target
place.turtle
setenergy 20
end

to target
setsh 11
setc 2
pu
setpos [120 80]
pd stamp pu
end

to place.turtle
setsh 0
setc 1
home
end

to play
forever [go]
end

to go
get.key
ifkey "r [rt 90]
ifkey "l [lt 90]
ifkey "f [fd 20 less.energy 1]
ifkey "b [bk 20 less.energy 1]
display :energy
if :energy = 0
[print "|I lose!|
stopall]
ifcolor 2
[print "|I win!|
stopall]
end

The third sample is the same as the second except that the target is at a random place on the screen.

Sample3

to startup
gettools "tools
end

to game
setup
play
end

to setup
rg
ct
target
place.turtle
setenergy 20
end

to target
setsh 11
setc 2
pu
setrandompos
pd stamp pu
end

to place.turtle
setsh 0
setc 1
home
end

to play
forever [go]
end

to go
get.key
ifkey "r [rt 90]
ifkey "l [lt 90]
ifkey "f [fd 10 less.energy 1]
ifkey "b [bk 10 less.energy 1]
display :energy
if :energy = 0
[print "|I lose!|
stopall]
ifcolor 2
[print "|I win!|
stopall]
end

In the fourth sample the target is a live turtle rather than a stamp. Ifnear is used to detect it rather than ifcolor.

Sample4

to startup
gettools "tools
end

to game
setup
play
end

to setup
rg ct
ask 1 [target]
place.turtle
end

to target
setsh 11
setc 2
pu
setpos [120 80]
st
end

to place.turtle
pu
setsh 0
setc 1
home
end

to play
forever [go]
end

to go
get.key
ifkey "r [rt 90]
ifkey "l [lt 90]
ifkey "f [fd 10]
ifkey "b [bk 10]
ifnear 1
[print "|I win!|
stopall]
end

The need for a new tool, until.color, emerged during the first workshop. In all of my original samples, the game ended when the target was detected. For example, in go below the game ends with stopall when the turtle goes over color 2.

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 20]
if.key "b [bk 20]
if.color 2
[pr "|I win!|
stopall]
end

But what if we wanted to have a two-part game? After hitting the first target, a second target might appear. Such a game program might look like this:

to game
setup
forever [go]
setup2
forever [go2]
end

But stopall stops all procedures and returns to "top level" or "command level". We would never get to setup2. What if we use stop instead of stopall in go:

to go
get.key
if.key "r [rt 90]
if.key "l [lt 90]
if.key "f [fd 20]
if.key "b [bk 20]
if.color 2
[pr "|I win!|
stop]
end

This won't work either because stop stops if.color, but forever [go] continues. We would want to stop if.color, go, and forever, allowing game to continue to setup2. This isn't possible in LogoWriter, although it is in other versions of Logo.

We got around this by creating two new tools. until.color and until.near. The fifth and sixth samples illustrate their use.

Sample5

to startup
gettools "tools
rg
pu
sety 85
setsh 11
setc 4
pd stamp pu
setx 140
setc 5
pd stamp pu
home
setsh 0
setc 1
end

to example
go
go2
end

to go
until.color 4 [fd 1 wait 2]
rt 90
end

to go2
until.color 5 [fd 1 wait 2]
tone 440 20
end

Sample6

to startup
gettools "tools
rg
pu
sety 85
setsh 11
setc 4
pd stamp pu
home
setsh 0
setc 1
ask 1
[st pu
setsh 11
setpos [140 85]
setc 5]
end

to example
go
go2
end

to go
until.color 4 [fd 1 wait 2]
rt 90
end

to go2
until.near 1 [fd 1 wait 2]
tone 440 20
end

Tools

to get.key
ifelse key?
[name readchar "current.key]
[make "current.key "nothing]
end

to ifkey :key :action
if :key = :current.key
[run :action
make "current.key "nothing]
end

to ifcolor :color :action
each
[if colorunder = :color
[run :action]]
end

to ifnear :who :action
if near? :who [run :action]
end

to setsentitivity :what
make "sensitivity :what
end

to sensitivity
output :sensitivity
end

to near? :wh
if not name? "sensitivity
[make "sensitivity 11]
output
(distance ask :wh [pos])
< :sensitivity
end

to forever :stuff
run :stuff
forever :stuff
end

to setenergy :how.much
make "energy :how.much
end

to energy
output :energy
end

to more.energy :how.much
setenergy energy + :how.much
end

to less.energy :how.much
setenergy energy - :how.much
end

to display :thing
ct
print :thing
end

to setrandompos
seth 0
fd 10 * random 100
seth 90
fd 10 * random 100
end

to until.color :color :action
if colorunder = :color [stop]
run :action
until.color :color :action
end

to until.near :who :action
if near? :who [stop]
run :action
until.near :who :action
end

to maybe :action
if 1 = random 10
[run :action]
end

 

LOGO UPDATE || LOGO ARTICLE & PAPER INDEX
LOGO PAPERS || PAPERS SUBMISSIONS GUIDELINES

 

WHAT'S NEW || LOGO FOUNDATION HOME || CALENDAR OF EVENTS

ABOUT THE FOUNDATION || WHAT IS LOGO?

FOUNDATION SERVICES || ON LINE PUBLICATIONS

LOGO RESOURCES || LOGO PRODUCTS

   
  © 2000 Logo Foundation. All rights reserved.