User Rating: 0 / 5

Модификатор params для параметров методов в C#

Модификатор params для параметров методов в C#

User Rating: 0 / 5

Изображение для статьи создано при помощи нейросети Kandinsky

Доброго времени суток, друзья.

В этой статье мы рассмотрим с вами на примерах применение модификатора params в объявлениях методов в программе на C#.

Этот модификатор бывает полезен, когда вам необходимо вызывать метод с различным количеством аргументов.

При указании модификатора params нужно учитывать следующее:

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

Все рассмотренные ниже в статье примеры я подготовил в новом консольном приложении (в среде Microsoft Visual Studio выбирал тип проекта: "Консольное приложение (Майкрософт)") и назвал его ParamsModifierExample. В конце статьи я приложу ссылку на пример готового проекта, и вы можете просто скачать его и запустить в своей среде разработки.

Добавить комментарий
Пишем 2D-игру "Змейка" на C# для Windows Forms (~200 строк кода)

Пишем 2D-игру "Змейка" на C# для Windows Forms (~200 строк кода)

User Rating: 0 / 5

Изображение для статьи создано при помощи нейросети Kandinsky

Всем привет!

В этой статье мы разберём с вами, как написать популярную (если не сказать, всемирно известную) игру "Змейка" на языке C#. В базовом варианте - без различных улучшений и "красивостей" в плане графики/музыки - весь основной код игры займет у нас приблизительно 200 строк исходного кода на C#. Затем мы дополнительно рассмотрим с вами вариант оптимизации базового варианта игры, где добавим различные функции, немного улучшим графику и геймплей, добавим визуальных эффектов в игру и статистику с её отображением для игрока. По понятным причинам после таких улучшений базового варианта объем кода у нас несколько увеличится, однако отражённые в статье улучшения - это лишь один из возможных предложенных мной вариантов, и они опциональны. Вы всегда сможете взять базовый вариант и при желании оптимизировать игру на свой вкус и цвет.

В самом конце статьи будут приложены архивы с готовыми проектами для среды Microsoft Visual Studio, которые мы с вами разработаем в рамках статьи: один проект будет содержать базовый вариант "Змейки", второй - оптимизированный, с улучшенной 2D-графикой.

Некоторые важные ограничения в игре, которые мы предусмотрим (т.к. некоторые варианты реализации "Змейки" могут отличаться по механике):

  • если "Змейка" уже движется вправо, то мгновенно развернуть её влево (т.е. в обратном направлении) у нас не получится: "Змейка" в игре не будет уметь менять направление резко на 180 градусов. Я точно не помню, но вроде бы в каких-то вариациях "Змейки" подобная механика была разрешена. В любом случае, в нашем варианте игры мы подобное движение запретим
  • в базовом варианте игры мы не будем накладывать никаких ограничений на скорость нажатия игроком клавиш. Это может привести к тому, что для очень быстрых игроков, если они нажмут, к примеру, шустро клавиши "стрелка вправо" и "стрелка вверх" при текущем движении "Змейки" вниз, то "Змейка" тут же "съест сама себя", и игра тут же закончится (это справедливо будет и для других направлений движения и соответствующих клавиш). Это, возможно, не очень правильно, и может расцениваться как баг, но для базового варианта игры в статье мы опустим такие детали и тонкости, а вот в расширенном всё же внедрим определённую технику для предотвращения подобных ситуаций.
  • в базовом варианте не будет функции "пауза", т.е. можно только играть или перезапускать игру. В расширенном варианте мы поддержим опцию постановки игры на паузу.

Прежде, чем мы начнём погружение в разработку игры, ниже - краткая демонстрация того, как игра будет выглядеть в базовом варианте и в оптимизированном варианте.

Добавить комментарий
Использование делегатов в C#

Использование делегатов в C#

User Rating: 0 / 5

Изображение для статьи создано при помощи нейросети Kandinsky

Делегаты являются одним из ключевых инструментов в языке программирования C#, позволяя передавать методы как параметры, хранить ссылки на методы и вызывать методы динамически. Давайте детальнее рассмотрим, что такое делегаты, посмотрим на их ключевые особенности, ограничения и примеры использования в коде.

В конце этой статьи вы найдёте ссылку на архив с готовым примером проекта для среды Microsoft Visual Studio, который содержит демонстрацию всех основных особенностей делегатов, которые мы разберём в рамках статьи.

Что такое делегат? Примеры объявления делегатов в C#

Делегат в C# - это тип данных, который представляет собой ссылку на метод с заданным списком параметров и типом возвращаемого значения. Он позволяет передавать методы как параметры другим методам, сохранять ссылки на методы и вызывать методы динамически во время выполнения программы.

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

Давайте рассмотрим небольшой пример объявления делегата:

public delegate void InputStringParamDelegate(string param);

В данном случае мы объявили делегат с именем InputStringParamDelegate, которому можно впоследствии установить ссылку на какой-то метод, у которого будет тип возвращаемого значения void и который принимает единственный параметр с типом string. Обратите внимание на использование ключевого слова delegate в объявлении делегата.

Добавить комментарий
Класс AinByteValue на C# для управления битами внутри байта

Класс AinByteValue на C# для управления битами внутри байта

User Rating: 0 / 5

