Разработка структур данных и алгоритмов работы программы




 

Рассмотрим три собственных класса, указанных в пункте 1.

Начнем с класса CannonField.

 

Класс наследуется также от QObject, поэтому используем макрос Q_OBJECT, чтобы избежать ошибок в работе программы. В public задаем конструктор класса, который рисует «поле битвы», а также задает значения переменных, указанных в private; задаем четыре константных функции, которые возвращают значения четырех private переменных.

 

В классе будет два типа слотов. Все слоты в public slots делаем публичными, потому что их используют не только в данном классе, но и в классе MyWidget. setAngle() и setSecAngle() устанавливают значения угла возвышения.setForce() и setSecForce()устанавливают значенияначальной скорости.Вызов слотов shoot() и SecShoot() приводит к выстрелу пушки, если снаряд еще не в воздухе.

Закрытые слоты moveShot(), moveSecShot() используются для перемещения снаряда пока он находится в воздухе, используя QTimer.Они также проверяют, не пересекся ли снаряд с целью.

 

Класс содержит четыре сигнала: два об изменении углов и два об изменении сил.

 

paintEvent() - виртуальная функция (поэтому указываем protected), которая вызывается Qt всякий раз, когда виджету нужно обновиться (т.е., нарисовать поверхность виджета).

 

Закрытые функции paintCannon(), paintShot() и paintSecShot() осуществляют отрисовку баллист и снарядов. Функция cannonRect() и SecCannonRect() возвращают ограждающий прямоугольник баллисты в координатах виджета. Сначала мы создаем прямоугольник с размерами 50 x 50, а затем передвигаем его так, чтобы его нижний левый/правый угол совпадал с нижним левым/правым углом виджета. Функции shotRect() и SecShotRect()вычисляют центральную точку снаряда и возвращает ограничивающий прямоугольник для снаряда. Далее в классе объявляются закрытые переменные.

Перейдем к классуLCDRange.

 

Как и в классе CannonField, в LCDRange используется макрос Q_OBJECT. LCDRange() - конструктор класса, value() - открытая функция для получения доступа к значению LCDRange, setValue() - слот, а valueChanged() - сигнал.setRangeдобавляет возможность установки диапазона значений LCDRange.

Также создаем указатель *slider на объект класса QSlider. Мы можем это сделать, потому что в заголовочном файле lcdrange.h указывам class QSlider.

 

Класс MyWidget содержит только лишь конструктор, который выполняет сборку всех элементов и добавление их на сам виджет.

 

 

Реализация программы

 

Данная часть представляет собой «руководство пользователя», в котором описана работа готовой системы.

 

При запуске программы появится окно (рис. 1).

 

 

Пользователи сами выбирают за какую из баллист будут играть и кто начинает первым. Пользователи могут как угодно изменять значения слайдеров (рис. 2).

 

 

Выстрел производится при нажатии кнопок «Стреляй», каждая относится к своей пушке. Реализация выстрела показана на рисунке 3.

 

При попадании появляется окно сообщение, выводящее информацию о том, кто выиграл (рис. 4).

 

 

Продолжить игру можно посредством нажатия кнопки «ОК» на окне сообщений. Выход из игры реализуется с помощью кнопки «Выход».

 

 

UML-диаграмма

 

Заключение

 

В данной курсовой работе была разработана и реализованапростейшая баллистическая игра.

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

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

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-30 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: