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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2015, 00:52   #1
Чудо-программист
Форумчанин
 
Регистрация: 22.07.2015
Сообщений: 138
По умолчанию Lode Runner — проблемка с лестницами

Пишу клон Lode Runner на военно-морскую тематику.
Застрял с лестницами (у меня — водопадами). Будто бы и просто, но — то не долазит до конца, то вылазит на пиксель выше и потом не хочет обратно.
Дописался аж до такого:
Код:
{ PHYSICS }

{ PHYSICS L3 }

function NoWayHoriz(N: Byte): Boolean;

var
  B: Boolean;
  X0, Y0, X1, Y1: Word;

begin
  B := False;
  X0 := Xs[N];
  Y0 := Ys[N];
  X1 := X0 shr 3;
  Y1 := Y0 shr 3;
  if (X0 and 7 = 0) and (Statis[N] = GoRight) then
    Inc(X1);
  case Level[Y1, X1] of
    MinWater..MaxWater: B := True
  end;
  NoWayHoriz := B
end;

function NoWayVert(N: Byte): Boolean;

var
  B: Boolean;
  X0, Y0, X1, Y1: Word;

begin
  B := False;
  X0 := Xs[N];
  Y0 := Ys[N];
  X1 := X0 shr 3;
  Y1 := Y0 shr 3;
  if (Y0 and 7 = 0) and (Statis[N] = GoDown) then
    Inc(Y1);
  case Level[Y1, X1] of
    MinWater..MaxWater: B := True
  end;
  NoWayVert := B
end;

function UpAllowed(N: Byte): Boolean;

var
  B: Boolean;
  X0, Y0, X1, Y1: Word;

begin
  B := False;
  X0 := Xs[N];
  Y0 := Ys[N];
  X1 := X0 shr 3;
  Y1 := Y0 shr 3;
  if X0 and 7 = 0 then
  begin
    if Level[Y1, X1] = WaterFall then
      B := True;
    if Level[Y1+1, X1] = WaterFall then
      B := True
  end;
  UpAllowed := B
end;

function DownAllowed(N: Byte): Boolean;

var
  B: Boolean;
  X0, Y0, X1, Y1: Word;

begin
  B := False;
  X0 := Xs[N];
  Y0 := Ys[N];
  X1 := X0 shr 3;
  Y1 := Y0 shr 3;
  if X0 and 7 = 0 then
  begin
    if Level[Y1, X1] = WaterFall then
      B := True;
    if Level[Y1-1, X1] = WaterFall then
      B := True
  end;
  DownAllowed := B
end;

{ /PHYSICS L3 }

{ PHYSICS L2 }

procedure ApplyControls;

begin
  if KeysPressed[Left] then
  begin
    Statis[0] := GoLeft;
    Dec(Xs[0])
  end;
  if KeysPressed[Right] then
  begin
    Statis[0] := GoRight;
    Inc(Xs[0])
  end;
  if KeysPressed[Up] then
    if UpAllowed(0) then
    begin
      Statis[0] := GoUp;
      Dec(Ys[0])
    end;
  if KeysPressed[Down] then
    if DownAllowed(0) then
    begin
      Statis[0] := GoDown;
      Inc(Ys[0])
    end;
  if Statis[0] <= 1 then
    if NoWayHoriz(0) then
      RestoreXY(0);
  if 2 <= Statis[0] then
    if NoWayVert(0) then
      RestoreXY(0);
end;

{ /PHYSICS L2 }

{ PHYSICS L1 }

procedure ApplyPhysics;

begin
  ApplyControls
end;

{ /PHYSICS L1 }

{ /PHYSICS }
Где ошибка, кроме ДНК?
)))

Последний раз редактировалось Чудо-программист; 27.07.2015 в 00:55.
Чудо-программист вне форума Ответить с цитированием
Старый 27.07.2015, 19:28   #2
Чудо-программист
Форумчанин
 
Регистрация: 22.07.2015
Сообщений: 138
По умолчанию

Мда, графический движок оказался самой простой частью игры.
)))
Чудо-программист вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cretaceous Runner Dromka Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 25.03.2016 09:45
Проблемка defak PHP 1 17.04.2012 18:42
PR - Parameter runner Alex Cones Софт 3 14.12.2010 10:10
Проблемка Assman Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.06.2010 17:24