1.3 Modify a Bee-Bot

Scratch solution

View solution

This is just one of many possible solutions:

The Button Sprites

forward:

when this sprite clicked
insert [forward] at (last v) of [source code v]

backward:

when this sprite clicked
insert [backward] at (last v) of [source code v]

left:

when this sprite clicked
insert [turn left] at (last v) of [source code v]

right:

when this sprite clicked
insert [turn right] at (last v) of [source code v]

go:

when this sprite clicked
broadcast [go v]

home:

when this sprite clicked
broadcast [home v]

undo:

when this sprite clicked
delete (last v) of [source code v]

spin:

when this sprite clicked
insert [spin] at (last v) of [source code v]

clear:

when this sprite clicked
delete (all v) of [source code v]

The Sprites

Mouse:

when green flag clicked
set size to (30) %
go to x: ((pick random (-1) to (4)) * (50)) y: ((pick random (-3) to (3)) * (50))

Cat:

when I receive [go v]
set [statement v] to [0]
set [source line v] to [1]
repeat (length of [source code v] :: list)
  set [statement v] to (item (source line) of [source code v] :: list)
  if <(statement) = [forward]> then
    if <touching [border v] ?> then
      say [Oh no! Missed it! Press "home" and then "clear" to try again.] for (2) secs
      stop [all v]
    else
      move (50) steps
      wait (0.5) secs
    end
  else
    if <(statement) = [backward]> then
      if <touching [border v] ?> then
        say [Oh no! Missed it! Press "home" and then "clear" to try again.] for (2) secs
        stop [all v]
      else
        move (-50) steps
        wait (0.5) secs
      end
    else
      if <(statement) = [turn left]> then
        turn ccw (90) degrees
        wait (0.5) secs
      else
        if <(statement) = [turn right]> then
          turn cw (90) degrees
          wait (0.5) secs
        else
          if <(statement) = [spin]> then
            repeat (20)
              turn cw (90) degrees
            end
          end
        end
      end
    end
  end
  change [source line v] by (1)
end
if <touching [Mouse v] ?> then
  play sound [meow v]
  say [Gotcha!] for (2) secs
else
  say [Oh no! Missed it! Press "home" and then "clear" to try again.]
end
when green flag clicked
set size to (50) %
go to x: (50) y: (0)
point in direction (90 v)
delete (all v) of [source code v]
when I receive [home v]
point in direction (90 v)
go to x: (50) y: (0)

Back to programming challenge