User Rating: 0 / 5

Класс 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#

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

User Rating: 0 / 5

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

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

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

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

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

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

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

public delegate void InputStringParamDelegate(string param);

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

Добавить комментарий
Рисуем фигуры на C# при помощи средств GDI+

Рисуем фигуры на C# при помощи средств GDI+

User Rating: 0 / 5

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

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

В сегодняшней статье мы разберём с вами некоторые возможности GDI+ и научимся рисовать различные простые графические фигуры и примитивы на форме в приложении Windows Forms.

Описание того, что такое GDI+, можно найти по следующей ссылке на официальном сайте: https://learn.microsoft.com/ru-ru/dotnet/desktop/winforms/advanced/about-gdi-managed-code?view=netframeworkdesktop-4.8

Отмечу лишь кратко, что аббревиатура GDI обозначает Graphics Device Interface (т.е. интерфейс графического устройства), и по сути это часть операционной системы Windows, которая предоставляет возможность для создания векторных изображений и рисования. Также стоит упомянуть, что GDI+ является частью .NET Framework.

Итак, в рамках этой статьи мы рассмотрим возможности рисования при помощи средств GDI+ следующих фигур:

  • Прямоугольник (Rectangle) - нарисуем контур прямоугольника и закрашенный прямоугольник на форме
  • Эллипс (Ellipse) - нарисуем контур эллипса и закрашенный эллипс на форме
  • Полигон (Polygon) - нарисуем контур полигона и закрашенный полигон на форме
  • Дуга (Arc) - нарисуем на форме небольшой отрезок дуги. Дугой называется часть окружности или эллипса, заключённая между двумя заданными точками, принадлежащими этой окружности/эллипсу.
  • Сектор (Pie) - нарисуем на форме сектор и закрашенный сектор. Сектор похож на дугу, но отличается от неё тем, что две крайние точки дуги соединены радиальными линиями с центром окружности/эллипса.
  • Линии (Line) - нарисуем на форме 3 различных линии, каждая из которых будет иметь свой стиль штриха.
  • Фундаментальный сплайн (Curve) - мы нарисуем на форме несколько фундаментальных сплайнов. Три из них будут открытыми, и два из них будут закрытыми. О том, какие есть различия между открытыми и закрытыми фундаментальными сплайнами, мы посмотрим далее по тексту статьи.
  • Графический путь (GraphicsPath) - нарисуем на форме графический путь, состоящий из нескольких линий и дуги
  • Текст - выведем на форме текст, содержащийся в тестовой строковой переменной

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

 

Добавить комментарий
Теорема Пифагора и тригонометрические функции для нахождения центра линии при её рисовании на 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, который мы напишем в этой статье.

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

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

 

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

Добавить комментарий
Пишем 2D-игру в стиле Arkanoid на C#

Пишем 2D-игру в стиле Arkanoid на C#

User Rating: 0 / 5

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

Всем привет.

В сегодняшней статье мы напишем с вами игру в стиле Arkanoid, используя для этого язык C#.

Прежде, чем мы начнём погружение в разработку самой игры, подсвечу некоторые примерные входные навыки и знания, которые будут нужны от читателя для лучшего понимания изложенного ниже материала. Итак, читатель:

  • должен уже иметь некоторый опыт разработки программ на C# и понимать основные принципы объектно-ориентированного программирования (наследование, инкапсуляция, полиморфизм), а также быть знакомым с понятием классов и интерфейсов в C#, включая понятие универсальных методов, классов и интерфейсов в C#
  • должен понимать различия в модификаторах доступа public, protected, private, которые используются в языке C# и применяются к методам, полям и свойствам классов
  • должен иметь опыт создания проектов в среде Microsoft Visual Studio с типом проекта "Приложение Windows Forms (.NET Framework)", а также понимать, где и как настраиваются свойства формы и её элементов управления, а также что такое события и как создавать обработчики событий
  • должен быть знаком с понятием действий (Action) и классом Func, доступном в C#, а также понимать принцип работы лямбда-выражений
  • должен понимать, как работают события (event) и что такое делегаты (delegate) в языке C#
  • должен быть знаком с UML-нотацией и понимать диаграмму классов на UML
  • должен в общих чертах понимать, что такое GDI+ и основные принципы обработки события Paint, работу с классами Pen, Brush, Font, Graphics 

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

В конце данной статьи-урока вы найдёте ссылку на архив с готовым решением и разработанной игрой.

Итак, давайте приступим к созданию игры.

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