Pizzaman is right. The background needs to be replaced anytime you use the sprite.
I assume your using Darkbasic Pro since you have the dreaded blue screen problem.
In your code you had it syncing in the middle of drawing the map. This is only needed if you want the user to see it drawing. If you remove any syncing (as I have done) the background appears instantly. You only need one "sync on" command (usually at the top) and always use "sync rate 0" to update as fast as the computer can handle (fastsync is ok too but I prefer sync rate 0).
After the background is drawn use "get image" to keep the background image. Here I used "screen width()" and "screen height()" because I didn't know what resoultion you were making this for. If you don't have "set display mode" in your full code you should add it... that way you know for sure where graphics are going to be when a person runs the program (it looks like you used the default). Use "set display mode 640,480,32" to force the screen size.
On all the image loading and the one get image command I added a ",1" to the end. One of the things that's annoying in Darkbasic Pro is that all images are automatically anti-aliased unless you add the ",1" at the end.
You don't need a sprite command right outside of a do loop that has the same sprite. It's so close to the sprite command in the do loop that it'll be instant without the first sprite command.
You had the sprite hiding then changing the x or y then showing the sprite again. This is not needed. Sprites move around the screen easily without the need to hide them before any changes.
Paste sprite puts the sprite on the background which (it appears) isn't needed here either. You want the sprite to stay exactly where your character is so you can use collision checks to see if they get hit or touch other sprites.
At the last part "paste image 100,0,0" is where the blue screen of death is replaced with your background. In this code I have it paste before the sprite but it doesn't matter since sprites are always on top.
Hope this helps.
sync rate 0
sync on
load image "man.bmp",1,1 ` Added for me to test
LOAD IMAGE "grass.bmp",3,1
LOAD IMAGE "water.bmp",4,1
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4
xval = 0
yval = 0
REPEAT
READ tile
IF tile = 0 THEN PASTE IMAGE 3, xval, yval : xval = xval + 32
IF tile = 1 THEN PASTE IMAGE 4, xval, yval : xval = xval + 32
IF tile = 3 THEN xval = 0 : yval = yval + 32
UNTIL tile = 4
get image 100,0,0,screen width(),screen height(),1 ` Grab the backround
x = 280
y = 200
DO
IF upkey() = 1 THEN y = y - 3
IF downkey() = 1 THEN y = y + 3
IF leftkey() = 1 THEN x = x - 3
IF rightkey() = 1 THEN x = x + 3
paste image 100,0,0
sprite 1,x,y,1
sync
LOOP