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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 09.07.2010, 15:09   #1
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию А мой косяк в чем? :)

Код:
  Shot=record
    square: array[1..4,1..2] of single;
    angle: integer;
    power: byte;
    speed: byte;
  end;
Код:
  TTank=class
    ...
  public
    Shots: array of Shot;
    ...
  end;
Код:
procedure TTank.Fire(power: byte);
var
  alfa: single;
  xn,yn: single;

procedure Construction;
var
  alfa,r: single;
begin
  alfa:=(-Shots[Length(Shots)].Angle-45)*pi/180;
  r:=sqrt(2)*2;
  Shots[Length(Shots)].square[1,1]:=x+r*cos(alfa+pi/2);
  Shots[Length(Shots)].square[1,2]:=y+r*sin(alfa+pi/2);

  Shots[Length(Shots)].square[2,1]:=x+r*cos(alfa);
  Shots[Length(Shots)].square[2,2]:=y+r*sin(alfa);

  Shots[Length(Shots)].square[3,1]:=x+r*cos(alfa+3*pi/2);
  Shots[Length(Shots)].square[3,2]:=y+r*sin(alfa+3*pi/2);

  Shots[Length(Shots)].square[4,1]:=x+r*cos(alfa+pi);
  Shots[Length(Shots)].square[4,2]:=y+r*sin(alfa+pi);
end;

begin
  SetLength(Shots,Length(Shots)+1);
  alfa:=(tower.CurrentAngle+90)*pi/180;
  Shots[Length(Shots)].power:=power;
  Shots[Length(Shots)].angle:=tower.CurrentAngle;
  case power of
    1: begin
      xn:=42*sin(alfa);
      alfa:=tower.CurrentAngle*pi/180;
      yn:=6*cos(alfa);
      Shots[Length(Shots)].square[1,1]:=tower.square[1,1]+xn;
      Shots[Length(Shots)].square[1,2]:=tower.square[1,2]+yn;
      Shots[Length(Shots)].speed:=20;
      Construction;
    end;
    2: begin
      xn:=54*sin(alfa);
      alfa:=tower.CurrentAngle*pi/180;
      yn:=6*cos(alfa);
      Shots[Length(Shots)].square[1,1]:=tower.square[1,1]+xn;
      Shots[Length(Shots)].square[1,2]:=tower.square[1,2]+yn;
      Shots[Length(Shots)].speed:=20;
      Construction;
    end;
    3: begin
      xn:=42*sin(alfa);
      alfa:=tower.CurrentAngle*pi/180;
      yn:=6*cos(alfa);
      Shots[Length(Shots)].square[1,1]:=tower.square[1,1]+xn;
      Shots[Length(Shots)].square[1,2]:=tower.square[1,2]+yn;
      Shots[Length(Shots)].speed:=30;
      Construction;
    end;
    4: begin
      xn:=54*sin(alfa);
      alfa:=tower.CurrentAngle*pi/180;
      yn:=6*cos(alfa);
      Shots[Length(Shots)].square[1,1]:=tower.square[1,1]+xn;
      Shots[Length(Shots)].square[1,2]:=tower.square[1,2]+yn;
      Shots[Length(Shots)].speed:=30;
      Construction;
    end;
  end;
end;
при вызове Fire, Shots не заполняется...Все значения равны 0.
Паааачиму?!
В планах порабощение вселенной...
zumm вне форума
Старый 09.07.2010, 15:13   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Shots[Length(Shots)].power:=power;
Последний элемент массива всегда меньше Length(Shots) ровно на единицу, потому что индексация массивов обычно идет от нуля (особенно если он динамический). Вообще компилятор тебя тоже должен послать, если у тебя проверка выхода за границы массивов не отключено.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Старый 09.07.2010, 15:15   #3
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Как не странно компилятор молчит Сначала и было -1, я подправил, компилятор молчал, ну я и подумал "О! Ты смотри, я код оптимизировал на 100 лишних знаков!"
В планах порабощение вселенной...

Последний раз редактировалось zumm; 09.07.2010 в 15:18.
zumm вне форума
Старый 09.07.2010, 15:25   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Господа, а вы не хотите называть темы содержательно, а?
Может приболели? Так я горчичнички сейчас достану.
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
косяк с подключением momuma Помощь студентам 0 23.01.2010 21:48
Граббер, в чем косяк? Arsmuzhik PHP 1 09.07.2009 00:10
Косяк в коде Dimon88 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 18.09.2008 18:09
косяк с DVD-ROMом( marshall Компьютерное железо 17 29.08.2008 20:45
Косяк Sanctuar Помощь студентам 1 18.06.2007 07:36