Показать сообщение отдельно
Старый 25.11.2008, 02:12   #9
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: Как организовать цикл

В общем, вот так. Код точно рабочий, проверено.
Изучайте
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-5then
  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
(Offline)
 
Ответить с цитированием