Отчет по курсу «Технологии программирования» Проектная документация к задаче «Тетрис» Состав команды: Богоявленская Юлия, Колиух Кирилл, Юшин Евгений. Воронеж 2010 Содержание Содержание………………………………………………………………………………………2 Анализ предметной области…………………………………………………………………….3 Постановка задачи……………………………………………………………………………….5 Анализ требований к системе…………………………………………...………………………6 Поиск аналогов…………………………………………………………………………………..6 Диаграмма вариантов использования…………………………………………………………..8 Аппаратные и программные требования ………………………………………………………9 Архитектура ПО………………………………………………………………………………..10 Интерфейс…………………………………………………………………………………...…..11 Реализация……………………………………………………………………………………....12 Схема классов…………………………………………………………………………………...12 Разработчики…….……………………………………………………………………………...13 Анализ предметной области Тетрис (англ. Tetris) – культовая компьютерная игра, изобретённая в СССР Алексеем Пажитновым и представленная общественности 6 июня 1984 года. Идею «Тетриса» ему подсказала купленная им игра в пентамино, а само название сформировалось сложением двух слов – «тетрамино» и «теннис». Интерес к фигурам домино, тримино, тетрамино и пентамино в СССР возник благодаря книге С. В. Голомба «Полимино» (издательство «Мир», 1975 год). В частности, пентамино было настолько популярно, что в «Науке и жизни», начиная с 1970-х годов, появился постоянный раздел, посвящённый составлению фигурок из набора пентамино, а пластмассовые наборы пентамино иногда продавались в магазинах. «Тетрис» был впервые написан Алексеем Пажитновым в июне 1984 года на компьютере Электроника-60. Работая в ВЦ Академии наук СССР, он занимался проблемами искусственного интеллекта и распознавания речи, а для тестирования идей применял головоломки, в том числе и классическое пентамино. Пажитнов пытался автоматизировать укладку пентамино в заданные фигурки. Однако вычислительных мощностей оборудования того времени для вращения пентамино не хватало, приходилось отлаживать на тетрамино, что и определило название игры. Эти опыты и привели к зарождению основной идеи «Тетриса»: фигурки должны падать, а заполненные ряды – исчезать. Правила игры Тетрамино — набор односвязных фигурок, состоящих из четырех квадратов (от греч. τετρα- — четыре). Слово «односвязные» означает, что от одного квадрата до другого можно добраться ходом ладьи. Всего таких фигур семь, если считать что две из них переходят друг в друга лишь при отражении, а не при вращении. Они являются подмножеством полимино. Рис. 1 Фигуры тетрамино: I, J, L, O, S, T, Z Каждая фигура обозначается буквой английского алфавита, на которую она похожа: I, J, L, O, S, T и Z. В случайном порядке фигуры-тетрамино падают сверху в прямоугольный стакан шириной 10 и высотой 20 клеток. В полёте игрок может поворачивать фигуру или двигать её по горизонтали. Фигурка летит, пока не наткнётся на другую фигуру либо на дно стакана. Если при этом заполнился горизонтальный ряд из 10 клеток, он пропадает, и все ряды, находящиеся выше него, сдвигаются на 1 клетку вниз. Темп игры постепенно увеличивается. Игра заканчивается, когда новая фигура не может поместиться в стакан. В задачу игрока входит не допускать заполнения стакана как можно дольше. Начисление очков 3 Существует множество разнообразных вариантов начисления очков. Они могут начисляться за убранные линии, за сброшенные фигуры, за переход на новый уровень и т. п. При начислении очков за линии их количество обычно зависит от того, сколько линий убрано за один раз. Например, в китайских версиях «Тетриса», популярных в СНГ в 90-х годах, система начисления очков обычно была такой: 1 линия — 100 очков, 2 линии — 300 очков, 3 линии — 700 очков, 4 линии — 1500 очков. То есть, чем больше линий убирается за один раз, тем больше отношение количества очков к количеству линий. Любопытно, что тетрисом во многих версиях игры также называется действие, после которого исчезает сразу 4 линии. Это можно сделать только одним способом — сбросить фигуру I в «шахту» ширины 1 и глубины как минимум 4. При начислении очков за сброшенные фигурки могут учитываться высота, на которой остановилась фигурка (например, чем ниже, тем лучше), расстояние, которое она пролетела после «сбрасывания». Как правило, количество очков, полученных за фигуры, гораздо меньше того, которое начисляется за убранные ряды. 4 Постановка задачи Разработать приложение «Тетрис», предназначенное для генерации игрового поля (стакана) и заполнения его фигурами-тетрамино. Тетрис должен: 1) Создавать игровое поле. 2) Случайным образом генерировать фигуры. 3) Позволять пользователю изменять положение фигур в пространстве путем вращения вокруг своей оси и горизонтальных сдвигов. 4) Следить за заполнением рядов и очищать те, которые полностью заполнены клетками фигур. 5) Обеспечивать игру на нескольких уровнях сложности. При повышении уровня возрастает скорость падения фигур. 6) Предоставлять удобный и интуитивно понятный интерфейс для пользователя согласно требованиям эргономичности. 5 Анализ требований к системе. Поиск аналогов На данный момент существует огромное количество различный реализаций Тетриса. Рассмотрим некоторые из них для сравнения с нашим проектом. Flash Tetris Рис. 2 Главное окно программы FlashTetris Эта реализация игры располагается по адресу: http://www.fugly.com/flash/819/flashtetris.html. Рассмотрим её достоинства и недостатки. Достоинства: возможность выбора пользователем уровня сложности, возможность изменение вида игрового поля со стандартного на полноэкранный, использование схемы “клиент-сервер” и выполнение приложения на стороне сервера. Недостатки: программа работает корректно, но, тем не менее, имеется ряд недостатков интерфейса, а именно - невозможно поставить игру в режим паузы нажатием горячей клавиши, в режиме паузы не отображаются упавшие фигуры. 6 Пошаговый тетрис v.1.0.4.1.1 Рис. 3 Главное окно программы Пошаговый тетрис v.1.0.4.1.1 Эта реализация тетриса написана на языке C++. Рассмотрим её достоинства и недостатки. Достоинства: эта программа порадует любителей пошаговых стратегий. Она представляет процесс падения фигуры как совокупность шагов; на одном шаге можно поворачивать фигуру, сдвигать её вправо или влево и, наконец, опускать на одну клетку вниз. Так же эта программа позволяет выбирать уровень сложности и скорость, изменять внешние параметры фигуры. Недостатки: пользовательский интерфейс неудобен и не является интуитивно понятным; управление фигурами производится исключительно с помощью мыши. К программе прилагается развернутая справка, но не предусмотрен её вызов непосредственно из окна приложения. 7 Квадрапасел Рис. 4 Главное окно программы Квадрапасел Эта версия тетриса входит в состав GNOME Games. Достоинства: дружелюбный пользовательский интерфейс. Недостатки: нельзя поставить игру на паузу, используя клавиатуру. 8 Диаграмма вариантов использования(Use case диаграмма) Рис. 5 Диаграмма вариантов использования 9 Аппаратные и программные требования. Минимальные системные требования: Процессор класса Intel Pentium IV с тактовой частотой 2.0 Ггц или выше. Оперативная память не менее 256мб Операционная система Windows XP (SP2) или современнее NET. Framework 3.5 10 Архитектура ПО. Структурная схема приложения. Рис. 6 Структурная схема приложения 11 Интерфейс Главное окно: Рис. 7 Главное окно приложения При нажатии на кнопку File появляется меню, в котором можно выбрать три действия: - Start - начать игру; 12 - Pause – поставить игру на паузу. Это действие может так же выполняться нажатием пробела. Для того чтобы снова запустить игру, нужно нажать Enter – или Start. - Exit – осуществляет выход из приложения. При нажатии кнопки Help появляется диалоговое окно, содержащее информацию о версии игры и её разработчиках. Главное окно в процессе игры: Рис. 8 Главное окно в процессе игры 13 Реализация Схема классов Диаграмма классов Рис. 9 Диаграмма классов Пояснения к диаграмме классов. Описание классов. Класс Glass, наследованный от Form, предназначен для рисования на его поверхности стакана. Класс Field отвечает за визуализацию сетки кроссворда. Он содержит в себе двумерную матрицу объектов класса Cell. Cell содержит прямоугольник, который может закрашиваться определенным цветом, и обладает свойством заполненности. Класс Figure является родителем для группы классов, отвечающих за каждую конкретную фигуру. Фигуры имеют двумерную матрицу 4x4, заполненную нулями и единицами. Пример матрицы (фигура J) Matrix = new int[4,4]{ {0, {0, {1, {0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, 0}, 0}, 0} }; Класс Program определяет точку входа программы. 14 Разработчики Богоявленская Юлия – руководитель проекта, старший программист. Колиух Кирилл – дизайнер, программист. Юшин Евгений – тестировщик, программист-отладчик. 15