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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2010, 17:46   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию Оптимизация кода

Как можно оптимизировать данный код, а то он слишком огромный?
Код:
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_alesserfate' then LoadJPEGFromRes('dm_alesserfate', ImageMaps.Picture)
  else LoadJPEGFromRes('noscreen', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_alley' then LoadJPEGFromRes('dm_alley', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_auriga' then LoadJPEGFromRes('dm_auriga', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_bunker' then LoadJPEGFromRes('dm_bunker', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_colony' then LoadJPEGFromRes('dm_colony', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_compound' then LoadJPEGFromRes('dm_compound', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_depot' then LoadJPEGFromRes('dm_depot', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_fury151' then LoadJPEGFromRes('dm_fury151', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_hanger' then LoadJPEGFromRes('dm_hanger', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_leadworks' then LoadJPEGFromRes('dm_leadworks', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_lucifer''sfate' then LoadJPEGFromRes('dm_lucifer_sfate', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_outpost4' then LoadJPEGFromRes('dm_outpost4', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_quarantine' then LoadJPEGFromRes('dm_quarantine', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_reservoir' then LoadJPEGFromRes('dm_reservoir', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_stronghold' then LoadJPEGFromRes('dm_stronghold', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'dm_verloc' then LoadJPEGFromRes('dm_verloc', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'evac_alley' then LoadJPEGFromRes('dm_alley', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'evac_auriga' then LoadJPEGFromRes('evac_auriga', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'evac_colony' then LoadJPEGFromRes('dm_colony', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'evac_fury151' then LoadJPEGFromRes('dm_fury151', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'evac_hanger' then LoadJPEGFromRes('evac_hanger', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'evac_verloc' then LoadJPEGFromRes('evac_verloc', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'over_alley' then LoadJPEGFromRes('dm_alley', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'over_compound' then LoadJPEGFromRes('over_compound', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'over_leadworks' then LoadJPEGFromRes('dm_leadworks', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'over_quarantine' then LoadJPEGFromRes('dm_quarantine', ImageMaps.Picture);
  if Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) = 'over_stronghold' then LoadJPEGFromRes('dm_stronghold', ImageMaps.Picture);
Суть кода заключается в отлове названия карты Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) и сравнения с заданными значениями.
Shouldercannon вне форума Ответить с цитированием
Старый 19.07.2010, 18:00   #2
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

мб case поможет?
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 19.07.2010, 18:06   #3
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Эм... А что оно должно делать-то?)
А то "многа букофф" (с)



Дык вынести хотя бы Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9) для начала...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 19.07.2010, 18:17   #4
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

case не работает со "string'овыми" значениями...
W0LF вне форума Ответить с цитированием
Старый 19.07.2010, 18:18   #5
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Для начала можно эту длинную конструкцию записать в переменную.
Код:
s:=Copy(s, Pos('\mapname\', s) + 9, Pos('\gametype\', s) - Pos('\mapname\', s) - 9)
А ещё можно сделать массив соответствий строк-ключей и строк-значений и пройти циклом...
Изобретатель велосипедов

Последний раз редактировалось Selestis; 19.07.2010 в 18:20.
Selestis вне форума Ответить с цитированием
Старый 19.07.2010, 18:18   #6
Miha85193
Delphi, OpenGL API
Форумчанин
 
Аватар для Miha85193
 
Регистрация: 29.03.2010
Сообщений: 152
По умолчанию

Для строковых параметров используйте массивы, вида:

const
ValueSt: array[1..n] of string = ('параметр1', 'параметр2'.. 'параметрn')

или:
var
ValueSt: array[1..n] of string = ('параметр1', 'параметр2'.. 'параметрn')

За тем примените цикл for I := 1 to n do, в котором напишите условия и подставляйте в них значения ValueSt[I].

Последний раз редактировалось Miha85193; 20.07.2010 в 00:46.
Miha85193 вне форума Ответить с цитированием
Старый 19.07.2010, 18:23   #7
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Цитата:
case не работает со "string'овыми" значениями...
не надо учить, знаю я...но строковые значения можно вполнепреобразовать в числовые.
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 19.07.2010, 18:27   #8
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Хм... Если бы совпадали названия в ресурсах и строки то было б вообще просто...
Цитата:
evac_fury151 / dm_fury151
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 19.07.2010, 18:36   #9
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Не знаю что у вас в коде за данные, но во второй колонке всегда "dm_*", значит можно заменить в первой всё до "_" на "dm" и грузить изображение!
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 19.07.2010, 18:48   #10
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Лампочка

Да, да... Я именно об этом... Только по мне проще кажется либо и исходной строке менять, либо ресурсы подправить...
И тогда останется примерно такое:
Код:
LoadJPEGFromRes(Copy(s, Pos('\mapname\', s)+9, Pos('\gametype\', s)-Pos('\mapname\', s)-9), ImageMaps.Picture);
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода WoWan-SM Общие вопросы .NET 4 27.04.2010 11:33
Оптимизация кода. Alex Cones Общие вопросы Delphi 19 12.10.2009 20:51
Оптимизация кода viscas PHP 3 31.05.2009 16:04
Оптимизация кода Terran Общие вопросы Delphi 6 01.11.2008 16:57
Оптимизация кода [Smarik] Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 20.08.2008 15:00