1. VisualBasic / Говнокод #12764

    −110

    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
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    Select Case Figure mod 6  
     ...
     Case chsQueen 'Ферзь
       Picture.Line (X + 0.45 * Side, Y + 0.55 * Side)-(X + 0.5 * Side, Y + 0.15 * Side), Border
       Picture.Line (X + 0.55 * Side, Y + 0.55 * Side)-(X + 0.5 * Side, Y + 0.15 * Side), Border
       Picture.Circle (X + 0.5 * Side, Y + 0.15 * Side), 0.08 * Side, Border
       Picture.Line (X + 0.45 * Side, Y + 0.55 * Side)-(X + 0.3 * Side, Y + 0.25 * Side), Border
       Picture.Line (X + 0.35 * Side, Y + 0.6 * Side)-(X + 0.3 * Side, Y + 0.25 * Side), Border
       Picture.Circle (X + 0.3 * Side, Y + 0.25 * Side), 0.08 * Side, Border
       Picture.Line (X + 0.55 * Side, Y + 0.55 * Side)-(X + 0.7 * Side, Y + 0.25 * Side), Border
       Picture.Line (X + 0.65 * Side, Y + 0.6 * Side)-(X + 0.7 * Side, Y + 0.25 * Side), Border
       Picture.Circle (X + 0.7 * Side, Y + 0.25 * Side), 0.08 * Side, Border
       Picture.Line (X + 0.65 * Side, Y + 0.6 * Side)-(X + 0.85 * Side, Y + 0.35 * Side), Border
       Picture.Line (X + 0.73 * Side, Y + 0.65 * Side)-(X + 0.85 * Side, Y + 0.35 * Side), Border
       Picture.Circle (X + 0.85 * Side, Y + 0.35 * Side), 0.08 * Side, Border
       Picture.Line (X + 0.35 * Side, Y + 0.6 * Side)-(X + 0.15 * Side, Y + 0.35 * Side), Border
       Picture.Line (X + 0.27 * Side, Y + 0.65 * Side)-(X + 0.15 * Side, Y + 0.35 * Side), Border
       Picture.Circle (X + 0.15 * Side, Y + 0.35 * Side), 0.08 * Side, Border
       Picture.Line (X + 0.27 * Side, Y + 0.65 * Side)-(X + 0.27 * Side, Y + 0.8 * Side), Border
       Picture.Line (X + 0.73 * Side, Y + 0.65 * Side)-(X + 0.73 * Side, Y + 0.8 * Side), Border
       Picture.Circle (X + 0.5 * Side, Y + 0.35 * Side), 0.5 * Side, Border, 1.35 * Pi, 1.65 * Pi
       Call FloodFill(Picture.hdc, X + 0.5 * Side, Y + 0.5 * Side, Border)
       Picture.Circle (X + 0.5 * Side, Y + 1.24 * Side), 0.5 * Side, Border, 0.35 * Pi, 0.65 * Pi
       Picture.Circle (X + 0.5 * Side, Y + 1.1 * Side), 0.5 * Side, Border, 0.35 * Pi, 0.65 * Pi
       Picture.Line (X + 0.73 * Side, Y + 0.68 * Side)-(X + 0.65 * Side, Y + 0.7 * Side), Border
       Picture.Line (X + 0.73 * Side, Y + 0.77 * Side)-(X + 0.65 * Side, Y + 0.7 * Side), Border
       Picture.Line (X + 0.27 * Side, Y + 0.68 * Side)-(X + 0.35 * Side, Y + 0.7 * Side), Border
       Picture.Line (X + 0.27 * Side, Y + 0.77 * Side)-(X + 0.35 * Side, Y + 0.7 * Side), Border
       Picture.Line (X + 0.4 * Side, Y + 0.68 * Side)-(X + 0.5 * Side, Y + 0.63 * Side), Border
       Picture.Line (X + 0.4 * Side, Y + 0.68 * Side)-(X + 0.5 * Side, Y + 0.72 * Side), Border
       Picture.Line (X + 0.6 * Side, Y + 0.68 * Side)-(X + 0.5 * Side, Y + 0.63 * Side), Border
       Picture.Line (X + 0.6 * Side, Y + 0.68 * Side)-(X + 0.5 * Side, Y + 0.72 * Side), Border
       Let Picture.FillColor = Border
       Call FloodFill(Picture.hdc, X + 0.5 * Side, Y + 0.7 * Side, Border)
       Call FloodFill(Picture.hdc, X + 0.73 * Side, Y + 0.7 * Side, Border)
       Call FloodFill(Picture.hdc, X + 0.31 * Side, Y + 0.68 * Side, Border)
       Let Picture.FillColor = Fill
     ...
    End Select

    Пишу свои шахматы, с блекджеком и не без них.
    Вот, набацал алгоритм векторного рисования ферзя.
    Только на это ушло около получаса времени чистого с примесями (подстройки, мать их).
    Чую нутром, лучше забить и вырвать клипарт из интернета.

    Запостил: ckopo, 18 Марта 2013

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

    • Я хочу поставить много плюсов.
      Плюс за множество вызовов функций вместо использования полигонов.
      Плюс за X+... и за Y+... вместо translate matrix.
      Плюс за switch вместо реализации интерфейса (ведь визуальный барсик умеет ООП, да?)
      Плюс за время, потраченное на не самую приоритетную задачу.
      Алсо, плюс за выбор ЯП.
      Ответить
      • Сударь, как я понял, вы со всеми плюсами обронили теги <sarcasm> и </sarcasm>.
        Скажу одно: еще учусь. Да, только полгода назад пересел с QBasic на умеющий ООП VB6, параллельно подучивая Паскаль и тоскливо поглядывая на Си. Ну привык делать все по старинке.
        А за "вредные" советы отдельный плюс. Вы склонили меня все же взять для изображения фигур клипарт с Википедии и перейти к собственно логике.
        Ответить
        • Моей целью не было оскорбить вас, но подтолкнуть на верную торпинку.
          Впрочем, вижу, этого и не требуется. Удачи в учебе/работе.
          Ответить
          • И так и понял, что подтолкнуть, ибо советы были именно "вредные", считай, полезные (Кроме "за выбор ЯП". Не надо дискриминировать VB.), так что за них спасибо, учту и буду разбираться.
            И за добрые пожелания отдельное спасибо.
            И вам удачи. Вот. :3
            Ответить
            • > Кроме "за выбор ЯП". Не надо дискриминировать VB.
              Соглашусь, на 1С код бы выглядел ужаснее
              Ответить
              • Выбрал Дело Фигура модуль 6
                 ...
                 Дело шахКоролева 'Queen
                  Картина.Линия (Х * 3.14, У * 2,71, Й * 0)
                  ...
                  Вызвать Наводнение (Картина.укз)
                  ...
                  Дать Картина.ПолныйЦвет = Рамка
                  ...
                Кончил Дело
                Ответить
                • Ха. Ха-ха. Ха-ха.
                  Привет, ПРОМТ, прощай, здравый смысл.
                  Ответить
                • Кончил Дело
                  Гулять.Режим = Смело
                  Ответить
            • Меня сейчас закидают тапками, но попробуйте в качестве языка C#.
              А если уж очень хочется векторного фидонета интерфейса - используйте C# + WPF/Silverlight - как раз для этого и создан.
              Ответить
              • Или Java.
                Ответить
                • Гм, я там коммент слегка подправить успел )
                  Про саму яву ничего не скажу, ибо не программировал. Но видел код под программиста, до этого на нём писавшего - он страдал явным паттернизмом головного мозга (QuickNick, это камень в твой огород), так что лучше не стоит )
                  Ответить
                • Да и C#, и VB .NET всё равно компилируются в IL-байткод, и если ТС пишет именно на VB .NET - кроме языка ничего не изменится.
                  Ответить
                • А я вот всё никак не дождусь как fai на Хацкиле налабает.
                  Ответить
                  • Fai изучил Хацкель и свалил с говнокодика на Карибы или в дурку. Принцип не определенности Хаскиля.
                    Ответить
                  • А он еще их пилит? Что-то он совсем пропал с ГК.
                    Ответить
                    • Кто-то из них явно оказался на коне. Или он его или наоборот.
                      Ответить
                    • Вот Гумно, хоть и не знает что "неопределенность" пишется слитно, прав.
                      Начал учить Хацкил, и попал в дурку.

                      Вот тут человеку начали советовать языки. Я же чётко понимаю что это глупости. Можно и на бейсике их написать (и я видел шахматы еще НА ТОМ basice), если достаточно знаний.
                      А можно и с Хацкилом ничего не сделать, как показывает нам пример fai.
                      Ответить
              • python + pygame тоже было бы очень даже ничего
                Ответить
              • Только krypt предложил C#, так уже все вежливо советуют языки для дальнейшего изучения. Спасибо вам, ребята. <lol>
                Но все же, что проще для перехода с Бейсика-Паскаля: Питон или Си? С:
                Ответить
                • Вам не предлагали языки для дальнейшего изучения, вам предлагали альтернативы :)
                  Проще, наверно таки питон (но, возможно, только потому, что я его ни разу в жизни не видел :) )
                  Я считаю, что С/C++ надо изучить хотя бы поверхностно, потому что от них отпочковалась целая ветка языков.
                  Но надо ещё учитывать область применения - писать на C скрипты автоматизации - по меньшей мере бессмысленно.
                  Ответить
        • >взять для изображения фигур клипарт с Википедии и перейти к собственно логике.
          А почему это не было планом А? :)
          Ответить
          • А потому что лень было продумывать вставку картинок на PictureBox да так, чтоб и быстро вставляло и фон не задело. С:
            Но одна лень теперь другой сильнее.
            Ответить
            • Предлагаю всё-таки перейти с VB6 хотя бы на VB.NET.

              В любой нормальной GUI-библиотеке (VB6 к таким не относится) есть функция отрисовки растра в нужном месте области рисования. Вот в .NET, куча функций DrawImage: http://msdn.microsoft.com/en-us/library/system.drawing.graphics.aspx

              А векторные изображения можно отрисовать в Inkscape и затем вывести любой библиотекой отрисовки SVG. Или просто взять готовые SVG'шки с Wikimedia Commons.
              Ответить
              • Суть шахмат не в красивых векторных картинках с википедии. Можно и консольные написать.
                Фронтэнд и красивый гуй - дело десятое.
                Ответить
    • и покорнейше прошу - когда запилите AI для этого чуда инженерной мысли - выложите сюда.
      вместе посчитаем кол-во магических цифр.

      а насчет топика - я бы эти чудо-цифры вынес в отдельный файл и получил бы svg
      Ответить

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