Checking for Collisions: Using Functions in Alice By Henry Qin under the direction of Professor Susan Rodger Duke University July 2008 Step 1: Building the World This tutorial will demonstrate how to use a tool called a Function in Alice, to tell if one object is relatively close to another object. In order to do this we will build a simple world and a simple function to tell if two objects are colliding (on top of each other). To build it simply choose a grass scene in Alice and add a bunny and a cow from the animals folder of the local gallery. Step 2: Creating a Function The first thing that we need to do is create a function in the world. Click Done to go back to the main window. Click on world in the object tree and and then the functions tab. Click on the gray “Create new function” button. We are going to name this one “overlapTest.” Make sure you select the Boolean type. After you write the name a green tab should appear on in your method editor. Step 3: If/Else Condition Next we need to drag an if/else statement into the place that currently says “do nothing.” Select true. Now lets go to world level functions and drag the a < b tab over the true in the if/else. Just pick 1 for both a and b, they are simply place holders for the moment. Step 3: If/Else Condition For the first 1 we are going to go to the cow’s functions and choose “cow distance to” bunny, (the entire bunny). Now find the function labeled “cow’s width.” Drop on top of the 1 in the second space. Step 3: If/Else Condition Now, click on the down arrow immediately next to width and select math. Select “cow’s width /” and 2 to divide the width in half. Click on the down arrow next to the “2 )”. Select math again and choose “(cow’s width / 2) +” and choose 1 as a placeholder. Step 3: If/Else Condition Replace the 1 with the same expression only this time using the bunny. Drag in bunny’s width from the bunny’s functions over the 1. Select the down arrow next to bunny’s width and select math. Select “bunny’s width /” and 2 to divide the width in half. Step 4: Return Statements This function is going to check and see if the cow is closer than the length of the cow’s width to the bunny. In other words, is the cow colliding with the bunny? We want to return “true” if the cow is overlapping with the bunny. Drag a Return statement into the first Do Nothing and select true. Drag a second Return statement into the remaining Do Nothing and select false. Since if the cow and bunny aren’t close enough, they are not colliding. Step 5: Calling the Function Now we need to write a method to call this function. Lets go into World.myfirstmethod and drop in an “if statement.” Now drop in your “overlapTest” function on top of the “if statement.” We want the cow to say something if overlapTest is true. Let’s have him say, “We are colliding, how can this be?” Step 5: Calling the Function Now, in the else statement have the cow say, “Checking… we are not colliding.” Now play your world. Since the cow is next to the bunny he should say “Checking…..we are not overlapping.” Step 5: Calling the Function Now drag the cow on top of your bunny in the add objects screen and play it again. The cow should say “We are colliding, how can this be?” You can use functions like this in your Alice worlds to determine if objects in your world are within a certain distance of each other. Check out some of the example worlds that require colliding with another object (such as games where try to catch something) to see how we can use this code. That’s all folks!