“Небольшая” предыстория

С началом июля я начал думать, какую игрушку можно ещё сделать, и идея мне пришла после видеоролика с канала Кирилл Лейфер, в котором он прошивал и пытался написать игру под “легендарный” и достаточно мемный в своём роде телефон Nokia 3310. С данным телефоном я и сам сталкивался в возрасте 6 лет)) Помню, что поиграл на нём в Змейку, поделал что-то ещё и суммарно я использовал данный аппарат около суток и больше к нему не притрагивался. В общем, я решил написать игру на C# в стиле игр 3310, во всё том же ролике я наткнулся на NOKIA 3310 JAM 5, где можно было узнать, какие параметры нужны для создания игры в стиле Нокии. Там я нашёл точную палитру, про то, что звуки должны быть монофоническими (просто моно). Как-то так, ну а теперь приступим к деталям :)

На чём писалась игра?

Писалось и билдилось всё в Microsoft Visual Studio Express 2012 (соответственно на версии C# 5.0).

Откуда брались спрайты и звуки для игры?

Спрайты были взяты у пользователя с ником wayou с его GitHub репозитория.

Игровые звуки брались с данного сайта.

Звук при запуске игры брался с данного видео.

Немного про игровые ресурсы

Все спрайты, гифки и звуки для игры находятся в папке resources, а путь к ним прописан в методе Form1_Load, что, как по мне, позволяет очень легко модифицировать игру посредством замены файлов и звуков на совершенно другие (например, вы можете вместо спрайта динозаврика поставить спрайт Марио и т.п.).

Имитация “живого мира” в игре

Как только я создал проект, я начал думать, как можно сделать якобы “живой мир” вокруг игрока, моей задачей было заставить облака парить) Для этого я использовал два timer’a (skyTimer1 и skyTimer2). Когда первый timer дойдёт до конца, запуститься второй и пока второй timer тикает, облака перемещаются влево по координате X:

Далее в skyTimer2_Tick ставится условие:

Здесь облака возвращаются в свою исходную позицию и вновь начинают своё движение влево, и так по сути до бесконечности.

Про движение кактусов и птеродактиля

У нас есть спрайты кактусов (два вида) и птеродактиля в двух положениях (летит снизу или сверху). Для их появления используется cactusTimer1, который при каждом своём повторном тиканье выбирает через random, какой из 4-х спрайтов появится:

cactusTimer2 отвечает за движение спрайтов, позиция объекта cactus перемещается влево по координате X:

В этом таймере также прописан зов Intersect(), который перенаправляет нас на метод Intersect, который отвечает за столкновение со спрайтами :))

Создание прыжка и приседания/поднимания игрока

Для создания всех этих действий был задействован метод KeyDown, который отвечает за нажатие клавиш. Прыжок был забит на клавишу Space, а приседание/поднимание на стрелку вниз/стрелку вверх соответственно:

С прыжком игрока дела обстоят так: включается таймер, когда таймер закончит тикать – игрок вернётся в исходное положение, а именно (80, 104).

Главное меню также выполнено посредством метода KeyDown, так что думаю, заострять на нём внимания нету смысла.

Как реализованы звуки в игре?

Дабы реализовать звуки, я использовал библиотеку WMPLib (или же Windows Media Player Library).

Ну а на этом думаю, стоит закончить данную статью. Потыкать исходный код игры или скачать уже собранную версию вы сможете на GitHub.

С вами был Yura_FX. Спасибо, что дочитали данную статью до конца. Не забывайте делиться своим мнением в комментариях :)

Комментарии (11)


  1. imashaman
    29.07.2023 13:16
    +2

    на оригинальную нокию не заливали? думаю совсем нет)))


    1. Yura_FX Автор
      29.07.2023 13:16

      Написано же: "в стиле игр Nokia 3310" :))


      1. imashaman
        29.07.2023 13:16
        +2

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


        1. Yura_FX Автор
          29.07.2023 13:16
          +1

          Ну, как раз у Кирилла Лейфера и был ролик :) Я же просто вдохновился стилем игр для Нокии и сделал динозаврика в этом стиле под Windows.


          1. imashaman
            29.07.2023 13:16
            +1

            https://www.youtube.com/watch?v=ArPckPTO6YA лет 12 было когда подобным страдал - обычный рей трейсер в 2Д


  1. IL_Agent
    29.07.2023 13:16
    +1

    Писалось и билдилось всё в Microsoft Visual Studio Express 2012 (соответственно на версии C# 5.0).

    Почему не vs 2002 и c# 1.0 ? )


    1. Yura_FX Автор
      29.07.2023 13:16
      -2

      Ваш комментарий является абсолютно бессмысленным. Это банальное уточнение :)


      1. KayAltos
        29.07.2023 13:16
        +1

        Вопрос в том, почему на такой древней версии?)


        1. Yura_FX Автор
          29.07.2023 13:16

          Всё очень просто) У меня слабый ноутбук (2 гига, 2 ядра и 2 потока, SSD на 120GB и изначально я сидел на Express 2010 и C# 4.0, но потом решил обновиться до более новой версии и самым оптимальным вариантом оказалась 2012 Express весом 6ГБ на диске примерно (из 120 гигов честных только 112, + Винда и другие сторонние проги вес имеют).


  1. Raleyph
    29.07.2023 13:16
    +1

    Юрий, зачем вы забиваете гвоздь отверткой?) Ну зачем этот WinForms? Раз уж ваш компьютер не способен потянуть Unity (как я понял из комментария выше), задайтесь вопросом написания собственного простого игрового движка, который будет иметь заточенный под определенные нужды функционал. Благо, информации об этом в интернете куча.

    p.s. А вообще, глядя на ваш код, могу сказать оно: вам еще учиться и учиться. Разберитесь с постройкой алгоритмов, коллекциями, ООП и правилами оформления кода, а потом уже пишите о своих достижениях на Хабр.


    1. Yura_FX Автор
      29.07.2023 13:16
      +1

      Благодарю Вас за придание большей мотивации :)) Что касается учёбы программированию, так как это моё любимое и главное хобби, то стараюсь в свободное время что-то, да делать (так как учёба в техникуме и все дела, свободного времени бывает не всегда). На C# (WinForms) сижу с августа 2022, то есть уже год (сделал на нём 5 проектов и выложил на GitHub, если вдруг станет интересно, можете спокойно зайти и глянуть).