Постановка задачи.
Целью данного курсового проекта является закрепление пройденного материала по дисциплине «Языки и методы программирования», которое осуществляется посредством создания своей версии программного продукта «Ping-Pong», созданного для развлечения и совершенствования реакции игроков.
Игровое поле представлено квадратным окном приложения, размерами 410х330. Игра рассчитана на двух игроков, один из которых управляет зелёной платформой, другой управляет синей платформой. Задача каждого игрока — не пропустить шар в свою сторону, а отбить его платформой. Игра не имеет конца, игроки сами решают, когда закончить. Счётчик показывает разницу между пропущенными шарами. Главное цель игры — заработать больше очков разницы.
Выбор инструментов.
В качестве инструмента для реализации поставленной задачи было решено использовать среду разработки Qt Creator. Данная среда разработки значительно упрощает создание приложения с использованием фреймворка Qt и имеет удобный интерфейс. Причиной выбора также послужили доступность и мощь данного продукта.
|
|
Описание программы.
Основой программы являются три класса: class Dialog, class MainWindow и class Gameplay. class Dialog описывает работу меню и текста, class MainWindow создаёт объекты игры (платформы, шар, игровой поле), class Gameplay описывает взаимодействие объектов, созданных в class MainWindow.
Шар перемещается по полю при помощи функции moveBy, движение платформ определяется аналогично такой же функцией. Только у платформ значение координаты у всегда равно 0. Причём всегда выполняются условия для объектов, чтобы они не вылетели за пределы игрового поля — с помощью функций boundingRect, отвечающая за границы объектов, и sceneRect, отвечающая за границы игрового поля.
Управление платформами осуществляется функцией eventFilter.
За скорость движения платформ и шара отвечает таймер Timer. А это значит, что скорость всех объектов одинаковая.
За обработку столкновений отвечает функция collidesWithItem. За добавление объектов на сцене (игровое поле) отвечает addItem, а за их позицию на игровом поле — setPos.
Класс Gameplay наследуется от класса QGraphicsItem и использует его виртуальные функции: collidesWithItem для реализации столкновений, и boundingRect для определения внешней границы объекта. Так же в классе объявлена функция eventFilter — функция движения объектов.
Класс MainWindow использует функции класса QGraphicsScene такие как addItem, sceneRect. Используется функция класса QPen: setBrush — заливает объект цветом.
Платформы и шар создаются с помощью стандартных графических элементов наиболее общих фигур QGraphicsRectItem и QGraphicsEllipseItem соответственно.
Функция int main содержит в себе переменные классов QApplication и Dialog. Для отображения всех объектов класса Dialog мы используем функцию show, унаследованную от QWidget. Переменная класса QApplication используется для создания окна приложения.