Реферат: Разработка программы для игры "Тетрис"

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

БРЯНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ

УНИВЕРСИТЕТ

Кафедра «Компьютерные технологии и системы»

Дисциплина «Языки и системы программирования»

 

 

 

 

 

 

КУРСОВАЯ РАБОТА

Разработка программы для игры «Тетрис»

Руководитель

к.т. н., доц.

Студентгр.08-ПРО

БРЯНСК 2010


Оглавление

Задание на курсовую работу

Введение

1. Конструкторский раздел

1.1 Обоснование необходимости разработки

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

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

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

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

2.1 Выбор языка и среды программирования

2.2 Блок-схема программы

2.3 Вводимые и выводимые данные

2.4 Разработка и отладка текста программы

2.5 Разработка интерфейса пользователя

2.6 Тестирование программы

3. Руководство пользователя

3.1 Программно-аппаратные требования

3.2 Порядок работы с программой

Заключение

Список использованной литературы

Приложения


/>Задание на курсовуюработу

По дисциплине «Языки и системы программирования»

Студент Шора Р.В. Группа 08-ПРО

Тема: Разработка программы для игры «Тетрис»

Техническое задание.

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

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

Руководитель к. т. н., доц. Рощин С.М.


/>Введение

В данном документе описывается программа, написанная в соответствиис постановкой задачи по теме «Разработка программы для игры „Тетрис“»по дисциплине «Языки и системы программирования». Данная программа осуществляетвывод на экран случайным образом падение различных фигур. Входными данными являетсяввод вариантов скорости движения фигур сверху вниз и управление падающими фигурами.

Назначение программы — развлечение играющих, совершенствованиеих координации и логического мышления. Программа может применяться в качестве игровойна разных типах персональных компьютеров.

История игры Тетрис начинается в июне 1985 года. Тетрис был изобретенАлексеем Пажитновым, а затем был интегрирован на ПК IBM Вадимом Герасимовым. Послечего ига Тетрис начала распространяться по всей Москве, а затем уже и по всему миру.Сначала она была доставлена в Венгрию, где венгерские программисты интегрировалиТетрис для Apple II и Commodore 64.

Игра была замечена в мире, и несколько представителей крупныхкомпаний, обращались к автору Тетриса, чтобы купить права на распространение игры.Алексей подписывает контракт с Mirrorsoft UK и Spectrum Holobyte, предоставляя имправа на компьютерным версии Тетрис. После того, как первые копии Тетриса для домашнихкомпьютеров были преданны, игра приобрела популярность среди населения и стала самойпродаваемой компьютерной игрой в Англии и США в 1988 году.

Существует множество способов реализации данной программы. Ихможно разделить по функциональности:

1) математическое описание движений фигур;

2) графическое отображение движений фигур;

В математической части рассматриваются основные принципы и законыдвижений фигур. Это самая важная часть программы. От неё зависит правильная работоспособностьпрограммы. Для её реализации можно использовать различные алгоритмы. Например описатьдвижение фигуры двумя линейными функциями. Одна будет отвечать за расположение фигурыпо горизонтали, другая по вертикале. Меняя за определенные промежутки времени значенияпеременных этих функций, будет меняться положение фигуры на плоскости. Третья функциябудет отвечать за очистку полностью заполненных горизонталей. Основными недостаткамиэтого способа является объявление большого числа переменных, отвечающих за описаниеуже упавших фигур, и создание большого числа дополнительных функций, отвечающихза поворот фигур вокруг своей оси.

Другой способ математического описания движения фигур и заполненияполя тетриса — создание двумерной матрицы n*k. Через определенный промежуток времени будет изменяться значения,соответствующие положению фигур на плоскости и уже упавшим фигурам. Т.е. значениематрицы расположенное на n-ой строке и в k-ом столбце, будет соответствовать части фигуры расположеннойна n-ой горизонтали и k-ой вертикали.

Приведенные выше способы не являются единственными. Они лишьнаиболее популярны в реализации программы «Тетрис» среди программистов.

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

Ещё один способ графического отображения фигур и поля тетриса- использование готовых элементов языка программирования. Наиболее часто для этихцелей используют таблицы. Изменяя цвет ячеек таблицы через определенные промежуткивремени можно отобразить на экране движение фигур и заполненные области поля. Такжевозможно использование таких элементов, как кнопки, области для надписей (Label). Изменяя их цвет, также можно отобразить движение фигури заполненные области. Но у такого способа есть огромный минус — объявление большогочисла таких элементов.

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

При разработки программы для игры Тетрис был использовал объектно-ориентированныйязык программирования Visual C#. Математическая часть программыбыла создана с помощью двумерной матрицы. Графическое отображение было реализованос помощью графических возможностей языка Visual C#.


/>1. Конструкторскийраздел/>1.1 Обоснование необходимостиразработки

В разделе «Введение» данной курсовой работы была приведенакраткая история игры «Тетрис». Как видно этой компьютерной игре более25 лет. Все изученные мной примеры этой игры написаны на довольно старых языкахпрограммирования (например Basic, Pascal).В таких играх был достаточно недружественный интерфейс пользователя, слабое графическойотображение (достаточно резкие цвета, минимальная цветовая палитра) (Рис.1).

/>

Рис. 1. Тетрис на Basic

Основываясь на выше изложенных фактах было решено создать программуигры «Тетрис».

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

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


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

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

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

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

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

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

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

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).

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

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

· Button

· Label

· PictureBox

· TextBox

· ContextMenuStrip

· Timer

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

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


/>2. Технологическийраздел/>2.1 Выбор языка и средыпрограммирования

Для реализации данного курсовой работы был выбран язык программированияVisual C#. Язык основан на строгой компонентной архитектуреи реализует передовые механизмы обеспечения безопасности кода. Язык программированияC# объединил лучшие черты целого ряда предшественников, а именно ветви языков B- C — C++.

От языка программирования C++ языком C# унаследованы следующиемеханизмы: «перегруженные» операторы, небезопасные арифметические операциис плавающей точкой, а также ряд других особенностей синтаксиса.

Несмотря на весьма существенные различия между компонентной объектноймоделью COM (основного стандарта Microsoft для компонентного проектирования и реализациипрограммного обеспечения) и моделью Java Beans, базовым стандартом Sun Microsystemsдля компонент (зависимой от языка реализации), язык программирования C# имеет довольномного общего с языком Java.

Перечислим наиболее характерные черты сходства языков программированияC# и Java. Прежде всего, оба языка относятся к категории объектно-ориентированныхи предполагают единственность наследования. Другими важными особенностями, которыесближают языки программирования C# и Java, являются механизмы интерфейсов, обработкиисключительных ситуаций, а также процессов или «нитей» (threads).«Сборка мусора» и пространства имен реализованы в этих двух языках сходнымобразом. Оба языка программирования характеризуются сильной (строгой) типизациейи динамической загрузкой кода при выполнении программы.

Но несмотря на то, что целый ряд конструктивных синтаксическихмеханизмов и особенностей реализации унаследован языком программирования C# от прародителей(C++ и Java), возможности этого нового языка программирования не ограничиваютсясуммой возможностей его исторических предшественников.

К числу принципиально важных решений, которые реализованы корпорациейMicrosoft в языке программирования C#, можно отнести следующие:

· компонентно-ориентированный подход к программированию (который характерени для идеологии Microsoft.net в целом);

· свойства как средство инкапсуляции данных (характерно также в целомдля ООП);

· обработка событий (имеются расширения, в том числе в части обработкиисключений, в частности, оператор try);

· унифицированная система типизации (соответствует идеологии Microsoft.netв целом);

· делегаты (delegate — развитие указателя на функцию в языках C и C++);

· индексаторы (indexer — операторы индекса для обращения к элементамкласса-контейнера);

· перегруженные операторы (развитие ООП);

· оператор foreach (обработка всех элементов классов-коллекций, аналогVisual Basic);

· механизмы boxing и unboxing для преобразования типов;

· атрибуты (средство оперирования метаданными в COM-модели);

· прямоугольные массивы (набор элементов с доступом по номеру индексаи одинаковым количеством столбцов и строк).

Приведенные выше особенности языка C#повлияли на выбор языка программирования и соответственно среды.net для программы.


/>2.2 Блок-схема программы

При создании программного алгоритма «Тетриса» на начальномэтапе была разработана блок-схема игры. В ней было описана последовательность работыалгоритма игры (Рис.2).

/> 

Рис.2


