Школоло / Говнокод #3328 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
var
  OGTC: cardinal; // для сверки с таймером

procedure CheckPhys;
begin
  if OGTC < GetTickCount then begin
    Phys;   // тут считается вся игровая физика и все изменения состояний. Звуки тоже здесь.
    Inc(OGTC, dT);
  end;
end;

procedure Graph;     // процедура отрисовки графики
var
  i: integer;
begin
  CheckPhys;
  for i := 0 to ItemCount - 1 do with Items[i]^ do CopyPosition := Position; // делаем копию состояния перед отрисовкой мира!
  for i := 0 to ItemCount - 1 do begin
    ShowItem(Items[i]^);           // рисуем элемент мира
    CheckPhys;                     // проверяем, не пора ли снова считать физику
  end;
end;

procedure OnIdle;
begin
  if PlayingGame then Graph;
end;

Надо, чтобы в игре скорость игрового процесса не зависела от тормозов графики. Даже когда кадр долго рисуется, звуки и движения делаются строго по таймеру. Создавать лишний поток мне в лом, и вообще я дико боюсь приколов с синхронизациями и так далее. Поэтому сделал такую хрень. Сэмулировал многопоточность банальным однопоточным кодом.

Запостил: TarasB TarasB, (Updated )

Комментарии (129) RSS

  • и вышло идеальное говно,ибо кому упёрлось дохнуть от противника который даже ещё не отрисовался?
    Ответить
    • Даже при фпс около 5 (совсем мало) тебе не хватит 0.2 сек для реакции.
      Ответить
  • >>Создавать лишний поток мне в лом, и вообще я дико боюсь приколов с синхронизациями и так далее

    ну школота, что поделаешь.

    Из за таких как ты сейчас программы и тормозят на четырехядерных процах.

    Ох, дэльфи, дэльфи...
    Ответить
    • Тебя дельфисты в детстве поймали и в жопу выебли? Хули ты срёшь везде, убогий?
      Ответить
      • а ты откуда узнал?!
        мне понравилось кстати, теперь я пишу на дельфи, ебусь в жопу и сру на говнокоде)
        Ответить
    • Кстати, о тормозах. Игра отлаживалась под комп с 600м селероном и 8 метрами видео.
      Но с точки зрения современной моды на многоядерность это действительно не лучшее решение, за что и попало сюда.
      Ответить
  • А что, если в Phys уменьшится размер Items? Цикл for, как всем известно, ItemCount будет использовать старый
    Ответить
    • Ну и ItemCount старый, и CopyPosition старый, всё нормально.
      Ответить
    • На самом деле это не стрелялка, а трамвайный симулятор, поэтому никто не дохнет и так важно воспроизведение звука (перестука колёс) по таймеру. Смысл в том, чтобы предварительно копировать всё, что необходимо для отрисовки. В данном случает это только положения, всё остальное тут не меняется.
      Ответить
    • А какая разница, на самом деле? Ну компилятор дубовый, да и то это больше на вещественных числах сказывается, где надо, можно на фиксированную точку перейти.
      Ответить
      • Ну было дело, увлекался геймдев-ом, на с++ с директикс-ом, все вроди логично, правильно и адекватно, но в дельфи (который ради интереса тоже выучил когда-то) это все представить как-то не могу:) Слишком уж дельфи "слабенький".
        Ответить
        • чем это он слабенький-то? ну да, он говно, но совсем не слабенький. хотя и оптимизирует говёнее, это да.
          Ответить
          • Слабенький в кавычках,
            дельфи, морально устарел, и на практике является не более чем языком для обучения или написания мелких программ.
            Ответить
            • Это лишь общие слова, они смысловой нагрузки не несут. Конкретный пример того, что можно сделать на ЦПП и нельзя на Дельфе.
              Ответить
              • Дельфи это больше процедурный чем объектный язык, сделать конечно можно практически все и на чем угодно, но вот есть ли смысл.
                Ответить
                • > Дельфи это больше процедурный чем объектный язык

                  с чего ты взял?
                  Ответить
                  • Используется в большинстве случаев как процедурный. В частности для обучения программированию студентов.
                    Честно говоря за дельфи следить я практически перестал после 7й версии, сейчас там с дотнетом вроди как связались так что всё возможно. И давайте прекратим спор:)
                    Ответить
                    • > Используется в большинстве случаев как процедурный. В частности для обучения программированию студентов.

                      и чо? а отдельнгые индусы не знают о циклах и копипастят код n раз. сделаем вывод, что в с++ нет цикла for?

                      дельфи - добротный ООП-язык, иерархия ООП в .net частично взята из дельфовского VCL (помимо java).

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

                      я не защищаю дельфи, потому что она полное говно, просто какбэ не люблю когда клевещут 🙂
                      Ответить
                      • >дельфи - добротный ООП-язык
                        Ты долбоёб. Дельфи - аспектно-ориентированный язык. Настоящий ООП - это SmallTalk.
                        Когда, вас, макак начнут отстреливать и изолировать в зоопарке от общества?
                        Ответить
                        • > Ты долбоёб. Дельфи - аспектно-ориентированный язык

                          ну ты и мудак, дельфи это компонентно-ориентированный скорее. но компониетно-ориентированность я бы сказал это разновидность ООПа, ибо включает в себя его.
                          Ответить
                          • >компонентно-ориентированный скорее
                            нефига. медленее

                            >я бы сказал это разновидность ООПа
                            меньше болтай лось если не знаешь
                            Ответить
              • в современном мире главное не "можно ли", а "с какими усилиями"
                Ответить
                • тебе автор говорит одно, "дельфи морально устарел", а ты гнёшь другое "на дельфи можно написать что угодно", лол. на ассемблере тоже можно написать что угодно =\\
                  хотя цпп тоже отстал от 2010 года, но засчёт огромнейшего коммьюнити живёт и здравствует, а дельфин труп перепродают из компании в компанию тем временем. и вообще ждельфи популярна только в странах разваливающегося снг, что символизируте.
                  Ответить
                    • Конкретнее, конкретнее. Опять только общие слова.
                      Ответить
                      • с чего хоть общие слова-то? вполне конкретные: то, что дельфи морално устарел, признают все психически здоровые люди, это очевидная истина.
                        Ответить
                  • > дельфи популярна только в странах разваливающегося снг
                    платиновые вбросы /gk/
                    Ответить
              • > Конкретный пример того, что можно сделать на ЦПП и нельзя на Дельфе.

                как там поддержка Дельфей 64-бит?
                Ответить
                • Ага, уже ближе к делу. Не знаю, пока что у большинства компы 32 бита.
                  Ответить
                  • ну и вот, дельфи кроме win32 нигде на уровне цпп не поддерживается (есть всякие кривые Lazarus'ы).
                    Ответить
  • многие игры именно так и работают. рил-тайм на виндах делать (да и под любой другой ОСью) это настоящий гемор.

    я как-то тетрис написал. как только пытаешься выше 30 отрисовок в секунду делать (ака 30фпс), у всех типов таймеров (включая мультимедиа таймеры) начинает крыша ехать и из-за задержек игра становится слишком не равномерной. про потоки даже не упоминайте - там все еще хуже.

    ну оно как бы и логично: все смотрят в играх на frames-per-second. больше - лучше. а если хочешь как можно более высокий фпс, то само собой разумеется что CPU на 100% всегда будет загружатся. а если ЦПУ на 100% по определению может загружатся, то на кой хер с таймерами возится - простой tight loop намного более прост и эффективен.
    Ответить
  • млять в ебаном дельфи хуй разберёшь где вызов функции а где считка с переменной, короче код не понял, но ты автор чото мудень, "Даже когда кадр долго рисуется, звуки и движения делаются строго по таймеру. " эот просто пиздец, во-первых, если я правильно понял чо ты творишь, то тебе тут тоже требуется синхронизация так-то, пусть и один поток, ибо во время отрисовки если меняется состояние, без разницы в другом потоке или в этом же, будет енправильная отрисовка (начали рисовать одно, а закончили - другое), во=вторых ты не слышал об отрисовке по дельте времени? высчитается время, которое прошло на отрисовку кадра, и изменение состояния высчитывается по линейной формуле типа f(x) = x + timeDelta * speed; в-третьих синхронизировать аудиопоток стука колёс со скоростью трамвая это пиздец нулевой оверхед, в-четвёртых вряд ли ты пишешь фаркрай, каким образом кадр должен отрисовываться так долго (больше 16 мс), чтобы были заметны задержки, ты наверное в лоб рисуешь, без каких-либо приличных алгоритмов?
    Ответить
      • пусть приведут код в нормальный с-вид, пойму. мне больно смотреть на дельфи.
        Ответить
        • Детка, учи языки.
          "Главное, чтоб C и C++ не были единственными доступными программисту инструментами — иначе это адски паршивый программист."
          Ответить
          • > Детка, учи языки.

            знаю бейсек, хаскель, лисп, окамл, сишарп, жабу, чуть=чуть с++, обж-с, брейнфак, пейтон, но паскаль не знаю и знать не хочу.
            Ответить
          • > "Главное, чтоб C и C++ не были единственными доступными программисту инструментами — иначе это адски паршивый программист."

            это чья цитата? какого-нибудь пришибленного вирта?
            Ответить
            • пидорас вирт такое бы не осилил сказать, он жеж дрочит на поскаль.
              цитата луговского произнесенная в одном из эпичных тредов.
              Ответить
              • А... Ну так Луговский имел в виду чтобы человек знал функциональщину ещё какую-нибудь или декларативщину, а ТарасБ имел виду - хаха - Дельфи, который те же яйца, что и C/C++, только в профиль. Т.е. употребление цитаты невпопад.
                Ответить
    • > то тебе тут тоже требуется синхронизация

      Строчка номер 17.

      > в-третьих синхронизировать аудиопоток стука колёс со скоростью трамвая

      Нету аудиопотока колёс, понимаешь? Каждое пересечение колеса с каждым стыком честно считается, при этом издаётся стук. Дельты не катят, ритм стука сразу нарушается, я проверял. И кстати, как с дельтами сделать ускорение и гармонические колебания вагона после прохождения стыка?

      > каким образом кадр должен отрисовываться так долго

      Ты вообще обсуждение читал? Про 600 МГц селерон и 8 МБ видео, например?
      Кстати, на современных компах игра успешно обрабатывает в реальном времени всю трамвайную сеть Петербурга. Рисует, правда, только 2-км окрестность. По ночам можно увидеть линии фонарей дальнего квартала.

      > ты наверное в лоб рисуешь, без каких-либо приличных алгоритмов

      Да, я не делаю БСП, если ты об этом. Там не в нём дело.
      Ответить
      • > Ты вообще обсуждение читал? Про 600 МГц селерон и 8 МБ видео, например?

        я ебу, опенгл должен справиться
        Ответить
        • Да не справляется он нихера. То есть, не сильно лучше самопального софтварного рендера.
          Ответить
            • Ну не через СетПиксел, само собой. У битмапов же есть указатель на память, содержащую их картинку, можно прямо в эту память рисовать.
              Ответить
      • >Кстати, на современных компах игра успешно обрабатывает в реальном времени всю трамвайную сеть Петербурга.
        Кстати, программа коммерческая? Для чего используется и используется ли? Может есть предложения, для чего она будет использоваться?
        Ответить
        • Нет, халявная. Используется, чтобы вспомнить те времена, когда ещё не поснимали половину рельсов. Есть те, кому это интересно: http://lurkmore.ru/Трамвайщики
          Были идеи использовать для обучения. Или для расчёта расписания.
          Ответить
    • А чё... Прикольная игруха у TarasB. Я так понимаю продовать ты её не собираешься пока? Когда можно будет поиграть?
      Вспоминается старый добрый ДОС. Про что игрушка хоть? Поподробней плиз. 🙂
      Ответить
      • Ну продавать вряд ли, школота графу не оценит. Тут фишка в физике и ИИ.
        > Про что игрушка хоть?
        Гугль первой ссылкой выдаёт на запрос "трамвайный симулятор".
        Ответить
          • тьбфу ты, вопрос снимается. у тя не как у нормальных людей, старые версии сверху, новые - снизу, не то качнул
            Ответить
            • У меня хронологический порядок, сверху вниз.
              Все вопросы RTFM.
              Ответить
              • Хронологический порядок можно ВНЕЗАПНО устроить снизу вверх.
                Ответить
                • Удваиваю, с байтораздирающим versioning`ом можно было бы даже на статическом хостинге narod.ru оформить так, чтобы действие "получить свежую версию" не требовало антикиферской машины и календарей или логических заключений типа "ага, для истории он выложил первой сверху, значит свежую следует искать внизу"
                  Ответить
                  • Для пущей объективности: в бинарях был обнаружен VERSIONINFO с вполне православным номером 2 . 9 . 1 . 8 2
                    Ответить
      • Кто-бы что не говорил, а прикольно. Похоже на поезд. Рельсы. Стук колёс. Полная луна. Сверкающие огни города и Бетмен перелетает с крыши на крышу. Романтика... 🙂

        зы: Трамваи действительно разгоняются на 90 км(или миль)? А они могут больше?
        Ответить
        • В реале? Могут. Даже те, которые мы каждый день видим. Но только, если гайки подкрутить и нормальные рельсы сделать. А этого в этой стране долго не будет. Но вот в Европе так и есть.

          Не понял насчёт бетмена.
          Ответить
          • >Не понял насчёт бетмена.
            Ой. Ну не пребедняйтесь. Был там такой с треугольными ушами. 🙂 Он меня ещё спасал, когда два трамвая столкнулись, после выключения автопилота. 🙂
            Ответить
      • не, техническая составляющая реализвоаана прикольно, ещё бы графику типа как у фаркрая, чтобы любоваться пейзажами там.

        постарайтесь!
        Ответить
        • Ага, графику как у фаркрая и чтобы на любой самой задрипанной машине не тормозило. Я поставил на низкие требования.
          Ответить
          • Сделайте графический back-end для незадрыпанных машин. В чём сложность? Т.е. если машина старая - используется то, что есть. Если новая - загружается либа с крутой графикой. Определить не так сложно, можно даже дать пользователю самому выбрать, если лень определять.
            Ответить
            • Делать две модели - детальную и простую? Сложность много где.
              Ответить
              • > Сложность много где.

                Потому что говнокод и логика макаронинами вшита в графический код?
                Ответить
                • Нет, не поэтому.
                  Ты в фаркрае видел галочку, позволяющую играть на первом пне?
                  Ответить
                  • И чё. У них не стояло задачи поддерживать игру на допотопных компах. А у тебя стоит.
                    Ответить
                    • А у TarasB стоит? Что-хочет, то и делает. Может у TarasB 486 комп дома единственый с 2D видяшкой. Фаркрай на таком особо не разработаешь...
                      Ответить
                      • Я ник чему не принуждаю. Я прост сказал, что был бы ваще кавай с хорошей графикой. Потом Тараска начал как-то странно мазаться -- и всего-0то.
                        Ответить
                        • Ну может не хочет человек заниматься 3D-моделированием (в 3D редакторах). Хочет реалистично смоделировать поведение трамваев. Не ставит пока себе других задач.
                          Ответить
                • Подозреваю что так и есть.
                  На днях выкачал симулятор для космофагов (кроме субъекта idee fixe, существенных отличий от железнодорожных фетишистов нет) и наблюдал совершенно сказочные тормоза, причем в таких местах, где работы шейдера в общем-то и не видно. (ЧСХ, имя файла оказалось 'orbiter100606.zip')
                  Ответить
              • > Делать две модели - детальную и простую? Сложность много где.

                В 3d-редакторах вроде есть функция уменьшения числа полигонов в получившейся модели. Вообще в любых совр. играх делают сразу где-то по три версии модели (на каждый LOD).
                Ответить
                • >по три версии модели (на каждый LOD)
                  Ты кого учишь? Гейммейкера учишь. Сколько ты игр сделал? TarasB как минимум сделал эту.
                  Ответить
                • И как я сделаю 3 версии модели? Про известные 3Д-редакторы не надо - так народ даже с фарами геморроится по страшному. А случайный цвет вагона? А лампочки, меняющие цвет в зависимости от номера маршрута (есть такие на вагонах сверху)?
                  Ответить
                  • Ты эти вопросы задаёшь, как будто никогда не программировал.

                    > Про известные 3Д-редакторы не надо - так народ даже с фарами геморроится по страшному.

                    Чё не надо? Посмотри любую игру -- на рразные LOD'ы разная детализация модельки. Какой геморой? Я точной комманды не скажу, но в тридэсмаксе уменьшать полигоны можно буквально двумя щелками

                    > А случайный цвет вагона?

                    А это как-то зависит от сложности модельки? Так же перекрашивай, как и перекрашивал. Вообще вагоны не самое главное, их можно делать "квадратными", особо никто разниц не заметит (ибо в рашке транспорт таковым и является - квадратным). Я больше говорил про окружение: дома, природа, деревца там. Чтоб было на что смотреть.

                    > А лампочки, меняющие цвет в зависимости от номера маршрута (есть такие на вагонах сверху)?

                    Над этой проблемой лучшие умы геймдева бьются уже десятилетия лол
                    Только опять же, я не понял каким боком здесь сложность моделек вообще
                    Ответить
                    • > Вообще вагоны не самое главное

                      Ты промахнулся на 180 градусов.

                      > Так же перекрашивай, как и перекрашивал.

                      У меня свой формат. Что я буду делать с форматом Макса? Только модель фиксированного цвета, и всё. У меня модель - это одновременно модель и простой скрипт.

                      > Над этой проблемой лучшие умы геймдева бьются уже десятилетия лол

                      Тогда почему в Trains и MSTS так делать не выходит? И ещё много чего.
                      Ответить
                      • > У меня свой формат. Что я буду делать с форматом Макса? Только модель фиксированного цвета, и всё. У меня модель - это одновременно модель и простой скрипт.

                        А ты в чём их делаешь? Вручную, что ли, как в детстве в бейсике: DrawLine(..) -- с постоянной проверкой Run на каждом шагу, что вышло?
                        В 3dsmax и подобных ему пакетах всегда есть система плагинов (в 3dsmax это MAXScript, в Blender -- Python) -- можно написать самому простенький экспортер в свой формат (перебором полигонов в сцене). Так геймдев-компании и делают обычно.

                        > Только модель фиксированного цвета, и всё

                        Хм....

                        > Тогда почему в Trains и MSTS так делать не выходит?

                        Думаю, потому что говно.
                        Ответить
                    • Webkill, признаю ошибку. Можешь учить. Видел TarasB на GameDev. Думал что это что-то значит...

                      > А случайный цвет вагона?
                      Плохому танцору...

                      Тем не менее - то что есть - всё равно мне нравится.

                      А там только ночь? У нас по ночам трамваи не ездят. Да и ночь не всё время...
                      Ответить
                        • Игра меня не перестаёт удивлять. Вижу красное закатное Солнце. Сейчас у меня 7 вечера и реально Солнце ещё высоко, но всё равно круто. 🙂
                          Ответить
                        • Как Webkill верно заметил - нехватает только графики, ну и для полноценной игры - сюжета. 🙂
                          Ответить
                          • Насчёт графики вспомнил - я ещё когда её писал, очень в тот период слушал Боба Марли.
                            Ответить
            • Переписать эту лапшу нахрен, до сих пор код толком не переписывался (исходники первой версии 2007 года в открытом доступе на сайте, можешь поржать, если найдёшь чего такого в них).
              Я начинал это три года назад, мне было 19, я был бородат, писал, лишь бы работало.
              Ответить
  • я мечтаю отрисовку увидеть... это будет покруче любой психоделической картинки(!!!) дайте мне её пожалуйста(;
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8