Snake 2D GDI

Discussion in 'WASM.GRAPHICS' started by mantissa, Jun 29, 2023.

  1. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170
    Так как никто ничего не выкладывает, то выложу я, написал по приколу Snake2D с помощью GDI, текстуры можно поменять на свои, заменив bmp файлы.
    • grid - текстура земли, задается константой GRID_SIZE
    • seg - сегмент змеи
    • head - головешка змеи
    • apple - еда
    Еда спавнится в случайном месте, изначально змея по середине, отрисовка змеи происходит в DrawSnake, еды в DrawFood, сетки в DrawGrid. CheckCollision проверяет, чтобы змея не столкнулась с границей или собой, AddSegment добавляет сегмент к змее при подборе яблока, DeleteSegment удаляет (при передвижении). Может подскажет кто, как улучшить можно! (Пока сама не ползает, для удобства отладки!:crazy:)
    Управление на стрелки (VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT).
    [​IMG]
    [​IMG]
     

    Attached Files:

    Last edited: Jun 29, 2023
    M0rg0t and Mikl___ like this.
  2. MaKsIm

    MaKsIm Active Member

    Blog Posts:
    0
    Joined:
    Feb 11, 2008
    Messages:
    151
    CreatePatternBrush можно сделать один раз в WMCreate и высвободить соответствующие изображения. Тоже можно сделать и с Pen + SolidBrush для Grid. Но это уже не такие большие объекты как PatternBrush
     
    Mikl___ and mantissa like this.
  3. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170
    Точно! Спасибо за совет
     
  4. Intro

    Intro Active Member

    Blog Posts:
    0
    Joined:
    Aug 29, 2009
    Messages:
    614
    Игра не динамичная как в оригинале, надо апдейт сделать через таймер. И ещё, я для таких задач win32 использую чтобы работало на старых ПК.
     
    mantissa likes this.
  5. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170
    Сделал динамическое передвижение, скорость задается константой GAME_SPEED (чем меньше, тем змея быстрее). Теперь кисти создаются в WMCreate и соответствующие им битмапы сразу удаляются из памяти.
     

    Attached Files:

    Mikl___ likes this.
  6. Application

    Application Active Member

    Blog Posts:
    1
    Joined:
    Oct 15, 2022
    Messages:
    110
    Добрый день, не могли бы вы выложить сборку Masm для x64 если не сложно, заранее спасибо
     
  7. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170
    Здравствуйте, пользуюсь ml64.exe + link.exe (идут в комплекте с Windows SDK) для компиляции и линковки, инклюды и библиотечные файлы получаю с помощью своего скрипта, который выкладывал в эту тему. Также пользуюсь temphls.inc для "высокоуровневых" конструкций типа invoke, .if, .while (лично пользуюсь только invoke).
     
  8. M0rg0t

    M0rg0t Well-Known Member

    Blog Posts:
    0
    Joined:
    Oct 18, 2010
    Messages:
    1,585
    mantissa, спасибо, интересный проект. Напомните, что значат цифры в скобках?
    Code (Text):
    1. DrawFood proc <12, 8> hdc:HDC
    Никогда не использовал в масме такое.

    Надо выкинуть уже все 32 бит, увы, но негрософт больше не поддерживает такие ОС.
     
    mantissa likes this.
  9. MaKsIm

    MaKsIm Active Member

    Blog Posts:
    0
    Joined:
    Feb 11, 2008
    Messages:
    151
    Заразил mantissa меня идеей создания змейки и на выходных я взял fasm1 и набросал с нуля змейку. Стандартные include ей не нужно. Все файлы в архиве. Нужен только сам fasm.exe или fasmw.exe Как собирать смотрите в Makefile

    ADD: Пока не сделал rand для выбора случайной позиции. Но это поправимо. Как будет еще свободное время - доделаю.
     

    Attached Files:

    mantissa likes this.
  10. Intro

    Intro Active Member

    Blog Posts:
    0
    Joined:
    Aug 29, 2009
    Messages:
    614
    M0rg0t, почему win32 надо выкинуть, по мне, если программа не требует мощных ресурсов, то х86-32 всё ещё рулит, и будет рулить. Это же не игровой 3д движок с уровнями на десятки км. Да и х86-32 проще, не важно что регистров маловато, и ещё на х86-64 некоторые инструкции не работают.
     
  11. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170
    Это макросы из temphls.inc, отсюда
     
  12. KPG

    KPG Member

    Blog Posts:
    0
    Joined:
    Jan 13, 2021
    Messages:
    121
  13. Application

    Application Active Member

    Blog Posts:
    1
    Joined:
    Oct 15, 2022
    Messages:
    110
    mantissa likes this.
  14. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170
    Интересно, гляну ща
    Я так понимаю ее в релизе так и не было? XP застал, когда совсем мелкий был, не шарю!
    --- Сообщение объединено, Oct 13, 2023 ---
    Посмотрел код, уж очень он старый видимо, C89 стиль + глобальные переменные везде, сами же нарушают свои рекомендации, в WM_PAINT отдельная функция рисует, хотя на MSDN написано, что лучше так не делать)) Двойной буферизации нет ни на уровне WM_PAINT, ни в дополнительных стилях окна. Там makefile есть, попробую собрать попозже:sarcastic:
    --- Сообщение объединено, Oct 13, 2023 ---
    В levels.bmp вот такое содержание upload_2023-10-13_14-19-29.png видимо там не классическая змейка была а какая-то другая
     
    Mikl___ likes this.
  15. Application

    Application Active Member

    Blog Posts:
    1
    Joined:
    Oct 15, 2022
    Messages:
    110
    Название игры ввело меня в заблуждение, значит это не та змейка
     
  16. mantissa

    mantissa Мембер Staff Member

    Blog Posts:
    0
    Joined:
    Sep 9, 2022
    Messages:
    170

    прикольная игруха получилась, можно с помощью gdi и win api сделать думаю - не оч сложно, хотя бы половину функционала. попробую переписать и всем заинтересованным советую:grin:
     
    Mikl___ likes this.