Rock Paper Scissors
{Introduction }
Turn your Calliope mini into a Rock Paper Scissors game that you can play with your friends!
{Step 1}
First we need to make a variable to keep track of whether we have a Rock, Paper or Scissors in our hand. A variable is a container for storing values. Click on the ||variables:Variables||
category in the Toolbox. Click on the Make a Variable button. Give your new variable the name “hand” and click Ok.
{Step 2}
Click on the ||variables:Variables||
category in the Toolbox again. You’ll notice that there are some new blocks that have appeared. Drag a ||variables:set hand||
block into the ||input:on shake||
block. We’ll start our Rock Paper Scissors game when we shake 👋 our Calliope mini.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = 0
})
{Step 3}
Click on the ||math:Math||
category in the Toolbox. Drag a ||math:pick random||
block and drop it into the ||variables:set hand||
block replacing the number 0. Now when we shake our Calliope mini, the variable hand will contain a random number between 1 and 3.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
})
{Step 4}
Click on the ||logic:Logic||
category in the Toolbox. Drag the ||logic:if true then else||
block out to the workspace and drop it into the ||input:on shake||
block under the ||variables:set hand||
block.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (true) {
} else {
}
})
{Step 5}
From the ||logic:Logic||
category, drag a ||logic:0 = 0||
comparison block and drop it into the ||logic:if true then else||
block replacing true.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (0 == 0) {
} else {
}
})
{Step 6}
Click on the ||variables:Variables||
category in the Toolbox. Drag a ||variables:hand||
block out and drop it into the ||logic:0 = 0||
comparison block replacing the first 0. Click on the second 0 in the comparison block and change to 1.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
} else {
}
})
{Step 7}
Click on the ||basic:Basic||
category in the Toolbox. Drag a ||basic:show icon||
block out and drop it under ||logic:if hand = 1 then||
. In the ||basic:show icon||
block, click on the Heart icon and instead select the small square icon to represent a 💎 Rock.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
} else {
}
})
{Step 8}
At the bottom of the ||logic:if then else||
block, click on the plus ‘+’ sign. This will expand the code to include an ||logic:else if||
clause.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
} else if (false) {
} else {
}
})
{Step 9}
From the ||logic:Logic||
category, drag a ||logic:0 = 0||
comparison block and drop it into the open space next to the ||logic:else if||
clause.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
} else if (0 == 0) {
} else {
}
})
{Step 10}
From the ||variables:Variables||
category, drag a ||variables:hand||
block and drop it into the ||logic:0 = 0||
comparison block replacing the first 0. Click on the second 0 in the comparison block and change to 2.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
} else if (hand == 2) {
} else {
}
})
{Step 11}
From the ||basic:Basic||
category, drag a ||basic:show icon||
block out and drop it under ||logic:else if hand = 2 then||
. In the ||basic:show icon||
block, click on the Heart icon and instead select the large square icon to represent 📃 Paper.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
} else if (hand == 2) {
basic.showIcon(IconNames.Square)
} else {
}
})
{Step 12}
Now let’s deal with the last condition - if our hand variable isn’t holding a 1 (Rock) or a 2 (Paper), then it must be 3 (✀ Scissors)! From the ||basic:Basic||
category, drag another ||basic:show icon||
block out and drop it into the last opening under the ||logic:else||
. In the ||basic:show icon||
block, click on the Heart icon and select the Scissors icon.
let hand = 0;
input.onGesture(Gesture.Shake, function() {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
} else if (hand == 2) {
basic.showIcon(IconNames.Square)
} else {
basic.showIcon(IconNames.Scissors)
}
})
{Step 13}
Let’s test your code! Press the white SHAKE button on the Calliope mini on-screen simulator, or move your cursor quickly back and forth over the simulator. Do you see the icons for rock, paper and scissors randomly appear? ⭐ Great job! ⭐
{Step 14}
If you have a Calliope mini device, connect it to your computer and click the |Download|
button. Follow the instructions to transfer your code onto the Calliope mini. Once your code has been downloaded, attach your Calliope mini to a battery pack and challenge another Calliope mini or a human to a game of Rock, Paper, Scissors!
{Step 15}
Go further - Try adding 🎵 Music 🎵 blocks to your Rock Paper Scissors game for different sound effects. Note that some Music blocks may require a Calliope mini 3 device to play.
let hand = 0
input.onGesture(Gesture.Shake, function () {
hand = randint(1, 3)
if (hand == 1) {
basic.showIcon(IconNames.SmallSquare)
music.playTone(131, music.beat(BeatFraction.Whole))
} else if (hand == 2) {
basic.showIcon(IconNames.Square)
music.playTone(392, music.beat(BeatFraction.Double))
} else {
basic.showIcon(IconNames.Scissors)
music.playTone(784, music.beat(BeatFraction.Whole))
}
})
randint(1, 3)
input.onGesture(Gesture.Shake, function() {})
v3