Summer Computing Workshop PROGRAMMING WITH SCRATCH Introduction Boolean Expressions – In programming, a Boolean expression is an expression that is either true or false. In Scratch, any block shaped like an elongated diamond is a Boolean expression. The three types of advanced Boolean operators we will discuss are not operator, and operator, and or operator. Messages – Message passing is a very useful tool in Scratch. It is a way that sprites can specifically start a script by broadcasting a message, either a script belonging to itself or a script belonging to another sprite can be executed when it receives that message. This is the only way Scratch allows one sprite to run scripts in the other. Interesting enough, like stated before, it can also be used to run scripts from the same sprite that broadcasted the message. Arrays – In programming, arrays are used to store multiple data of the same type in order to easily and quickly find and use the data later in the program. In Scratch, since there are no defined types, arrays are groups of variables that can contain both words and numbers. Session 6 Boolean Review Some basic Boolean expressions we discussed in Session 3 are: The above operators return true or false and can be used in structures we covered earlier such as There are three other commonly used Boolean operators that can be combined to create extremely flexible expressions. Boolean Expressions Now we will discuss other useful Boolean expressions and some examples of each. This operator is used when two conditions need to be met in order to execute specified blocks. If the first condition is true and the second condition is true, then this operator returns true. If either of the conditions are false, the expression returns false. For example: Since the 3 < 4 evaluates to true and 8 = 8 evaluates to true, then the predicate part of the if block evaluates to true and the sprite says “Hello!” Boolean Expressions In this example, 5 isn’t less than 4 so it evaluates to false. Even though one condition is true (8 = 8), using the and operator requires both conditions to return true This operator is very similar to the and operator except it only requires one condition to be met. Even though in this example 5 = 1 evaluates false, all the block needs in order to execute is one condition to evaluate true. The full expression evaluates true. Boolean Expressions This is another useful operator that changes true to false and false to true, for example In the above example, because 5 is not equal to 3, and the not block was used, the expression evaluates to true. The not operator in the next example will show the if block not executing. Because the expression 5 = 5 is true, using the not operator causes the predicate part of the if block to evaluate to false. The say block will not be executed. These Boolean operators can be used in the conditional part of a repeat until control structure but most commonly are found in the predicate part of an if control structure. Message Passing There are three blocks that are used in message passing. They are found in the control blocks category. Two of these blocks are used to broadcast messages and the other is used to receive messages. One of the control blocks used for broadcasting messages is . By clicking the down arrow, we can create a new message to be broadcasted. Another of the control blocks used for broadcasting messages is the block. This is very similar to the broadcast block except the sprite that is broadcasting the message waits until the scripts it triggered have finished running. It then continues with the rest of the current script. The final control block we will discuss is actually necessary in order to properly use the previously discussed control blocks. The allows a sprite to receive a specific message and respond accordingly. Broadcasting/Receiving Our example will require the Scratch cat and the bat. We will also introduce costume changing but not in great detail. We will build a script moving the bat towards the cat (changing costumes during the movement to make it more realistic). When the two sprites touch, the bat will broadcast a message and the cat will receive the message and execute the script written for it. In order to utilize both bat costumes, click the costumes tab in the middle scripts area. If the other bat isn’t imported do this now. Now we should have two bat costumes that belong to one bat sprite. Now we will construct the example (see example 6.1 on the Constructed Examples page at the end of this section). The same thing can be done with many sprites. Not all sprites have multiple images of themselves so some may not have any other costume choices. Message Passing For our next example, we will show the difference between the broadcast and broadcast and wait blocks. We will be using the same example except we will take the broadcast block out and replace it with the broadcast and wait block. What is the difference? Now, go into single stepping mode and notice what is being executed. This could be very useful if we wanted a Sprite to broadcast a message, then continue with it’s script after the receiving Sprite is finished with it’s script. Passing messages is a way two sprites can communicate. Its a way to start another Sprite’s script inside of a script. Broadcasting/Receiving Now we will discuss the only block in Scratch that allows another sprite or itself to receive messages that the previous sprite sent. For this to work, the first sprite has to broadcast a message using the broadcast block in its scripts. The second sprite (which has different scripts) needs to have a when I receive block. This is the only block in Scratch that can actually receive messages, so the two previous ways of broadcasting messages are useless unless we have a sprite receiving the message broadcasted. It is possible, however, to have the same sprite broadcast, receive its own broadcasted message, and execute scripts accordingly. Ok, let’s construct this short example (see example 6.2 on the Constructed Examples page at the end of this section) Project 6.2 Create a short animated story (similar to the project in session 2) that uses broadcasting and receiving to queue cinematic events (you needn’t be too detailed). Arrays Arrays are a very useful programming tool. As stated previously, Arrays can store multiple values that you may need later in your program. Creating an array is, in a way, like creating multiple variables. For example, if we were to have an array of length 5. That means we could have 5 different values held within the array. That doesn’t mean we can’t have 4 values within the array with one blank spot for a future value. Each value in the array is indexed by a number. In programming, indices begin at zero so the first number is indexed with the number 0 and the second number is indexed with the number 1. In Scratch however, the creators make it more nonprogrammer friendly and start indexing at 1. Indexing is the way we keep track of exactly where a specific value is in the array. The length of an array in programming is specified by the programmer. The Scratch creators make things more convenient for us by giving arrays the ability to dynamically change in size. Unlike arrays in other languages, arrays in Scratch have no definite size. Creating an Array in Scratch To create an array in Scratch, click on the section where we created variables in session 5. Then create a new list named groceryList. This will be our first example. We add items to the list by using the We delete items from the list by using the block. We do this by specifying the index of the item we want to delete. If the block above were executed, the first item of the list would be deleted because of the index 1. All other items are then shifted down by one; 2 becomes 1, 3 becomes 2, etc. We can use the block to actually use an item from the list. Here are some other blocks in which it can be used. block. Grocery List Example This example only requires one sprite. We will continue asking the user to enter an item to add to the list until they enter done. After the user enters done, have the sprite say each item and delete that item. We will need a variable to hold our index value. Let’s construct this example. Project 6.3 Modify Project 5.1 so that all the values entered by the user are stored in a list. When the user enters “done” the program goes through the array and calculates the average, then displays it along with the number of values entered by the user. Constructed Examples Example 6.1 Bat script Example 6.1 Cat script Constructed Examples Example 6.2 cat script Example 6.2 bat script Session 6 Questions 1. Which six Boolean operators do we cover? 2. What is message passing used for in Scratch? 3. Where are Boolean expressions most commonly used? 4. You have a program that has an if/else structure, and two variables, X and Y. The only time you want the alternate block(s) to execute is when both variables equal 10. What Boolean expression could you use in this situation? 5. In your own words, explain the purpose and structure of an array. 6. Explain the difference between the broadcast and broadcast and wait blocks.