я както давно писал подобную фигню на Delphi
попробуй так:
const
maph=10;//высота карты
mapw=10;//ширина карты
var
map:array[1..maph]of array[1..mapw]of boolean;
px,py:integer//текущие координаты
//карта. если true то можно стать, если false, то нельзя
procedure draw;
begin
//рисуем героя в PX
Y
end;
procedure initmap
var xx,yy:integer;
begin
for yy:=1 to maph do
for xx:=1 to mapw do
begin
if map[xx,yy]=false then рисуем_стену;
end;
end;
//процедуры движения
procedure up;
begin
py:=py-1;
if map[py][px]=true then //стать можно
begin
draw;
end else
py:=py+1;//стать нельзя , возвращаем координату наместо
end;
//аналогично для каждой команды