При запуске приложения «Тетрис» происходит объявлениядвумерного массива, с последующим его заполнением пустыми значениями. Игра начинаетсяпри запуске таймера. Далее происходит выбор фигуры с помощью генератора случайныхчисел. В соответствии с выбранной фигурой происходит заполнение первых двух строкмассива. Затем происходит вход в цикл падения фигуры. Тело цикла представляет собойсдвиг фигуры на одну строку ниже и проверка на нажатие кнопок «Вправо»,«Влево», «Поворот» (при нажатии этих кнопок происходит сдвигфигуры вправо, влево и поворот вокруг своей оси соответственно). Условие окончанияцикла — отсутствие свободного места под фигурой. После выхода из цикла начинаетсяпроверка полностью заполненных строк. Если такие имеются, то происходит их очисткаи сдвиг всех строк, находящихся выше. Далее происходит новый выбор фигуры и повторениеалгоритма. Если же заполненных строк нет, то происходит проверка на свободное местов третьей строке. Если третья строка свободна, то происходит выбор фигуры и выполнениеалгоритма цикла. При заполненности третьей строки происходит остановка таймера ивывод результатов игры. Затем происходит выход из игры.

 2.3 Вводимые и выводимые данные

Одной из самых важных функций любого языка программирования являетсяпредоставление возможностей для управления программой в ручную. Это подразумеваетсоздание пользовательского интерфейса.

Выводимыми данными являются данные сообщаемые пользователю, авводимыми являются те данные, которые пользователь сообщает программе.

Выводимые данные в программе представлены в виде графическогоотображения окна игры (Рис.3)

/>

Рис.3

Окно игры.

Вводимыми данными представлены в виде программного кода, которыйнеобходимо выполнить при определенных действиях пользователя. А именно:

1) нажатие клавиш Left, Right, Up, Space;

2) работа пользователя со строкой меню.

 2.4 Разработка и отладка текста программы

На этапе разработки алгоритма необходимо определить последовательностьдействий, которые надо выполнить для получения результата. Если задача может бытьрешена несколькими способами и, следовательно, возможны различные варианты алгоритмарешения, то программист, используя некоторый критерий, например, скорость решенияалгоритма, выбирает наиболее подходящее решение. Результатом этапа разработки алгоритмаявляется подробное словесное описание алгоритма или его блок-схема.

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

Отладка — это процесс поиска и устранения ошибок. Ошибки в программеразделяют на две группы: синтаксические (ошибки в тексте) и алгоритмические. Синтаксическиеошибки — наиболее легко устраняемые. Алгоритмические ошибки обнаружить труднее.Этап отладки можно считать законченным, если программа правильно работает на одном-двухнаборах входных данных.

 2.5 Разработка интерфейса пользователя

Тетрис — это игра. Поэтому, при разработки интерфейса пользователянеобходимо учесть ряд особенностей:

1) Интерфейс должен быть интуитивно понятен простому пользователю компьютера.

2) Цветовая схема не должна раздражать человека.

Рассмотрим первый пункт.

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

Что же касается второго пункта, здесь применены «холодные»цвета (оттенки синего). Они не несут ни какой психической нагрузки, поэтому времяпрепровождение для человека будет приятным.

 2.6 Тестирование программы

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

Основные принципы организации тестирования:

1) необходимой частью каждого теста должно являться описание ожидаемых результатовработы программы, чтобы можно было быстро выяснить наличие или отсутствие ошибкив ней;

2) следует по возможности избегать тестирования программы ее автором, т.к. кромеуже указанной объективной сложности тестирования для программистов здесь присутствуети тот фактор, что обнаружение недостатков в своей деятельности противоречит человеческойпсихологии (однако отладка программы эффективнее всего выполняется именно авторомпрограммы);

3) по тем же соображениям организация — разработчик программного обеспеченияне должна “единолично ” его тестировать (должны существовать организации, специализирующиесяна тестировании программных средств);

4) должны являться правилом доскональное изучение результатов каждого теста,чтобы не пропустить малозаметную на поверхностный взгляд ошибку в программе;

5) необходимо тщательно подбирать тест не только для правильных (предусмотренных)входных данных, но и для неправильных (непредусмотренных);

6) при анализе результатов каждого теста необходимо проверять, не делает липрограмма того, что она не должна делать;

7) следует сохранять использованные тесты (для повышения эффективности повторноготестирования программы после ее модификации или установки у заказчика);

8) тестирования не должно планироваться исходя из предположения, что в программене будут обнаружены ошибки (в частности, следует выделять для тестирования достаточныевременные и материальные ресурсы);

9) следует учитывать так называемый “принцип скопления ошибок”: вероятностьналичия не обнаруженных ошибок в некоторой части программы прямо пропорциональначислу ошибок, уже обнаруженных в этой части;

10) следует всегда помнить, что тестирование — творческий процесс, а не относитьсяк нему как к рутинному занятию.

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


/>3. Руководствопользователя/>3.1 Программно-аппаратныетребования

Аппаратные требования:

Необходимый объем ОЗУ64 Мб и графическим адаптером, поддерживающим режим 800х600 и выше, глубина цвета32 бит. Необходимое место на жестком диске 780 Кб. Клавиатура, мышь.

Программные требования:

Операционная системасемейства Windows: 2000/XP (32/64) /Vista (32/64) /7 (32/64)

 3.2 Порядок работы с программой

Запускаем приложение Tetris. exe (Рис.4):

/>

Рис.4


Приложение Tetris. exe

Для того чтобы начать игру необходимо нажать Меню — Новая игра.Для изменения сложности игры необходимо зайти в Меню — Сложность. Для временнойостановки игры необходимо нажать Меню — Пауза или клавишу Space.Для продолжения игры нажать Меню — Продолжить (Рис.5).

/>

Рис.5

Строка меню

Управление фигурами осуществляется с помощью клавиш Left, Right, Up(подробнее Меню — Справка — Управление) (Рис.6).

/>

Рис.6

Окно «Управление»

Для выхода из программы необходимо нажать Меню — Выход). Также можно посмотреть сведения о программном продукте и разработчике (Меню — Справка- О программе) (Рис.7).

/>

Рис.7

Окно «О программе»


/>Заключение

В данной курсовой работе была выполнена поставленная задача- создание программы по теме «Разработка программы для игры „Тетрис“».При помощи этой программы можно приятно провести время, совершенствовать координациюи развивать логическое мышление. Программа не занимает много места, не требовательнак установленному программному обеспечению.

 
Список использованной литературы

1. Г. Шилдт C#: Учебный курс. — Спб.: Питер, 2003.- 512с

2. Либерти, Д. Программирование на Си Шарп. — М.: Символ-плюс, 2005. — 684 с.

3. Ватсон К. Си Шарп/К. Ватсон. — М.: Лори, 2005. — 862 с.

4. Жарков В.А. Компьютерная графика, мультимедиа и игры на Visual C# 2005.- М.: Жарков пресс, 2005. — 812с.

5. http://www.excode.ru/art6225p1.html


Приложения 

Листинг 1

private void Form1_Load (object sender, EventArgse)

{

for (i = 0; i < 24; i++) // заполнение массива пустымизначениями

{

for (j = 0; j < 15; j++)

{

Tet [i, j] = false;

Res = true;

}

}

SF = false; // фигура не существует

textBox2. Text = «0»;

}

private void timer_Tick (object sender, EventArgse)

