Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

smirnvlad

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

не хорошо использовать графические координаты для управления логикой,  
лучше было бы, инициализировать объекты их координатами в поле, а при рисовании рассчитывать графические координаты, это позволит быстро менять размеры как поля, так и ящиков и проще определять на своем ли месте ящики
 
ещё можно завести двумерный массив размером с поле, и вписывать в него ссылки на объекты или числами тип объекта (-1 за пределом поля, 0 пустое место, 1 стена, 2 ящик) тогда, если поле в направлении движения = 2, а следующее за ним 0, то двигать ящик, иначе если поле рядом =0, то двигать себя
 

Код:
 
procedure checkleft(var m:mas;var l:maz;n,k:integer; var cub:pcube);
var
    i,j,v:integer;
    f,f1:boolean;
    a1,b1,a2,b2:integer;
begin
    F:=false;
    f1:=false;
    i:=1;
    j:=1;
    cub^.getxy(a1, b1);
 
    if (a1=120) then {main wall ! }
        f:=true
    else
    if (a1 > 120) then {not main wall}
        while (f=false) and (i <= n) do {wall?}
        begin
            m[i]^.getxy(a2,b2);
            if (a2=a1-41) and (b1=b2) then
                f:=true;
            i:=i+1;
        end;
 
    if f=false then {if no wall to the left}
        while (f1=false) and (j <= k) do {box?}
        begin
            l[j]^.getxy(a2,b2);
            if (a2=a1-41) and (b1=b2) then
            begin
                f1:=true;v:=j;
            end;
            j:=j+1;
        end;
 
    i:=1;
 
    if (f1=true) then {if box}
        if a1=120+41 then {main wall!}
            f:=true
        else
        while (f=false) and (i <= n) do {wall undo box}
        begin
            m[i]^.getxy(a2,b2);
            if (a2=a1-82) and (b1=b2) then
                f:=true;
            i:=i+1;
        end;
 
    if (f=false) and (f1=false) then
        cub^.move(-41,0);
    if (f=false) and (f1=true)then
    begin
        l[v]^.move(-41,0);
        cub^.move(-41,0);
    end;
end;
 

Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 17:26 17-10-2010
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru