Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2012, 17:45   #1
W. Aron
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 25
По умолчанию Движение объекта в Pascal

Смог задать только движение вправо, то есть если нажать и удерживать стрелку вправо. фигура поползет вправо. Если продублировать код с небольшим изменением ничего хорошего не получается. Мучаюсь уже часа четыре. Помогите исправить пожалуйста.
P.s. вторую часть кода не трогал по той простой причине, что так она хотя бы работает))

Код:
program winob;
uses crt,graph;

type Win=object
x1,y1,x2,y2,color:integer;

procedure Init(xn1,yn1,xn2,yn2,cf:integer);
procedure Make;
end;

LinOb=object(Win)
procedure Init(xn1,yn1,xn2,yn2,cf:integer);
procedure Make;
end;

procedure Win.Init;begin
x1:=xn1;y1:=yn1;x2:=xn2;y2:=yn2;color:=cf;
end;

procedure Win.Make;begin
setfillstyle(1,color);
bar(x1,y1,x2,y2);
end;

procedure LinOb.Init;begin
x1:=xn1;y1:=yn1;x2:=xn2;y2:=yn2;color:=cf;
end;

procedure LinOb.Make;begin
setcolor(color);
line(x1,y1,x2,y2);
end;

var d,m,i:integer;
bool1,bool:boolean;
c:char;
cub1,cub2,cub3,cub4:Win;
lin:LinOb;

BEGIN
d:=detect;
initgraph(d,m,'egavga.bgi');
setbkcolor(15);
i:=0;
bool:=true;
bool1:=true;

lin.Init(0,470,640,470,1);
lin.Make;

cub1.Init(61,429,81,449,4);cub1.Make;
cub2.Init(41,450,101,469,4);cub2.Make;

while bool do
begin

c:=readkey;
if c=#75 then

cub1.Init(61+i,429,81+i,449,4);cub1.Make;
cub2.Init(41+i,450,101+i,469,4);cub2.Make;

cub4.Init(41+i,450,101+i,469,15);cub4.Make;
cub3.Init(61+i,429,81+i,449,15);cub3.Make;
i:=i+1;
if i>599 then bool:=false;

begin
bool1:=true;
while bool1=true do begin

cub1.Init(61+i,429,81+i,449,4);cub1.Make;
cub2.Init(41+i,450,101+i,469,4);cub2.Make;

if i=0 then begin bool1:=false;bool:=false;end;
c:=readkey;
if c=#77 then bool1:=false;
end;
end;

end;

closegraph;
END.
W. Aron вне форума Ответить с цитированием
Старый 02.07.2012, 23:21   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

код написан, конечно, страшноватенько (мне непонятно, почему чтение клавиатуры в разных местах разбросано).
Но суть не в этом. я не понял, а что у Вас не получается то? чего Вы пытаетесь добится в конечном итоге?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2012, 23:31   #3
W. Aron
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 25
По умолчанию

В данном случае я хочу заставить ее двигаться вдоль линии и если фигура выйдет краем за экран, то конец.
Чтение разбросано, потому что изначально фигура двигалась сама с интервалом 1, а я с горем пополам смог заставить ее двигаться вправо по нажатию кнопки...
Не получается движение влево, то есть жму влево - фигура движется все равно вправо. Доходит до правого края...и начинает двигаться влево, причем и при нажатой кнопке вправо.

В идеале же эта штука должна еще и стрелять, но увы моих мозгов на это не хватает (сижу уже часов 10).

Последний раз редактировалось W. Aron; 02.07.2012 в 23:36.
W. Aron вне форума Ответить с цитированием
Старый 03.07.2012, 12:52   #4
W. Aron
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 25
По умолчанию

Все, проблема решена. К сожалению код я оставил в универе, так что как будет на руках, выложу сюда.
W. Aron вне форума Ответить с цитированием
Старый 03.07.2012, 13:35   #5
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

обычно такой код с обработкой сканкодов делался примерно так:
Код:
ch := readkey();
if ch = #0 then
  begin
    ch := readkey();
    case ch of
       КодЛевойКнопки: if x1 - dx < 0 then
                                   begin
                                      x1 := x1 - dx;
                                      x2 := x2 - dx;
                                   end;
       КодПравойКнопки: if x2 + dx < Ширина экрана then
                                   begin
                                      x1 := x1 + dx;
                                      x2 := x2 + dx;
                                   end;
    end;{case}
    РисуемФигуру(x1,y1,x2,y2);
  end;
p.s. Лениво лазить в поисках констант)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение объекта на Паскале Яна696 Паскаль, Turbo Pascal, PascalABC.NET 2 09.11.2011 14:11
Движение объекта (С++) фыф123 Помощь студентам 1 06.07.2011 20:50
Движение объекта dlnk C# (си шарп) 1 11.03.2011 21:17
Движение объекта ill2005 Помощь студентам 2 27.09.2010 21:32
Движение объекта по кругу Roberto Помощь студентам 2 06.05.2008 15:44