Designer and Blocks Editor - Lab3
Designer and Blocks Editor - Lab3
Laboratory 3 (MoleMash)
Introduction:
For the MoleMash app shown in Figure 3-1, you’ll implement the following functionality:
Scenario
In this activity, students will be using the Canvas components for drawing with
sense touches and drags. Screen arrangement components is used to organize the
layout of components. Students will also learn the basic even handler, creation and
defining of variables.
Laboratory Outcome.
At the end of the laboratory, students must be able to:
In this section, you will place the components necessary for the game’s action. In
the next section, you will place the components for displaying the score.
1) From the Drawing and Animation drawer, drag in a Canvas component, leaving it
with the default name Canvas1. Set its Width property to “Fill parent” so that it is
as wide as the screen, and set its Height to 300 pixels.
2) Again, from the Drawing and Animation drawer, drag in an ImageSprite
component, placing it anywhere on Canvas1. At the bottom of the Components
list, click Rename and change its name to “Mole”. Set its Picture property to
mole.PNG, which you uploaded earlier.
Your screen should now look something like Figure 3-2 (although your mole
might be in a different position).
You will now place components for displaying the user’s score—specifically, the
number of hits and misses.
Your screen should now look like something like Figure 3-3.
Figure 3-3. The Component Designer view of all the MoleMash components
After creating the preceding components, let’s move to the Blocks Editor to
implement the program’s behavior. Specifically, we want the mole to move to a random
location on the canvas every second. The user’s goal is to tap on the mole wherever it
appears, and the app will display the number of times the user hits or misses the mole.
(Note: We recommend using your finger, not a mallet!) Pressing the Reset button resets
the number of hits and misses to 0.
In the programs you’ve written thus far, you’ve called built-in procedures such as
Vibrate in HelloPurr. Wouldn’t it be nice if App Inventor had a procedure that moved an
ImageSprite to a random location on the screen? The bad news: it doesn’t. The good
news: you can create your own procedures! Just like the built-in procedures, your
procedure will show up in a drawer and you can use it anywhere in the app.
To understand how to move the mole, we need to look at how Android graphics
work.
The canvas (and the screen) can be thought of as a grid with x (horizontal) and y
(vertical) coordinates, where the (x, y) coordinates of the upper-left corner are (0, 0).
The x coordinate increases as you move to the right, and the y coordinate increases as
you move down, as shown in Figure 3-4. The x and y properties of an ImageSprite
indicate where its upper-left corner is positioned; thus, the mole in the upper-left corner
in Figure 3-4 has x and y values of 0.
To determine the maximum available x and y values so that Mole fits on the
screen, we need to make use of the Width and Height properties of Mole and Canvas1.
(The mole’s Width and Height properties are the same as the size of the image you
uploaded. When you created Canvas1, you set its Height to 300 pixels and its Width to
“Fill parent,” which copies the width of its parent element, which in this case is the
screen.) If the mole is 36 pixels wide and the canvas is 200 pixels wide, the x coordinate
of the left side of the mole can be as low as 0 (all the way to the left) or as high as 164
6|P age Designer Components – Narte AM
(200 – 36, or Canvas1.Width – Mole.Width) without the mole extending off the right
edge of the screen. Similarly, the y coordinate of the top of the mole can range from 0 to
Can vas1.Height – Mole.Height.
Figure 3-5 shows the procedure you will create, annotated with descriptive
comments (which you can optionally add to your procedure).
To randomly place the mole, we will want to select an x coordinate in the range
from 0 to Canvas1.Width – Mole.Width. Similarly, we will want the y coordinate to be in
the range from 0 to Canvas1.Height – Mole.Height. We can generate a random number
through the built-in procedure random integer, which you can find in the Math drawer.
You will need to change the default “from” parameter from 1 to 0 and replace the “to”
parameters, as shown in Figure 3-5.
Now that you’ve written the MoveMole procedure, let’s make use of it. Because
it’s so common for programmers to want something to happen when an app starts,
there’s a block for that very purpose: Screen1.Initialize.
Making the mole move every second will require the Clock component. We left
the TimerInterval property for Clock1 at its default value of 1,000 (milliseconds), or 1
second. That means that every second, whatever is specified in a Clock1.Timer block
will take place. Here’s how to set that up:
If that’s too fast or slow for you, you can change the TimerInterval property for
Clock1 in the Component Designer to make it move more or less frequently.
You can translate the blocks in Figure 3-8 in the following way: whenever the
canvas is tapped, check whether a sprite was tapped. Because there’s only one sprite
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedural Abstraction
The ability to name and later call a set of instructions like MoveMole is one of the
key tools in computer science and is referred to as procedural abstraction. It is called
“abstraction” because the caller of the procedure (who, in real-world projects, is likely to
be different from the author of the procedure) only needs to know what the procedure
does (moves the mole), not how it does it (by making two calls to the random-number
generator). Without procedural abstraction, big computer programs would not be
possible, because they contain too much code for individuals to hold in their head at a
time. This is analogous to the division of labor in the real world, where, for example,
different engineers design different parts of a car, none of them understanding all of the
details, and the driver only has to understand the interface (e.g., pressing the brake
pedal to stop the car), not the implementation.
Some advantages of procedural abstraction over copying and pasting code are:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A friend who sees you playing MoleMash will probably want to give it a try, too,
so it’s good to have a way to reset the number of hits and misses to 0. Depending on
which tutorials you’ve already worked through, you might be able to figure out how to do
this without reading the following instructions. Consider giving it a try before reading
ahead.
At this point, you probably don’t need step-by-step instructions for creating a
button click event handler with text labels, but here’s a tip to help speed up the process:
instead of getting your number from the Math drawer, just type 0, and the block should
be created for you. (These kinds of keyboard shortcuts exist for other blocks, too.)
We said earlier that we want the device to vibrate when the user taps the mole,
which we can do with the Sound1.Vibrate block, as shown in Figure 3-10.
• Drawing Canvas
• Layout Component
• Clock
• Sound
• Create your own Method/Event
Instructions: