# rock paper scissors teacher guide

My script. #docs

Welcome! This guide will show you how to complete the challenges for the game of rock, paper, scissors!

## Challenge 1

### Step 16

Awesome! You have just created your game of rock paper scissors. However, why don't we add a little more to it? We can keep track of your score against the micro:bit using global variables. Create a global variable to keep track of the wins against the micro:bit. To do so, click on `add new`, then `Data`, and then `Number`.

```
var wins: number = 0
```

### Step 17

At the beginning of the game, you don't have any wins against the micro:bit. As a result, let's set the `data->wins` variable to 0 at the top of your main function.

```
wins = 0 // ***
input.onGesture(Gesture.Shake, () => {
    let img = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset = 5 * Math.random(3)
    img.showImage(offset)
})
```

### Step 18

Now let's keep track of wins by using button `A`. Every time button `A` is pressed, we want to increment `data->wins` by 1. We can begin by adding a condition `input->on button pressed("A")`.

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img1 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset1 = 5 * Math.random(3)
    img1.showImage(offset1)
})
input.onButtonPressed(Button.A, () => {
}) // ***
```

### Step 19

Nice! Now that we added the condition for when button `A` is pressed, we can increment `data->wins` by 1. Add the following statement in the condition.

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img2 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset2 = 5 * Math.random(3)
    img2.showImage(offset2)
})
input.onButtonPressed(Button.A, () => {
    wins = wins + 1 // ***
})
```

### Step 20

You have tracked the number of wins you have against the micro:bit. However, how will you ever know how many wins you have? After we increment `data->wins`, let's display the total number of wins you have.

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img3 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset3 = 5 * Math.random(3)
    img3.showImage(offset3)
})
input.onButtonPressed(Button.A, () => {
    wins = wins + 1
    basic.showString("WINS:", 150) // ***
    basic.showNumber(wins, 150) // ***
})
```

* Tap `run` to run the program on the simulator. Notice the number of wins you have against the micro:bit.

## Challenge 2

### Step 21

You have managed to keep score of the number of wins you have against the micro:bit. However, what about losses? Let's begin by creating another global variable to keep track of losses.

```
var losses: number = 0
```

### Step 22

Add a condition for when button `B` is pressed. When this occurs, we will increment your losses against the micro:bit by 1. Let's hope that this button will not be pressed too often!

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img4 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset4 = 5 * Math.random(3)
    img4.showImage(offset4)
})
input.onButtonPressed(Button.A, () => {
    wins = wins + 1
    basic.showString("WINS:", 150)
    basic.showNumber(wins, 150)
})
input.onButtonPressed(Button.B, () => {
}) // ***
```

### Step 23

Now let's continue where we left off. Just as we did for `data->wins` when button `A` is pressed, we need to increment `losses` by 1 when button `B` is pressed.

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img5 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset5 = 5 * Math.random(3)
    img5.showImage(offset5)
})
input.onButtonPressed(Button.A, () => {
    wins = wins + 1
    basic.showString("WINS:", 150)
    basic.showNumber(wins, 150)
})
input.onButtonPressed(Button.B, () => {
    losses = losses + 1 // ***
})
```

### Step 24

Let's also display the score when button `B` is pressed, just as we have done for button `A`. This will help us keep track of the number of wins and losses you have against the micro:bit.

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img6 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset6 = 5 * Math.random(3)
    img6.showImage(offset6)
})
input.onButtonPressed(Button.A, () => {
    wins = wins + 1
    basic.showString("WINS:", 150)
    basic.showNumber(wins, 150)
})
input.onButtonPressed(Button.B, () => {
    losses = losses + 1
    basic.showString("WINS", 150) // ***
    basic.showNumber(wins, 150) // ***
    basic.showString("LOSSES:", 150) // ***
    basic.showNumber(losses, 150) // ***
})
```

### Step 25

You have managed to keep track of both the wins and losses you have against the micro:bit! But did you notice that you haven't updated something? Take a look at condition of `input->on button pressed("A")`.

```
wins = 0
input.onGesture(Gesture.Shake, () => {
    let img7 = images.createImage(`
. . . . . # # # # # . . . . #
. # # # . # . . . # # # . # .
. # # # . # . . . # . # # . .
. # # # . # . . . # # # . # .
. . . . . # # # # # . . . . #
`)
    let offset7 = 5 * Math.random(3)
    img7.showImage(offset7)
})
input.onButtonPressed(Button.A, () => {
    wins = wins + 1
    basic.showString("WINS:", 150)
    basic.showNumber(wins, 150)
    basic.showString("LOSSES:", 150) // ***
    basic.showNumber(losses, 150) // ***
})
input.onButtonPressed(Button.B, () => {
    losses = losses + 1
    basic.showString("WINS", 150)
    basic.showNumber(wins, 150)
    basic.showString("LOSSES:", 150)
    basic.showNumber(losses, 150)
})
```

* Tap the `run` button to run your game on the simulator. See if you can get more wins than the micro:bit can!

Congratulations! You have successfully created a fully functional game of rock, paper, scissors against the micro:bit. Challenge your friends to see who can get a better score against the micro:bit.

