Игра "Тетрис"

Разработка программы для игры "Тетрис" на языке С, которая осуществляет вывод на экран случайным образом падение различных фигур. Описание правил игры. Разработка интерфейса пользователя и программы. Описание кода. Тестирование программы. Игровой цикл.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 08.10.2016
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

КОМПЬЮТЕРНАЯ АКАДЕМИЯ «ШАГ»

Курсовая работа по дисциплине:

Программирование на языке С

По теме:

Игра «Тетрис»

Группа ПВ 25-15, полустационар

Преподаватель

Захарова Эмма Владимировна

Студент

Колодезный Алексей Иванович

Введение

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

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

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

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

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

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

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

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

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

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

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

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

1. Правила и описание

программа тетрис интерфейс тестирование

Случайные фигурки тетрамино падают сверху в прямоугольный стакан шириной 18 и высотой 19 клеток. В полёте игрок может поворачивать фигурку на 90° и двигать её по горизонтали. Также можно «сбрасывать» фигурку, то есть ускорять её падение, когда уже решено, куда фигурка должна упасть. Фигурка летит до тех пор, пока не наткнётся на другую фигурку либо на дно стакана. Если при этом заполнился горизонтальный ряд, он пропадает, а всё что выше него, опускается на одну клетку. Дополнительно показывается фигурка, которая будет следовать после текущей -- это подсказка, которая позволяет планировать игроку действия. Темп игры постепенно увеличивается (-30мсек). Игра заканчивается, когда новая фигурка не может поместиться в стакан. Игрок получает очки за каждый заполненный ряд, поэтому его задача -- заполнять ряды, не заполняя сам стакан (по вертикали) как можно дольше, чтобы таким образом получить как можно больше очков.

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

При начислении очков за линии количество очков обычно зависит от того, сколько линий убрано за один раз. Например, в китайских «Тетрисах», популярных в СНГ в 1990-х годах, начисление очков обычно было таким:

ь 1 линия -- 10 очков;

ь 2 линии -- 30 очков;

ь 3 линии -- 60 очков;

ь 4 линии (то есть, сделать Тетрис) -- 100 очков.

То есть, чем больше линий убирается за один раз, тем больше отношение количества очков к количеству линий. Любопытно, что тетрисом во многих версиях игры также называется действие, после которого исчезает сразу 4 линии. Это можно сделать только одним способом -- сбросить «палку» (фигурку, в которой все клетки расположены на одной линии) в «шахту» ширины 1 и глубины как минимум 4.

2. Разработка интерфейса пользователя и программы

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

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

ь Цветовая схема не должна раздражать человека (Рис. 2.1, 3.2а).

ь Сложность плавно-нарастающая.

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

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

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

Третий подразумевает плавный переход - небольшой интервал повышения скорости ускорение на 30мс за каждые набранные 100 баллов. Их можно собрать за одно удаление набрав «Тетрис» - 4 линии (см. Описание и правила).

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

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

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

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

Рисунок 2.1 Интерфейс игры «Тетрис».

3. Описание кода

При запуске кода "Тетрис" происходит объявления массива «стакан» и массива из двумерных массивов, с последующим их заполнением значениями 1 и 0, 1- обозначение фигур, 0 - заполнение пустоты (Рис.3. 1).

Рисунок 3.1. Объявление массивов «стакан» и «набор фигур».

Игра начинается с активного меню с заданными размерами окна: Игра новичок, мастер, управление и выход (Рис. 3.2, 3.2а).

Рисунок 3.2. Вход в меню с main.

Рисунок 3.2а. Старт кода с активного меню с заданными размерами окна.

Активное меню состоит из титульной строки, цикла и набора условий, зависящих от нажатия указанных клавиш изображенных на рис. 3.2а внизу и сама функция активного меню, объявленная ранее, меняющая цвет выбранной позиции (Рис. 3.4). При нажатии клавиш «Вверх» - «Вниз», меняется цвет выбранной позиции путем очистки экрана и вывода титульной строки и активного меню с изменённой соответствующей позицией, а для входа нажимаем «Enter». При нажатии «Enter», входим в условие выбора при котором срабатывает позиция с соответствующим счётчиком «р». При входе в игру задается стартовая скорость и координаты вывода на экран, очищается экран от меню и входим в функцию игры с заданными параметрами (Рис. 3.3 и 3.3а).

Рисунок 3.3. Функция меню.

Рисунок 3.3а. Функция изменяющая цвет позиции при её выборе.

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

