Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
телекоммуникаций и информатики
Расчетно-графическая работа
Пытаева А.Г.
Проверил: Мерзлякова Е. Ю.
Новосибирск 2021
Содержание
Задание.....................................................................................................................3
Заголовочные...........................................................................................................4
Исходники................................................................................................................5
Скриншоты созданного приложения, которые иллюстрируют работу
приложения............................................................................................................10
2
Задание
1. Создать графическую сцену.
3
Заголовочные
Game.h
#ifndef GAME_H
#define GAME_H
#include <QWidget>
#include <QGraphicsScene>
#include <QLabel>
#include <QGraphicsPixmapItem>
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow// Класс главного окна
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
Ui::MainWindow *ui;
4
};
#endif // MAINWINDOW_H
Исходники
Game.cpp
#include "game.h"
#include <mainwindow.cpp>
#include <QWidget>
#include <QTransform>
#include <QTimer>
#include <QTime>
#include <QGraphicsItem>
#include <QPointF>
#include <QKeyEvent>
#include <QDebug>
#include <QMessageBox>
#include <QRectF>
setBackgroundBrush(QBrush(QColor(255,255,255),
QPixmap("background.png")));//устанавливается кисть фона сцены. загружаем фон
сцены
5
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//
(инициализируем)задаем генератор случайных чисел, чтобы потом их получать
Rand_Fox();// вызываем функцию (от 1 до 4 направлений) и записываем в
переменную R-переменная направления движения лисы
void Game::makeWall()
{
//создаем координаты стен
// 1-ая координата - начальное положение по x
// 2-ая координата - начальное положение по y
// 3-ая координата - ширина прямоугольника
// 4-ая координата - длина прямоугольника
float wall [20] [4] = {
{32,80,128,16},
{32,0,672,10},
{32,0,16,96},
{704,0,16,96},
{448, 80, 256, 16},
{448, 80, 16, 128},
{160, 80, 16, 128},
{16, 208, 160, 16},
{448, 208, 160, 16},
{16, 208, 16, 396},
{16, 592, 608, 16},
{608, 208, 16, 396},
{128, 208, 16, 192},
{128, 464, 16, 54},
{128, 464, 192, 16},
{320, 464, 16, 144},
{352, 208, 16, 112},
{256, 208, 96, 16},
{256, 208, 16, 64},
{480, 208, 16, 300}
};
QBrush brush(QColor(255,255,255),QPixmap("wall.png"));//устанавливается
кисть для рисования прямоугольников и добавление картинки стен
QPen pen(Qt::NoPen);//устанавливается кисть для рисования прямоугольников
и они добавляются на сцену
for (int i = 0; i<20; i++){//20-размер массива, количество прохода цикла
//создаем стену
QGraphicsItem * item =
addRect(QRectF(wall[i][0], wall[i][1], wall[i][2], wall[i]
[3]), pen, brush);
item->setData(0, "Wall");//каждому прямоугольнику
устанавливается метка wall
}
6
}
7
void Game::FoxGo()//функция перемещения врага в заданном направлении R (R-
переменная направления движения лисы)
{
// фрагмент кода, осуществляющий перемещение лисы
QPointF np;
np.setX(0);
np.setY(0);
// определяем направление
switch(R)
{
case 1 : np.setX(-20); break;// Налево
case 2 : np.setX(20); break;// Направо
case 3 : np.setY(-20); break;// Вверх
case 4 : np.setY(20); break;// Вниз
}
QTransform tran=Fox->transform();// берем позицию врага
tran.translate(np.x(),np.y());//задаемся новой позицией врага
Fox->setTransform(tran);// ставим врага в заданную выше позицию
void Game::The_End()
{
Rabbit->hide(); // прячем игрока
QMessageBox endingMsgBox; // Создаем диалоговое окно
endingMsgBox.setWindowTitle("Ловушка"); // Задаем название диалогового
окна.
endingMsgBox.setText(tr("Вы попали в логово врага и проиграли")); //
Текст диалогового окна.
endingMsgBox.exec(); // Запускаем цикл обработки окна.
QApplication::instance()->exit(1); // Завершаем приложение с кодом 1.
}
void Game::Win(){
Rabbit->hide(); // прячем игрока
Carrot->hide();// прячем приз
QMessageBox endingMsgBox; // Создаем диалоговое окно
endingMsgBox.setWindowTitle("Выигрыш"); // Задаем название диалогового
окна.
8
endingMsgBox.setText(tr("Предмет достигнут. Вы выиграли")); // Текст
диалогового окна.
endingMsgBox.exec(); // Запускаем цикл обработки окна.
QApplication::instance()->exit(1); // Завершаем приложение с кодом 1.
}
Main.cpp
#include "mainwindow.h"
#include <QApplication>
Mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
Game *scene=new Game();//создается сцена
ui->graphicsView->setScene(scene);//на сцену помещаем
виджет(graphicsView)
}
MainWindow::~MainWindow()
{
delete ui;
}
9
Скриншоты созданного приложения, которые иллюстрируют работу
приложения
10