Hi, I am trying to recreate the game Lightbot. I have created a list that would store the commands (walk forward, left turn, right turn), and wish to move the robot sprite when the user clicks on the Run button. How would I link the lists to the robot sprite?
And second question: I want the robot tile to move on cube tiles, how would this be different to having 2D tiles? Thanks
Hi, welcome to the forum!
Are the items in your list blocks, or text? In other words, did you say
or did you say
In the latter case, you can just say
(where COMMAND is an item number) but in the former you have to do
... etc. (where COMMAND is text the user typed).
As for 3D, I recommend getting 2D working first!
I used sprites (forward, left right), and when the user selects the sprites it is added to the list.
For the forward command I used the following script for the sprite:
And the following script for the Run Button:
.
For the run button, you would need to drag the item variable from the for loop into the run command, like this:
It would be easier to help you if you could share the project with us. Just go to the SNAP! homepage, click on your name in the top right, then select My Projects and find the project you want to share. Then click on it, hit Share and post the link here. Hope this helps!
I added the item variable, and when I run the program to move the robot, the "Forward" sprite moved as well.
There is also another problem: the if-else statement on my robot sprite is not working properly. When the program runs, it only executes the else statement.
the "Forward" sprite moved as well.
When you are running the FOR loop, the "move 30 steps" belongs to the "Forward Command" sprite, if you know what I mean. Even if it wasn't like that, it would be the "Run Button" sprite that would run it.
The only reason the robot is moving is because of the "Run Commands" message.
Try this:
it only executes the else statement
All I can say is that "[move 30 steps]=[move 30 steps]" gives false as a result.
Nope. It works either way. Dragging down the variable is parallel to the numeric FOR block, which requires dragging the index variable into the script. Leaving the slot empty is parallel to MAP, KEEP, and COMBINE, which use implicit binding of empty input slots. Since FOR EACH sort of has a foot in each world, it accepts both.
thanks, I think it worked. And another question: I would like my robot to move along the tiles with a change in y=17 and a change in x=28. How can I do this? I have tried this, but it does not work.
When I added "move by [] steps" the robot does not move evenly along the tiles.
I don't understand why you have any of that code in the robot. You let the user set up an arbitrary list of commands, but instead of just running them, you have a specific set of actions built in. That's the whole point of the FOR EACH -- to run whatever steps the user provided, in the order the user clicked on them.
Also, CONTAINS isn't what you mean, because it matters what order the commands are in.
Oops. I completely forgot about the implicit slot-filling.
I also found that if you do this it always works.