В общем, вот так. Код точно рабочий, проверено.
Изучайте
program Tst;
const
dir_right=1;
dir_left=2;
dir_up=3;
dir_down=4;
var
key:integer;
x,y:integer;
dir:integer;
sw,sh:integer;
play:boolean;
obj:image;
procedure ParseKey;
begin
key:=KeyToAction(GetKeyClicked);
if key=GA_LEFT then
dir:=dir_left
else
if key=GA_RIGHT then
dir:=dir_right
else
if key=GA_UP then
dir:=dir_up
else
if key=GA_DOWN then
dir:=dir_down;
end;
procedure Move;
begin
if dir=dir_left then
x:=x-1
else
if dir=dir_right then
x:=x+1
else
if dir=dir_up then
y:=y-1
else
if dir=dir_down then
y:=y+1;
end;
procedure CheckBounds;
begin
if (x<=0)or(x>=sw-5)or(y<=0)or(y>=sh-5) then
play:=false;
end;
procedure Draw;
begin
FillRect(0,0,sw,sh);
DrawImage(obj,x,y);
repaint;
end;
begin
dir:=0;
play:=true;
sw:=GetWidth;
sh:=GetHeight;
SetColor(255,255,255);
obj:=LoadImage('/icon.png');
x:=sw div 2;
y:=sh div 2;
repeat
ParseKey;
Move;
CheckBounds;
Draw;
Delay(100);
until not play;
FillRect(0,0,sw,sh);
Setcolor(0,0,0);
DrawText('Game Over',10,10);
repaint;
Delay(20000);
end.