Изображение для статьи создано при помощи нейросети Kandinsky

Доброго времени суток, друзья.

В этой статье я хотел бы рассмотреть вариант класса для C#, который я назвал AinByteValue. Смысл данного класса - предоставить доступ разработчику C# до конкретных битов внутри значения типа byte и дать возможность управлять этими битами при помощи открытых методов/свойств, которые будет предоставлять класс, а также быстро получать значение конкретного бита в заданной позиции. Признаюсь, меня давно интересовала тема того, каким образом можно оперировать отдельно взятыми битами внутри одного байта и использовать эти отдельно взятые биты в качестве "флажков", которые могли бы быть аналогом типа данных bool, но занимать меньше памяти программы.

Возникает закономерный вопрос: а для чего и где этот класс может понадобиться в принципе при разработке программ на C#? Зачем нам вообще управлять битами внутри байта? Ведь в языке C# и так есть уже множество стандартных типов данных, таких как bool, byte, int и т. д.

Но давайте представим ситуацию, что мы пишем некоторую программу и проектируем в ней класс, где нам требуется хранить определённое количество "флажков" булева типа (bool). Каждый из таких флажков несёт за собой какую-то функциональность класса и связанную с ней логику. Например, класс мог бы выглядеть так:

    public class TestClassWithBooleans {
        private bool myFlag1;
        private bool myFlag2;
        private bool myFlag3;
        private bool myFlag4;
        private bool myFlag5;
        private bool myFlag6;
        private bool myFlag7;
        private bool myFlag8;

        public TestClassWithBooleans() {
            // здесь какой-то код конструктора
        }

        // здесь какие-то методы класса, использующие фнутренние флаги myFlag1, ..., myFlag8
    }

 

Здесь для простоты названия всех флажков я придумал "из головы", и они тривиальны: все с префиксом 'myFlag' и индексом от 1 до 8 в конце каждого имени поля класса. В реальной же программе, где потребуется множество переменных типа bool внутри класса, конечно, им были бы даны какие-то более читаемые и осмысленные имена, и была бы реализована соответствующая логика для работы с каждым из флажков.

Добавить комментарий
Теорема Пифагора и тригонометрические функции для нахождения центра линии при её рисовании на C# средствами GDI+

Теорема Пифагора и тригонометрические функции для нахождения центра линии при её рисовании на C# средствами GDI+

User Rating: 0 / 5

Изображение к статье создано при помощи нейросети Kandinsky

Всем привет.

Info icon by Icons8НА ЗАМЕТКУ
Друзья, я признаюсь честно, в этой статье я изобрёл "велосипед", т.к. поискав уже после написания этой статьи другие способы нахождения отрезка линии, я понял, что точка середины отрезка может быть найдена гораздо более простым способом - без использования теоремы Пифагора и тригонометрических функций. Поэтому, пожалуйста, отнеситесь к информации из данной статьи просто как к альтернативному и, надо сказать, более сложному способу нахождения координат середины отрезка. С публикации данную статью не снимаю, вдруг всё же кому-то будет чем-то интересен и полезен и этот вариант.

О том, как очень просто и быстро найти середину отрезка, описано, в частности, здесь: https://ru.wikihow.com/найти-середину-отрезка-прямой

В сегодняшней статье я расскажу о том, как найти и нарисовать центр линии на языке C# в приложении Windows Forms, используя для рисования доступные возможности и средства GDI+. В данный момент я разрабатываю одну программу для визуального проектирования игровых объектов 2D-игр, и в этой программе мне потребовалась реализация функционала "Линейка", который бы измерял расстояние между двумя точками линии, нарисованной на форме в приложении Windows Forms, а также находил бы центральную точку линии (отрезка между двумя заданными точками).

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

Если вы ещё не сталкивались с GDI+, то рекомендую перед этой статьёй прочитать другую мою вводную статью "Рисуем фигуры на C# при помощи средств GDI+" по отрисовке простых фигур средствами GDI+, где я кратко рассказываю про этот стандартный интерфейс графического устройства, предоставляю внешние ссылки по этой теме и объясняю, как рисовать различные фигуры на форме в приложении Windows Forms.

Итак, в контексте этой статьи мы напишем с вами программу для Windows Forms, в которой будем строить и рисовать линию по двум заданным нами точкам, а также находить центральную точку этой линии. Мы также будем выводить координаты X и Y для всех точек отрисованной линии: для граничных точек и центральной точки, координаты которой мы рассчитаем специальным образом при помощи упомянутой теоремы Пифагора и тригонометрической функции Cos (косинус).

В конце статьи, как обычно, я дам ссылку на архив с готовым проектом для среды Microsoft Visual Studio, который мы напишем в этой статье.

Давайте сразу посмотрим на то, как будет выглядеть разрабатываемая нами программа.

При запуске программа начнёт отслеживать движение курсора мыши и рисовать небольшую окружность - в месте центра курсора. А также выводить текущие координаты точки, соответствующей положению курсора мыши: 

 

Пока мы будем двигать курсором в области формы, мы тем самым будем выбирать начальную точку нашей линии. Для фиксации начальной точки линии нужно будет кликнуть по форме левой кнопкой мыши.

Добавить комментарий
Яндекс.Метрика