Рисунок 3.4. Игровой цикл.

Если такие имеются, то происходит их очистка и сдвиг всех строк, находящихся выше вниз и начисление очков (Рис. 3.5). Далее происходит новый выход ранее созданной случайным выбором фигуры и повторение алгоритма. Если же заполненных строк нет, то происходит проверка на свободное место в месте выхода фигуры. Если третья строка свободна, то происходит выбор фигуры и выполнение алгоритма цикла. При заполненном «стакане» происходит остановка игры и вывод результатов игры (Рис. 3.5, 3.10).

Рисунок 3.5. Проверка на заполненную линию, удаление и смещение, начисление очков.

При нажатии клавиши «Space» игровой цикл останавливается, очищается экран, выводиться строка из набора символов - «пауза» до нажатия любой клавиши для продолжения через функцию _getch(); (Рис. 3.6).

Рисунок 3.6. Режим паузы.

В игре используется весьма разные функции, которые требуют соответствующих библиотек (Рис. 3.7).

Рисунок 3.7. Использованные библиотеки.

Частью стандартной библиотеки C++ является библиотека iostream - объектно-ориентированная иерархия классов, где используется и множественное, и виртуальное наследование. В ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Кроме того, разработчики классов могут расширять эту библиотеку для чтения и записи новых типов данных. Для игры использован объект «cout» c перегружаемым оператором «<<». Также для ввода-вывода использована библиотека #include <stdio.h> для работы функции printf("Колличество очков: %i", score), в которой используется в кавычках выводимый текст и %i - десятичное число целого типа со знаком, которое находиться за кавычками и запятой в переменной score.

Библиотека stdlib.h содержит в себе функции, занимающиеся выделением памяти, контроль процесса выполнения программы, преобразования типов и другие. В нашем случае это генерация случайного числа, реализована установкой начального значения srand и псевдослучайного rand в процессе. Пример в нашем коде (Рис. 3.8):

Рисунок 3.8. Случайный выбор и создание фигуры.

Библиотека Сonio.h (от англ. console input-output -- консольный ввод-вывод) -- заголовочный файл для создания текстового интерфейса пользователя. В нашем случае это члены-функции:

ь kbhit() определяет, было ли нажатие клавиш клавиатуры;

ь getch() считывает символ напрямую из консоли без использования буфера и echo-вывода.

Пример из кода использования для режима «пауза» и ввод данных с клавиатуры в игровой цикл и меню (Рис. 3.3, 3.4, 3.9):

Рисунок 3.9. Использование функций kbhit() и getch().

Библиотека string -- класс с методами и переменными для организации работы со строками. Я её использовал для вывода «Титульной» надписи, надписей «Пауза» и «Вы проиграли!» (Рис. 3.2а, 3.6, 3.10):

ь const char* GAME_TITLE;

ь const char* Paused;

ь const char* Control;

ь const char* Game_Over.

Рисунок 3.10. Использование типа const_pointer из библиотеки string.

Заголовочный файл стандартной библиотеки locale, который используется для задач, связанных с локализацией. В коде он использован для работы макроса LC_ALL для корректного вывода русского языка в консоли (Рис. 3.8).

Библиотека Windows.h необходима для работы функции SetColor() и работает совместно с iostream и conio.h. Придаем краски в консоль (Рис. 2, 3.2, 3.3, 3.3а, 3.6, 3.10 и 3.11).

Рисунок 3.11. Объявление функции SetColor().

Заголовочный файл time.h, содержащий типы и функции для работы с датой и временем. Для игры использовал функции:

ь clock() которое возвращает время, измеряемое процессором в тактах от начала выполнения программы, или (?1), если оно не известно. Пересчет этого времени в секунды выполняется по формуле: clock() / CLOCKS_PER_SEC;

ь time_t которая возвращает текущее календарное время или ?1, если это время не известно. Если указатель tp не равен NULL, то возвращаемое значение записывается также и в *tp.

В игре происходит задержка цикла на заданное количество мс. Это дает возможность регулировать сложность игры - скорость падения фигуры (Рис. 3.4).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вывод

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

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

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

1. Брайан Керниган, Деннис Ритчи: Язык программирования С. Второе издание. - Москва, Санкт-Петербург-Киев. 2009г. 289стр.

2. Компьютерная академия «Шаг» сборник лекций: Программирование на языке С.

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

4. Свободная Энциклопедия «Википедия» [электронный ресурс]: https://ru.wikipedia.org/wiki/C%2B%2B.

