1. Pascal / Говнокод #3328

    +107

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 26 Мая 2010

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

              знаю бейсек, хаскель, лисп, окамл, сишарп, жабу, чуть=чуть с++, обж-с, брейнфак, пейтон, но паскаль не знаю и знать не хочу.
              Ответить
              • Я уже догадываюсь, как ты их знаешь.
                "Бейсек - 11%
                Крэкинг - 34%
                ICQ - 10%"
                Вебкилл, залогинься.
                Ответить
                • ну спроси чонить, умник
                  Ответить
                  • Вебкилл, покажи свой уровень в хакинге. Взломай меня. Мой ИП 127.0.0.1
                    Ответить
              • анонимус доставляет ;D единственное что ты в своей засраной школе мог выучить (что и на данный момент учишь) это Turbopascal, иди хуярь игры на нём.
                Ответить
            • > "Главное, чтоб C и C++ не были единственными доступными программисту инструментами — иначе это адски паршивый программист."

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                          Хм....

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

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

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

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

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

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