Обоснование и описание метода алгоритма



 

При разработке программы игры "Тетрис" для описания математической части алгоритма был использован двумерный массив, размерностью 24*15. Для создания графической части программы использовались графические возможности языка C#.


Математическая часть алгоритма

Массив - это индексированный набор объектов одного типа. В языке С# массивы несколько отличаются от массивов в C++ и других языках, поскольку они являются объектами, что наделяет их полезными методами и свойствами. В С# определен синтаксис объявления объектов типа Array. Однако фактически создается объект типа System. Array. Таким образом, С# предоставляет программисту идеальные условия: за простым синтаксисом в стиле С кроется объявление класса, дающее экземплярам массива доступ к методам и свойствам класса System. Array.

В создании алгоритма использовался массив как математический аналог поля "Тетриса". Каждая ячейка массива соответствует определенной области поля игры. Каждая область поля игры может быть заполнена фигурой или быть пустой. Соответственно, каждая область поля может принимать два значения. Для этих целей можно использовать логические переменные. Каждая фигура имеет определенную форму и занимает несколько областей поля игры. Следовательно в массиве, ячейки, соответствующие заполненным областям поля, будут иметь логическое значение true. Для ячеек соответствующих пустым областям будет присвоено логическое значение false. Каждая горизонталь поля тетриса соответствует строке двумерного массива, а вертикаль - столбцу. Движение фигур производится через равные промежутки времени, т. е происходит повторение алгоритма через равные промежутки времени. Равные промежутки времени можно обеспечить с помощью обсчета ресурсоёмкого алгоритма (например вычисление ряда Фибоначчи) или использовать элемент языка С# таймер (который был использован в данной программе). Каждый тик таймера будет происходить повторение алгоритма движения фигуры. Это представлено как последовательное изменение значений в ячейках массива.

Чтобы игра была работоспособной, необходимо каждой ячейки массива каждый тик таймера присваивать значения, соответствующие областям поля. Т.к. количество ячеек велико (их 360), удобно было использовать циклические конструкции. Это позволило сократить программный код и количество ошибок в нем. Для этих целей был использован оператор for (Листинг 1).

Краткосрочной целью игры тетрис является полное заполнение фигурами горизонтали для последующей ее очистки и получении очков. Для этого необходимо было внести в программу функцию проверки заполнености горизонтали. Для массива это представляется как проверка ячеек каждой строки на одинаковость значений. данную задачу решает условная конструкция. В данной работе был использован оператор if (Листинг 1).

Математическая часть алгоритма строится на минимальном числе элементов: двумерный массив, таймер, логическая переменная, циклическая конструкция и условная конструкция (Листинг 1). Синтаксис записи этих элементов в языке C# прост, что делает алгоритм достаточно простым.

Графическая часть алгоритма

GDH+ - интерфейс графических устройств. Приложения с графикой, игры, Computer Aided Design/Computer Aided Manufacture (CAD/CAM - проектирование/производство с помощью компьютера), программы для рисования, для создания графиков и многие другие типы приложений требуют от разработчиков написания кода для работы с графикой. Использование создаваемых пользователем управляющих элементов также предполагает работу с графикой. Посредством своей библиотеки классов компания Microsoft сделала написание кода для работы с графикой как никогда простым.

Возможности GDI +:

· Работу с отдельными частями рисунков

· Рисование изображения

· Вывод на печать

· Предварительный просмотр

· Пространство имен Drawing2D

· Пространство имен Imaging

В классе Graphics инкапсулированы поверхности рисования GDI+. Есть три основных типа поверхностей рисования:

· Окна и управляющие элементы на экране

· Страницы, посылаемые на принтер

· Растровые изображения в памяти

Игра тетрис требует изображение областей поля в виде в квадратов. Для этого была использована структура языка C# Rectangle (прямоугольник). Для ее описания необходимы координаты верхнего левого угла прямоугольника (что соответствует значениям вертикали и горизонтали поля игры), а также его размеры. Структура Region позволяет объединять разные изображения в одно.

Для заполнения определенной области рисунка цветом возможно использование класса Brush. Класс Brush - это абстрактный класс. Для создания экземпляра класса Brush исользуются классы, производные от класса Brush, такие как SolidBrush, TextureBrush и LinearGradientBrush. Класс Brush находится в пространстве имен System. Drawing. Классы TextureBrush и LinearGradientBrush находятся в пространстве имен System. Drawing. Drawing2D. Вот что позволяет делать каждый из этих классов:

· SolidBrush заполняет фигуру сплошным цветом.

· TextureBrush позволяет заполнять фигуру рисунком, хранящемся в двоичном представлении. При создании такой кисти требуется также задавать обрамляющий прямоугольник и режим обрамления. Обрамляющий прямоугольник определяет, какую порцию рисунка мы должны использовать при рисовании, - использовать весь рисунок целиком совершенно необязательно. Для режима обрамления существует несколько возможностей, включая Tile (черепица) - TileFiipx, TileFiipY и TileFiipXY, позволяющих последовательно разбивать изображение на Отдельные квадраты. С помощью TextureBrush можно создавать очень интересные и весьма впечатляющие эффекты.

· LinearGradientBrush содержит кисть, которая позволяет рисовать плавный переход от одного цвета к другому, причем первый цвет переходит во второй под определенным углом. Углы при этом задаются в градусах. Угол, равный 0, означает, что переход от одного цвета к другому осуществляется слева направо. Угол, равный 90°, означает, что переход от одного цвета к другому осуществляется сверху вниз.

Принцип построения изображения поля игры прост. С помощью циклической и условной конструкций проверяется ячейки массива на одинаковые логические значения. Т.к. каждой ячейки соответствует определенная минимальная область поля игры, то зная значение строки и столбца массива возможно построение структуры Rectangle. Объединяя структуры Rectangle одного типа, можно получить два типа Region. Закрашивая эти два Region разными видами "кистей" получаем изображение поля (Листинг 2).

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

При разработки программы предполагалось использование среды Microsoft Visual C# 2008 Express Edition. Эта среда разработки программного обеспечения содержит набор шаблонов, которые часто используют при разработки программ. В программе я использовался ряд шаблонов:

· Button

· Label

· PictureBox

· TextBox

· ContextMenuStrip

· Timer

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

Приведенные выше принципы и элементы стали основой алгоритма.


Технологический раздел

 


Дата добавления: 2019-07-15; просмотров: 164; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!