5. Основы программирования на языках Си и C++ для начинающих [электронный ресурс]: http://cppstudio.com/.

6. HelloWorld [электронный ресурс]: http://www.helloworld.ru.

7. Онлайн справочник программиста на C и C++ [электронный ресурс]: http://www.c-cpp.ru.

8. Электронная библиотека «ScanLibs» [электронный ресурс]: http://scanlibs.com/.

9. Портал о программировании Code-Live [электронный ресурс]: https://code-live.ru.

10. Сайт о программировании METANIT [электронный ресурс]: http://metanit.com.

Размещено на Allbest.ru

...

Подобные документы

  • Проектирование приложения "Тетрис", осуществляющего вывод различных фигур на экран случайным образом и их падение. Описание логической структуры программы, ее тестирование. Требования к аппаратной и программной средам. Функции для работы с приложением.

    курсовая работа [343,7 K], добавлен 20.01.2015

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Написание программы, которая позволяет пользователю играть в графическом режиме в игру "Тетрис". Разработка функционала с возможностью выбора скорости. Обзор требований к аппаратному и программному обеспечению. Интерфейс, описание данных и тестирование.

    курсовая работа [506,3 K], добавлен 17.12.2014

  • Разработка игровой программы "Frag the monster", которая осуществляет вывод на экран случайным образом врагов, основного игрока и дополнительных объектов (оружия). Обоснование выбора языка программирования - С++. Интерфейс и принцип работы программы.

    курсовая работа [3,2 M], добавлен 27.12.2011

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

    курсовая работа [87,0 K], добавлен 02.02.2013

  • Создание игровой системы "Тетрис": количество игр, режимы сложности, интерфейс пользователя, игровая статистика, обработка исключений. Структура входных и выходных данных. Диаграммы и описание классов. Блок-схема алгоритма программы, результаты ее работы.

    курсовая работа [1,9 M], добавлен 13.06.2012

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Разработка эскизного и технического проекта программы игры "Собери картинку". Назначение и область применения, основные технические характеристики. Разработка рабочего проекта, разработка и спецификация программы игры. Описание и тестирование программы.

    курсовая работа [22,6 K], добавлен 10.06.2010

  • Описание алгоритма хода ЭВМ в режиме "пользователь-компьютер" в игре "Морской бой". Описание совокупности классов, их полей и методов. Разработка интерфейса и руководства пользователя по проведению игры. Листинг программы, написанной на языке Java.

    курсовая работа [645,0 K], добавлен 26.03.2014

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

  • Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

    курсовая работа [572,7 K], добавлен 14.07.2012

  • Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.

    курсовая работа [821,5 K], добавлен 13.02.2012

  • Применение программного обеспечения для разработки игры "Быки и коровы". Описание алгоритма и интерфейса пользователя программы. Назначение и область применения и описание возможностей программы. Рассмотрение списка сообщений об ошибках программы.

    курсовая работа [799,2 K], добавлен 26.04.2021

  • Основные этапы разработки игровой системы "Тетрис", создание игр "Стройка" и "Гонки" на основе тетриса в трех режимах сложности: сложный, средний, легкий. Особенности контейнеров, итераторов, обработка исключений, описание основных классов и алгоритмов.

    курсовая работа [1,4 M], добавлен 22.06.2012

  • Разработка программы на языке Pascal. Описание переменных. Действия, которые должна выполнить программа согласно выбранного алгоритма. Детализация графической части программы. Листинг и тестирование программы. Вывод массива данных на экран монитора.

    контрольная работа [360,4 K], добавлен 13.06.2012

  • Разработка программы игры в крестики-нолики. Примеры игровой ситуации на игровом поле. Описание входных и выходных данных, переменных и функций программы. Реализация алгоритма работы программы на языке C++. Текст программы и примеры ее выполнения.

    курсовая работа [352,8 K], добавлен 14.04.2011

  • Знакомство с интерфейсом пользователя и сценарием использования программы игры в крестики и нолики. Функциональные и нефункциональные требования для персонального компьютера. Исключительные ситуации и реакция программы. Пример кода игры и комментарии.

    курсовая работа [236,5 K], добавлен 27.01.2014

  • Разработка Windows-приложения, представляющего собой компьютерную игру "Кости". Организация входных и выходных данных. Минимальные требования. Выбор состава технических и программных средств. Спецификация программы, ее описание и внедрение, тестирование.

    курсовая работа [475,8 K], добавлен 18.07.2012

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

    контрольная работа [716,7 K], добавлен 11.06.2011

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.