Snake 2D GDI

Тема в разделе "WASM.GRAPHICS", создана пользователем mantissa, 29 июн 2023.

  1. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    155
    Так как никто ничего не выкладывает, то выложу я, написал по приколу 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]
     

    Вложения:

    • Snake.zip
      Размер файла:
      93,4 КБ
      Просмотров:
      216
    Последнее редактирование: 29 июн 2023
    M0rg0t и Mikl___ нравится это.
  2. MaKsIm

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    CreatePatternBrush можно сделать один раз в WMCreate и высвободить соответствующие изображения. Тоже можно сделать и с Pen + SolidBrush для Grid. Но это уже не такие большие объекты как PatternBrush
     
    Mikl___ и mantissa нравится это.
  3. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    155
    Точно! Спасибо за совет
     
  4. Intro

    Intro Active Member

    Публикаций:
    0
    Регистрация:
    29 авг 2009
    Сообщения:
    600
    Игра не динамичная как в оригинале, надо апдейт сделать через таймер. И ещё, я для таких задач win32 использую чтобы работало на старых ПК.
     
    mantissa нравится это.
  5. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    155
    Сделал динамическое передвижение, скорость задается константой GAME_SPEED (чем меньше, тем змея быстрее). Теперь кисти создаются в WMCreate и соответствующие им битмапы сразу удаляются из памяти.
     

    Вложения:

    • Snake.zip
      Размер файла:
      94,3 КБ
      Просмотров:
      207
    Mikl___ нравится это.
  6. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    Добрый день, не могли бы вы выложить сборку Masm для x64 если не сложно, заранее спасибо
     
  7. mantissa

    mantissa Мембер Команда форума

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

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    mantissa, спасибо, интересный проект. Напомните, что значат цифры в скобках?
    Код (Text):
    1. DrawFood proc <12, 8> hdc:HDC
    Никогда не использовал в масме такое.

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

    MaKsIm Member

    Публикаций:
    0
    Регистрация:
    11 фев 2008
    Сообщения:
    94
    Заразил mantissa меня идеей создания змейки и на выходных я взял fasm1 и набросал с нуля змейку. Стандартные include ей не нужно. Все файлы в архиве. Нужен только сам fasm.exe или fasmw.exe Как собирать смотрите в Makefile

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

    Вложения:

    • Snake2D.zip
      Размер файла:
      19,3 КБ
      Просмотров:
      195
    mantissa нравится это.
  10. Intro

    Intro Active Member

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

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    155
    Это макросы из temphls.inc, отсюда
     
  12. KPG

    KPG Member

    Публикаций:
    0
    Регистрация:
    13 янв 2021
    Сообщения:
    121
  13. Application

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    mantissa нравится это.
  14. mantissa

    mantissa Мембер Команда форума

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

    Application Active Member

    Публикаций:
    1
    Регистрация:
    15 окт 2022
    Сообщения:
    110
    Название игры ввело меня в заблуждение, значит это не та змейка
     
  16. mantissa

    mantissa Мембер Команда форума

    Публикаций:
    0
    Регистрация:
    9 сен 2022
    Сообщения:
    155

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