Its all about the order in which the code runs. Try something like this:
`randomize by timer seed
randomize timer()
`set default positions
b1=10
b2=165
b3=30
b4=175
`begin screen
set cursor 310,237
print "Press Enter"
`main loop
do
set cursor 0, 15
`get input from user
input "",textstr$
`clear screen
cls
`if input matches random selection then move
if match$<>""
if textstr$=match$
set cursor 0, 30
print "yes"
b1=b1+10
b3=b3+10
endif
endif
`reset match$ after moving
match$=""
`choose which needs to be matched
a=rnd(2)
if a=0
match$="Go!"
endif
if a=1
match$="Hurry!"
endif
if a=2
match$="Move!"
endif
`print selected match string
set cursor 0,0
print match$
`draw road
ink rgb(0,350,0),0
box 0,120,640,220
box 0,250,640,350
`draw car
ink rgb(100,0,0),0
box b1,b2,b3,b4
ink rgb(250,250,250),0
loop
[edit] Somehow this got cut short
Here is the missing part.
In your code it was running in this order after you press enter:
do
check for input text
choose a random string to match
clear screen
see if text = match
print match
clear match
draw boxs
loop
So you were getting input before the match was actually printed to the screen and it was just luck because you only had 2 choices that it moved when it did.
My code runs like:
do
check for input text
clear screen
see if text = match
clear match
choose a random string to match
print match
draw boxs
loop