{

if (SF == false)

{

Random a = new Random (); // выбор фигуры

NumbeF = a. Next (0,6);

SF = true;

P = true; // появление фигуры на первой позиции

}

if (SF == true)

{

if (NumbeF == 0) // квадрат

{

if (P == true) // условие появления квадрата в первой позиции

{

Tet [0, 7] = true;

Tet [0, 8] = true;

Tet [1, 7] = true;

Tet [1, 8] = true;

P = false; // фигура не появляется на первой позиции

i = 1;

j = 7;

}

if (i < 23 && (Tet [i + 1, j] ==false && Tet [i + 1, j + 1] == false)) // условие сдвига фигуры

{

Tet [i — 1, j] = false;

Tet [i — 1, j + 1] = false;

Tet [i + 1, j] = true;

Tet [i + 1, j + 1] = true;

i = i + 1;

}

else

{

SF = false; // фигура не существует

}

}

if (NumbeF == 1) // сапожок

{

if (P == true) // условие появления сапожка в первой позиции

{

Tet [0, 7] = true;

Tet [1, 7] = true;

Tet [1, 8] = true;

Tet [1, 9] = true;

P = false;

i = 1;

j = 8;

Razp = 0;

}

if (Razp == 0) // фигура сапожок в положение 0

{

if (i < 23 && Tet [i + 1, j — 1] == false &&Tet [i + 1, j] == false && Tet [i + 1, j + 1] == false) // проверка свободногоместа под фигурой

{

Tet [i, j] = false;

Tet [i, j + 1] = false;

Tet [i — 1, j — 1] = false;

Tet [i + 1, j — 1] = true;

Tet [i + 1, j] = true;

Tet [i + 1, j + 1] = true;

i = i + 1;

}

else

{

SF = false;

}

}

if (Razp == 1) // фигура сапожок в положение 1

{

if (i < 22 && Tet [i + 2, j — 1] == false &&Tet [i + 2, j] == false) // проверка свободного места под фигурой

{

Tet [i — 1, j] = false;

Tet [i + 1, j — 1] = false;

Tet [i + 2, j — 1] = true;

Tet [i + 2, j] = true;

i = i + 1;

}

else

{

SF = false;

}

}

if (Razp == 2) // фигура сапожок в положение 2

{

if (i < 22 && Tet [i + 1, j — 1] == false &&Tet [i + 1, j] == false && Tet [i + 2, j + 1] == false) // проверка свободногоместа под фигурой

{

Tet [i, j] = false;

Tet [i, j + 1] = false;

Tet [i, j — 1] = false;

Tet [i + 1, j — 1] = true;

Tet [i + 1, j] = true;

Tet [i + 2, j + 1] = true;

i = i + 1;

}

else

{

SF = false;

}

}

if (Razp == 3) // фигура сапожок в положение 3

{

if (i < 22 && Tet [i, j + 1] == false &&Tet [i + 2, j] == false) // проверка свободного места под фигурой

{

Tet [i — 1, j] = false;

Tet [i — 1, j + 1] = false;

Tet [i, j + 1] = true;

Tet [i + 2, j] = true;

i = i + 1;

}

else

{

SF = false;

}

}

}

 

Листинг 2

SolidBrush Brush2 = new SolidBrush (System.Drawing. Color. LightCyan); // создание кисти

SolidBrush Brush3 = new SolidBrush (System.Drawing. Color. Red);

Font font = new Font («Times New Roman»,30, FontStyle. Bold | FontStyle. Italic); // описание стиля надписи

for (a = 2; a < 24; a++)

{

for (b = 0; b < 15; b++)

{

Graphics myGraphics = CreateGraphics (); // создание поверхностидля рисования

if (Tet [a, b] == true)

{

LinearGradientBrush Brush1 = new LinearGradientBrush(new Rectangle (20 * b,20 * a, 20, 20), Color. Aqua, Color. Blue, 45);

Rectangle r1 = new Rectangle (20 * b,20 * (a — 1), 20,20); // объединение заполненных ячеек в область

myGraphics. FillRectangle (Brush1, r1); // закрашиваниезаполненной области

}

if (Tet [a, b] == false)

{

Rectangle r1 = new Rectangle (20 * b,20 * (a — 1), 20,20); // объединение незаполненных ячеек в область

myGraphics. FillRectangle (Brush2, r1); // закрашиваниенезаполненной области

}

}

}

 

Листинг 3

private void button2_KeyUp (object sender, KeyEventArgse)

{

key = e. KeyCode. ToString ();

if (key == «Right») // проверка нажатие клавиши«Вправо»

{

timer. Enabled = false;

if (NumbeF == 0 && j < 13 && Tet [i- 1, j + 2] == false && Tet [i, +2] == false) // проверка свободного местасправо

{

Tet [i, j + 2] = true;

Tet [i — 1, j + 2] = true;

Tet [i, j] = false;

Tet [i — 1, j] = false;

j = j + 1;

}

if (NumbeF == 1)

{

if (Razp == 0 && j < 13 && Tet [i, j+ 2] == false && Tet [i — 1, j] == false) // проверка свободного места справо

{

Tet [i — 1, j] = true;

Tet [i, j + 2] = true;

Tet [i, j — 1] = false;

Tet [i — 1, j — 1] = false;

j = j + 1;

}

if (Razp == 1 && j < 14 && Tet [i — 1, j + 1] == false && Tet [i, j + 1] == false && Tet [i + 1, j +1] == false) // проверка свободного места справо

{

Tet [i — 1, j] = false;

Tet [i, j] = false;

Tet [i + 1, j — 1] = false;

Tet [i — 1, j + 1] = true;

Tet [i, j + 1] = true;

Tet [i + 1, j + 1] = true;

j = j + 1;

}

if (Razp == 2 && j < 13 && Tet [i, j+ 2] == false && Tet [i + 1, j + 2] == false) // проверка свободного местасправо

{

Tet [i, j + 2] = true;

Tet [i + 1, j + 2] = true;

Tet [i, j — 1] = false;

Tet [i + 1, j + 1] = false;

j = j + 1;

}

if (Razp == 3 && j < 13 && Tet [i — 1, j + 2] == false && Tet [i, j + 1] == false && Tet [i + 1, j +1] == false) // проверка свободного места справо

{

Tet [i — 1, j + 2] = true;

Tet [i, j + 1] = true;

Tet [i + 1, j + 1] = true;

Tet [i — 1, j] = false;

Tet [i, j] = false;

Tet [i + 1, j] = false;

j = j + 1;

}

}

}

}

еще рефераты
Еще работы по информатике, программированию