boxy etc should be boxy#, the hash means floating point number, if you don`t put it in then you get integers (rounded to the nearest whole number), any fractional values should be ended #, if you use a fractional value where a integer should go (like a sprites position) then it gets rounded automaticaly when it is used, add # to the end of your variable names and it will work eg.
sync on
boxx#=50
boxy#=700
height=30
width=18
downforce=0
do
downforce=downforce+1
cls rgb(255,255,255)
if inkey$()="a"
boxx#=boxx#-0.5
endif
if inkey$()="w"
boxy#=boxy#-0.5
endif
if inkey$()="d"
boxx#=boxx#+0.5
endif
if inkey$()="s"
boxy#=boxy#+0.5
endif
box boxx#,boxy#+height,boxx#+width,boxy#,rgb(0,0,0),rgb(0,0,0),rgb(0,0,0),rgb(0,0,0)
box 0,750,1024,768,rgb(0,0,0),rgb(0,0,0),rgb(0,0,0),rgb(0,0,0)
if boxy#>750-height then boxy#=750-height and downforce=0
sync
loop
note I just altered those values that needed to be fractional, the others are ok as integers.
if there is one thing I can NOT tolerate, it`s intolerant people.