Программирование игры "Тетрис" - Курсовая работа

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

Скачать работу Скачать уникальную работу

Чтобы скачать работу, Вы должны пройти проверку:


Аннотация к работе
Абстрактный класс - это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. После установленных настроек пользователь должен дать соглашение, что скорость выбрана, начав игру. Так как блоки разной формы, но функционал у них повторяется, следует использовать наследование от одного общего предка «блок», обладающим методами перемещения по горизонтали, падению вниз на 1 шаг, прорисовки и признака остановки падения. При запуске программы пользователь видит главную форму программы, которая содержит меню выбора скорости, кнопку Начать, номер линии, которую нужно убрать и кнопку Убрать линию. Выбрав желаемую скорость, пользователь нажимает на кнопку Начать и игра начинается (появляется первый блок, начинается движение), запускается счетчик очков.В результате проделанной работы была создана программа, предоставляющая следующие возможности: 1. развивать у пользователя сноровку и вниманиеОсновные структурные части программы: Модуль Pole.cs using System.Collections.Generic; using System.Drawing; using System.Text; Модуль Block.

Введение
Одним из трех «китов», на котором основывается объектно-ориентированное программирование, является наследование. Это механизм, позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. То есть, если существует несколько классов с похожими членами, методами ? целесообразно наследовать эти классы от общего предка (родительского класса). Наследование обычно удобно в использовании, а в некоторых случаях ? необходимо.

Многие языки программирования являются объектно-ориентированным. В них прослеживается явная иерархия (последовательность наследования) от одного класса. Например, в C# ? object, а в Delphi ? TOBJECT.

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

Реализовать программу, позволяющую: 1. развивать у пользователя сноровку и внимание

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

3. Анализ задачи

Решение данной задачи связано с написанием программы, которая позволяет пользователю играть в графическом режиме в игру с названием «тетрис».

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

Определившись с пользовательским функционалом и отображающим его интерфейсом, нужно рассмотреть внутреннее представление игрового процесса. Игра представляет собой появление блоков различной формы в верхней части игрового поля. После чего происходит движение блока вниз под действием силы тяжести до встречи с первым препятствием ? другим блоком или нижней границей поля. Далее появляется другой блок, и действие с ним повторяется. Целью игры является набор максимального числа очков. Условие проигрыша ? выход блока за верхнюю границу поля в связи с отсутствием места для опускания. Для реализации нам необходимы классы «блоки». Так как блоки разной формы, но функционал у них повторяется, следует использовать наследование от одного общего предка «блок», обладающим методами перемещения по горизонтали, падению вниз на 1 шаг, прорисовки и признака остановки падения. Также необходимо само игровое поле. Скорее всего, будет использоваться массив, хранящий информацию о занятости клетки игрового поля. Поле следует также определить как класс, так как для него нужны будут методы такие, как: запись остановившегося блока, очищение полностью заполненного ряда, прорисовка заполненных клеток.

4. Средства реализации игра тетрис программа интерфейс

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

5. Требования к аппаратному и программному обеспечению

В качестве аппаратной среды используется ПК типа IBM PC.

Системные требования: · Компьютер Pentium 200 МГЦ

· Оперативная память 32 RAM

· Видеокарта 800х600

· Операционная система Microsoft Windows 98/ME/2000/XP/Vista/7

· Клавиатура

· Мышь

· Размеры свободного дискового пространства 200 кб

6. Интерфейс пользователя

При запуске программы пользователь видит главную форму программы, которая содержит меню выбора скорости, кнопку Начать, номер линии, которую нужно убрать и кнопку Убрать линию. Также присутствует поле, содержащее подсказки по управлению и счетчик очков (рис. 1):

Рис. 1. Главная форма программы

Выбрав желаемую скорость, пользователь нажимает на кнопку Начать и игра начинается (появляется первый блок, начинается движение), запускается счетчик очков. За каждый промежуток времени дается 1 очко (рис. 2):

Рис. 2. Начало игры

При остановке падения фигуры появляется другая фигура и начинает падать. Можно нажать кнопку Стоп (рис. 2) и тогда программа приостановится, счетчик очков, движение фигур прекратятся, название кнопки изменится на Начать, и пользователь сможет изменить скорость или просто передохнуть (рис. 3):

Рис. 3. Приостановка программы

Когда блоки составляют полную линию, у пользователя появляется возможность убрать линию нажатием на кнопку Убрать линию и заработать дополнительные очки. Для этого надо выбрать номер убираемой строки и нажать на кнопку. Если указанная линия полная, то она исчезнет и очки увеличатся, иначе ничего не произойдет (рис. 4):

Рис. 4. Нажатие на кнопку Убрать линию

За горизонтальное перемещение влево/вправо отвечают кнопки «ф»/«в» соответственно. А за поворот фигуры ? кнопка «ц» (рис. 5):

