1. C++ / Говнокод #8588

    +1015

    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
    GetScreenShot()
    {
      std::string NameScreen = ToString(GameLevel->EngineName) + "_" + ToString(GTime->GetTimeDays()) + "_" + ToString(GTime->GetTimeHours()) + "_" + ToString(GTime->GetTimeSec()) + ".bmp";
    
      IDirect3DTexture9 *tex;
      IDirect3DSurface9 *surf;
      D3DVIEWPORT9 vp;
    
      Device->GetViewport(&vp);
        if FAILED(Device->CreateTexture(vp.Width, vp.Height, 1, 0, D3DFMT_A8R8G8B8,D3DPOOL_SYSTEMMEM, &tex, NULL ))
          Beep(1000,100);
        
        if FAILED(tex->GetSurfaceLevel(0, &surf))
          Beep(500,100);
        if FAILED(Device->GetFrontBufferData(0, surf)) 
          Beep(200,100);
        D3DXSaveSurfaceToFile(ToPointChar(ToString(Pather::CutPath()) + "\\ScreenShots\\" + NameScreen), D3DXIFF_BMP, surf, NULL, NULL);
      surf->Release();
      tex->Release();
    }

    http://www.gamedev.ru/code/forum/?id=154941

    Запостил: dos_, 20 Ноября 2011

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

    • музыкальный скриншот
      Ответить
    • > SaveSurfaceToFile
      SaveTrollfaceToFile
      Ответить
    • и снова геймдев... и ляпы детские.
      даже не знаю, что хуже - лабы, геймдев или посты-оффтопики?
      Ответить
      • показать все, что скрытоДожили - игростроевцев к студентам-лабораторщикам приравняли.
        Ответить
        • а нефиг писать такую хрень.
          Ответить
          • у меня смутное подозрение, что даже в играх профессионального уровня код - дикий ужас.
            но вместо оптимизаций просто увеличивают минимальные требования.
            Ответить
            • Вы удивитесь, но так и есть.
              Ответить
            • А у меня есть наблюдение за глазами человека который с этим кодом работал, непередаваемый налет сумасшествия...
              Ответить
            • У меня есть смутное подозрение, что отрисовка леса хорошо детализированных деревьев - дико накладная вещь. И даже если применять уровни глубины, 8ичное дерево, буфер отсечки по заслонению, то всё равно работы видяхе остаётся дохрена.
              Поэтому сидите в своём продакшоне и не говорите, о чём не знаете.
              Ответить
              • не, ну это понятно, но для этого же есть настройки качества.
                Ответить
              • Я видела эпическую разработку в гейдев компании - сами движок писали то се... При том что никаких детализированных деревьев не было, а была простейшая изометрия и два года писавшийся движок в котором z и y в разных методах МЕНЯЛИСЬ МЕСТАМИ и y начинал обозначать глубину а z - координату.
                При том что все написанное ФЛЕШ! жрало полтора гб памяти, грузило 1800свф ресурсов - а там перс по лесу бегал и почти ничего не умел (застревать умел, грузится дохлым, стрелять по единственному бессмертному мобу).
                Он почти ничего не умел, потому что сервер был нечеловечески страшен. Мне приходили 8 метровые хмл рожденные не иначе как в аду для пыток программистов.
                В общем это был крик души.
                И было это в ооочень известной геймдев компании которая успешно выпускала и выпускает культовые игрушки (с флешом они правда видимо больше не свяжутся).
                Ответить
                • дайте конкретные названия что ли
                  Ответить
                • Про обмен y и z - есть такая проблема.
                  Потому что по логике x и y - координаты предмета, а z - высота. А на экране при такой логике y получается глубиной, а x и z - координатами предмета на экране.
                  Ответить
                  • А ничего что в похожих методах обозначения меняются:)
                    Не хочется давать названия, тщательно гуглящие могут узнать.
                    Ответить
                    • Ну надо как-то в названии метода это указывать тогда
                      Ответить
                      • Докуметируют проект и дают понятные названия методам только трусы
                        Ответить
                        • «Регрессионное тестирование»? Что это? Если система компилируется, то это хорошо, если загружается, то это просто здорово! (с) Linus Torvalds
                          Ответить
                        • - боятся использовать GOTO только трусы;
                          - не могут написать цикл DO на пяти страницах только трусы;
                          - не любят тернарные операторы ?: (т.к. их использование делает программу более интересной) только трусы;
                          - используют несамомодифицирующий код только трусы, особенно в тех случаях, когда это добавляет 20 наносекунд в середине очень короткого цикла;
                          - комментарии используют только трусы: текст программы все объясняет;
                          Ответить
                          • что, тернарные операторы терзают твое сознание?
                            дельфепроблемы
                            Ответить
                            • Что, такой крестобаттхёрт, что на копипасту кидаемся?
                              Разве что только в оригинале был "арифметический оператор IF", я так понял, это то же самое.
                              Ответить
                              • просто все остальные пункты равно относятся к любым языкам
                                а ненависть к замечательному тернарному оператору сразу детектит махрового дельфебоя, которому несложно заводить временные переменные для хранения временных значений в отдельном разделе var одним-двумя пейджапом выше, подумаешь
                                Ответить
                                • вот слабо им было if сделать по дефолту таким...
                                  Ответить
                                  • получилось бы даже хуже
                                    вместо
                                    done_correct ? do_success() : do_error_hnd()
                                    было бы
                                    if (done_correct) do_success() else do_error_hnd()
                                    - труднее заметить разделитель условия и true ветки,
                                    - сложнее компилятору обязательно требовать ветки else (тогда бы крестофобы жаловались на нетривиальную семантику еще больше, тут пишем, а тут не обязательно, а тут рыбу заворачиваем)
                                    - банально больше символов

                                    ну и краткость ?: должна служить намёком, что код обязан оставаться читаемым при их применении
                                    Ответить
                                    • В haskell и scala так, никто на code verbosity не жалуется.
                                      else можно было бы сделать обязательным только если выражение с if является rvalue. Вроде несложное правило...
                                      Ответить
                                      • ну, если бы 40 летний старичок был идеальным вообще для всех и сразу, то никаких других языков бы даже не появилось
                                        но ты же не хочешь сказать, что специальный синтаксис для тернарного оператора в С настолько ужасен, что тебя тошнит на клавиатуру, когда ты пытаешься заставить себя написать его, вместо таких родных и близких if (expr) expr1 else expr2
                                        я вот когда работал со скалой постоянно переживал не из-за синтаксиса, а по поводу всей этой функциональной неоптимальности, этот миллион промежуточных одноразовых объектов, создаваемых за кулисами, лишь для торжества идеи чистоты функций
                                        Ответить
                                        • Да нет, я вполне могу жить с тернарным оператором. Энтропия просто возрастает. По поводу миллиона промежуточных объектов хотелось бы поподробнее, с примерами.
                                          Ответить
                                          • примеров я не дам, давно это было
                                            но допустим у нас есть коллекция чего то, да например записей
                                            наша функция должна взять эту коллекцию, и вернуть новую, в которой будет добавлена еще одна запись
                                            я верно понимаю, что это приведёт к фактически копированию старой коллекции и появлении в куче новой?
                                            ведь это забота GC удалить старую, если она вдруг станет никому не нужна?
                                            Ответить
                                            • Коллекции бывают разные. Самая распространённая - List - при добавлении элемента создаёт лишь одну ячейку, как Lisp. При добавлении в immutable Set или Map часть информации будет скопирована, чтобы обеспечить иммутабельность (там внутри хитрое дерово, скопируются только изменённые ветки). Кроме того, есть мутабельные версии всех коллекций (scala.collections.mutable), если перформанс критичен.
                                              Ответить
                                              • > если перформанс критичен.
                                                вот о том и речь
                                                эти ваши языки принуждают писать эстетичный, но медленный код
                                                и это напрягает, когда компилятор пытается быть умнее программиста - получается некая золотая клетка
                                                скорость разработки повышает, бесспорно
                                                но я, если честно, не жалуюсь на скорость своей разработки на С++
                                                минули те времена, когда приходилось каждый раз реализовывать всё новые велосипеды
                                                Ответить
                                                • компилятор Scala достаточно умён и догадлив, и он не пытается быть умнее программиста. Все его действия довольно прозрачны и предсказуемы.
                                                  Однако он - настоящий тупица по сравнению с компилятором C++.

                                                  Я не имею ничего против C++. А C я просто не могу не любить. Но по моему мнению Scala очень достойный язык. Производительность java-машины уже давно плохо подходит для колких шуток.
                                                  Ответить
                                            • Забота компилятора посмотреть, а нужна ли ещё старая коллекция, а если нет - то создать новую на месте старой.
                                              Ответить
                                              • Компилятор далеко не всегда может это знать, полная информация доступна только GC в рантайме.
                                                Ответить
                                                • Если внутри метода имя старой коллекции (локальной переменной) не упоминается и на неё нет внешних ссылок - значит, она не нужна.
                                                  Ответить
                                                  • Зачем делать иммутабельные локальные временные коллекции? Если метод не создаёт новых потоков, эти коллекции не могут быть повреждены и смысла в иммутабельности нет.
                                                    В JVM _все_ объекты, которые создаёт пользовательский код, живут в куче, компилятор не может просто так их замещать.
                                                    Ответить
                                    • В си тернистый оператор ленивый?
                                      Ответить
                                      • конечно
                                        Ответить
                                      • если ты имеешь в виду, что ветвь будет выполнена, только если она должна выполниться по условию, то да
                                        но она должна будет выполнена для того, чтобы дать результат при выходе из оператора "?:", т.е. ничего такого отложенного нет
                                        Ответить
                                    • Учитесь у ависинтеров:3689
                                      Ответить
                                    • в дельфи есть ifthen(check, true_expr, false_expr). вот только маленькая деталь - оно вычисляет оба значения, делая функцию абсолютно бесполезной, т.к. нельзя написать аналог t = (n!=NULL)?n->t:NULL;
                                      Ответить
                                      • она даже не шаблонная?
                                        Ответить
                                        • в делфи есть шаблоны?
                                          Ответить
                                          • дык говорят что есть
                                            даже тыкали пальцем в стл для дельфи, только лучше
                                            только вот среда давно уже не борланд и не дельфи
                                            Ответить
                                          • >в делфи есть шаблоны?
                                            да вроде даже тут, на ГК проскакивали где-то.
                                            Ответить
                            • тернистые операторы
                              Ответить
                          • 1. goto крайне редко, но бывает оправданным. бездоказательно - пример не приведу, видел, но не помню.
                            2. +1
                            3. а что плохого в ?: в дельфи частенько не хватает ++ -- ?: += -= *= т.п.
                            4. во загнул:)
                            5. в хедерах вообще каждая функция или поле, не говоря уже о классах, должны быть откомментированы. А реализация - если правильно разделить задачу на правильного размера крипичики, то там комментариев понадобится немного.
                            Ответить
                            • Вы тоже спорите с копипастой?
                              Источник: http://lib.ru/ANEKDOTY/non_pas.txt
                              Ответить
                              • ну я же согласился с Вами по большинству вопросам (пусть иногда с уточнениями). разногласия только по ?:
                                Ответить
                                • > ну я же согласился с Вами

                                  Причём тут Мы, это копипаста.
                                  Я правильно перевёл "арифметический оператор IF" на более понятный язык?
                                  Ответить
                                  • я тоже так подумал и оказался не прав. Это
                                    IF (expression) on_negative,on_zero,on_positive
                                    Ответить
                                    • Ааа, вон оно чё. А он ленивый?
                                      Кстати, я такой оператор тоже ввёл в свою программку для построения функций. Он позволяет обойтись только вещественными числами, без логических типов.
                                      Ответить
                                      • откуда мне знать?
                                        предполагаю что да (вроде бы логично потому что)
                                        Ответить
                                    • квадарный оператор?
                                      квартарный?
                                      Ответить
                          • >- комментарии используют только трусы: текст программы все объясняет;

                            Люто
                            Бешенно ненавижу "посмотри-по-коду" петухов.

                            Питухи, желаю вам, чтоб у вас wifi карточка не заработала, а вендор посоветовал бы посмотреть по коду драйвера, как ее включить
                            Ответить
                    • Так а что, за двенадцать лет конкретных названий так и не появилось?
                      Ответить
              • ого, восьмеричное дерево
                ну нихуя себе гейдеваха порвалась
                Ответить
                • У куба восемь углов, шесть граней и двенадцать рёбер. Шестиричное дерево вполне может использоваться, чтобы искать выход из трёхмерного лабиринта.
                  Ответить
                • Восьмидерево это не гей, а ДСП
                  Ответить
    • Комментарии:
        >позавчера
        >вчера
        >позавчера
      Ответить
    • тут всё прекрасно: от ручного релиза до каши из D3D и, извиняюся, бипа
      Ответить
      • Причём бипа, заметь, разной частоты. По ней натренированный оператор может определять, какая конкретно произошла ошибка!

        Было бы вовсе идеально, если бы частоты бипов точно соответствовали частотам нот, но ничто не идеально.
        Ответить
        • Справедливости ради: я когда писал игрушку под DirectX, у меня она была фулскрин, и я дебажился пиша всякое говно в файл. Но бипа не догалаcя, правда


          Вообще, кодировать бипом ошибки -- старый метод работы прошивок и биосов. По писку можно определить что биосу мешает запуститься
          Ответить
        • Ля первой октавы — 440 герц. Частоты соседних полутонов в равномернотемперированной шкале (которую весь мир использует после того, как чувак в парике из Лейпцига написал свой сборник «ХТК») отличаются друг от друга в корень двенадцатой степени из двух раз.

          Пусть R = exp(ln(2)/12).

          Тогда f(ля-диез) = f(ля) * R;
          f(си) = f(ля-диез) * R = f(ля) * R * R.

          Так вычисляются частоты всех нот.

          Если есть техническая возможность синтезировать звуки произвольной частоты, то на каждую ошибку можно играть свою мелодию.
          Ответить

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