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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2013, 13:16   #1
Alexandr17-10
Пользователь
 
Регистрация: 12.08.2013
Сообщений: 99
По умолчанию Баг в скриптовке на движке Pasdcal Sript

Извеняюсь что задал тему сюда но это мой баг. Я нашел его теперь не могу исправить.
Код:
TypesUnit:Array[0..13] of Integer;
...
TypesUnit[0]:=14;
TypesUnit[1]:=15;
TypesUnit[2]:=16;
TypesUnit[3]:=17;
TypesUnit[4]:=18;
TypesUnit[5]:=19;
TypesUnit[6]:=20;
TypesUnit[7]:=21;
TypesUnit[8]:=22;
TypesUnit[9]:=23;
TypesUnit[10]:=24;
TypesUnit[11]:=25;
TypesUnit[12]:=26;
TypesUnit[13]:=27;
...
Procedure OnUnitDied(aUnitID: Integer; aKillerIndex: Integer);
Var i:Integer;
  VremText:Array[0..1] of String;
begin
  If States.UnitOwner(aUnitID)=0 then 
  begin
    For i:= 0 to High(TypesUnit) do
      if States.UnitType(aUnitID)<>TypesUnit[i] then 
	  Begin
	   	Case aKillerIndex of
          2:VremText[1]:='<$41>';
		  -1:VremText[1]:='<$42>';
		end;
		
		Case States.UnitType(aUnitID) of
		  9:VremText[0]:='<$1>';
		end;
		TextPercentGames:='[$'+States.PlayerColorText(0)+']<$0> '+VremText[0]+' <$39> '+VremText[1];
		PercentGames:=PercentGames-1;
		If PercentGames<=0 then
		  Actions.PlayerWin([1,2,3,4],True);
	  End else 
	  begin
	    If (aUnitID=IDKing)And(ActivLefels[2]<>AlkPobeda) then
		  Actions.PlayerWin([1,2,3,4],true);
	  End;
  end;
    
end;
Procedure OnUnitDied(aUnitID: Integer; aKillerIndex: Integer);
Событие которое происходит при смерти юнита
For i:= 0 to High(TypesUnit) do
Эта происходит цикл от 0 до числа типов солдат
if States.UnitType(aUnitID)<>TypesUnit[i] then
Begin
проверяем каждого и если погиб не солдат то
выполняем код
Баг заключается в том что этот код выполняется несколько раз
PercentGames:=PercentGames-1;
А надо его выполнять 1 раз но он должен выполняться только если погиб не юнит
Есть другой способ сделать проверку каждой ячейки но при этом код должен выполняться один раз

Последний раз редактировалось Alexandr17-10; 02.11.2013 в 13:18.
Alexandr17-10 вне форума Ответить с цитированием
Старый 02.11.2013, 15:16   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Поскольку не знаю этого языка, то могу предложить перед входом в цикл инициализировать некотурую внутреннюю переменную (целого или логического типа).
В теле цикла, когда
Цитата:
только если погиб не юнит
значение переменной изменяется: false -> true.
В конце тела цикла выполнить анализ переменной и завершить цикл, если изменение выполнилось:
Код:
If KillNotUnit then
   break;
Ну а если нет break, то насильно изменить переменную цикла для его завершения.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Авторизация на движке boroviker C# (си шарп) 1 04.08.2012 05:29
Ошибка с nsession на движке codeigniter MsWindows PHP 0 20.06.2011 11:45
Ошибки при движке codeigniter MsWindows PHP 2 12.06.2011 19:33
Geckofk (браузер на движке мозилы) SergeiGuk Общие вопросы .NET 4 30.04.2010 13:04
Движение на движке OMEGA ENGINE Gapro Gamedev - cоздание игр: Unity, OpenGL, DirectX 11 11.03.2010 21:21