Рис. 5. Поворот и перемещение фигуры влево

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

Рис. 6. Окончание игры

После чего можно начать игру заново нажатием кнопки Начать.

7. Реализация

Описание данных

В программе описаны следующие типы: class Block - //класс «Блок», родитель всех фигур

{ public const int l = 15; //сторона квадрата из которых состоят фигуры protected Point Koor; //координаты левого верхнего угла фигуры public Point[] smes; //массив смещений квадратов от левого угла protected bool stop = false; //признак остановки

} class z1 : Block //1 фигура, наследуется от «Блок»’а { bool pov = true; //положение фигуры (2 положения)

} class z2 : Block //2 фигура, наследуется от «Блок»’а { bool pov = true; //положение фигуры (2 положения)

} class shpala : Block //3 фигура, наследуется от «Блок»’а { bool pov = true; //положение фигуры (2 положения)

} class g1 : Block //4 фигура, наследуется от «Блок»’а { int pov=0; //положение фигуры (4 положения)

} class g2 : Block //5 фигура, наследуется от «Блок»’а { int pov=0; //положение фигуры (4 положения)

} class kub:Block //6 фигура, наследуется от «Блок»’а { } class Pole //игровое поле, в котором движутся фигуры

{ protected bool[][] pole; //массив, показывающий занята клетка или нет protected int X; //горизонтальные размеры поля protected int Y; //вертикальные размеры поля

}

Используются следующие переменные: const int st = 345; //ширина поля, отведенного под прорисовку int points = 0; //количество очков

Random rnd = new Random(); //случайные числа

Block B = new shpala(150,-15); //фигура (начинается с прямой линии)

Pole pole = new Pole(20, 25); //игровое поле

Структура программы

Рис. 7. Структура программы

Процедуры private void Ticker (object sender, EVENTARGS e) ? основная процедура приложения. Выполняется через каждый интервал таймера. Осуществляет запуск других процедур, двигающих, записывающих и прорисовывающих процедур. Алгоритм работы процедуры указан на схеме в границах Начало игры - Игра закончена (рис. 8):

Рис. 8. Алгоритм программы private void BTNSTART_KEYPRESS(object sender, KEYPRESSEVENTARGS e) ? процедура, осуществляющая для пользователя управление блоком в программе. private void BTNSTART_Click(object sender, EVENTARGS e) ? процедура, устанавливающая скорость падения блоков (интервал таймера)

Класс «Поле» имеет методы-процедуры: public bool Zanyato(int x, int y, int l) ? функция, определяющая, занята ли ячейка поля, с данными координатами. public Image Print() ? процедура, прорисовывающая поле на форме public void Gracia(ref int point, int n) ? процедура, убирающая полную строку с номером n и начисляющая 1000 очков к point

Класс «Блок», а вместе с ним и все фигуры-потомки содержат: public Image Draw(Image Img) ? рисует фигуру public Image Del(Image Img) ? стирает фигуру public void shag(Pole p) ? опускает фигуру в поле на 1 шаг public void left(Pole p) ? совершает 1 шаг влево public void right(Pole p) ? совершает 1 шаг вправо public virtual bool Is_V(int len) ? определяет возможность опускаться public virtual void povorot()? совершает поворот фигуры вокруг своей оси

8. Тестирование

Первый подводный камень ожидает еще до запуска игры. Это выбор скорости. Так как поле компонента TEXTBOX содержит строку, а далеко не каждая строка является числом, то при переводе строки в число может возникнуть ошибка несоответствия типов данных. Поэтому пользователь лишается возможности вводить в поле TEXTBOX’а какие-либо символы, он может только выбрать (рис. 9):

Рис. 9. Выбор скорости

Аналогичная ситуация может произойти и с выбором убираемой линии. Предотвращение ошибки аналогичное ? выбор номера линии из списка (рис. 10).

Рис. 10. Выбор убираемой линии

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

Рис. 11. Предотвращение вывода фигуры из игрового поля

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

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

Список литературы
1. Полный справочник по С#. / Г. Шилдт/ Пер. с англ. - М. : Издательский дом "Вильяме", 2010. - 752 с. : ил. - Парал. тит. англ.

2. Beginning C# / Karl! Watson, Marco Bellinaso, Ollie Comes, David Espinosa / Издательство "Лори", 2009. - 864 с.

3. Программирование на языке C#. / Фаронов В. /- Спб.: Питер. 2007. - 240 с.

4. Visual С# 2008: базовый курс. / Уотсон, Карл и, Нейгел, Кристиан, Педерсен / Пер. с англ. - М. : ООО "И.Д. Вильяме", 2011. - 1216 с.

Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность
своей работы


Новые загруженные работы

Дисциплины научных работ





Хотите, перезвоним вам?