Як написати гру на Qt - Урок 1

З цього уроку розпочинається серія статей про те, як написати гру на Qt. У попередній статті було розказано про систему позиціонування графічних елементів QGraphicsItem у графічній сцені QGraphicsScene. Було намальовано трикутник і поміщено до центру графічної сцени, розміри якої були 500 на 500 пікселів. А тепер настав час цей трикутник пожвавити, а вірніше почати ним управляти.

Складемо технічне завдання уроку:

  • У вікні знаходиться графічна сцена з розмірами 500 на 500 пікселів (це вже зроблено в попередньому уроці);
  • У центрі графічної сцени знаходиться червоний трикутник (що вже зроблено минулого уроці);
  • Трикутник повинен переміщатись при натисканні клавіш зі стрілками Up, Down, Left, Right;
  • Трикутник ні виходить межі графічної сцени, тобто має бути обмежений розмірами графічної сцени.

Примітка. У цьому проекті використовується WinAPI, тому проект застосовується для використання в операційній системі Windows, а для Linux і MacOS застосуємо лише алгоритм, який використовується в даному уроці. Тому якщо Ви бажаєте написати гру під ці ОС, необхідно буде використовувати бібліотеки цих ОС для асинхронної обробки натискання клавіш.

Структура проекту

  • Triangle.pro - профайл проекту, що створюється за замовчуванням і в даному проекті не вимагає коригування;
  • main.cpp - файл, з якого стартує додаток, в даному файлі викликається widget, в якому розташовуватиметься графічна сцена з трикутником, яким ми керуватимемо;
  • widget.h - заголовний файл, що викликається віджетом з графічною сценою;
  • widget.cpp - файл вихідних кодів віджету;
  • triangle.h -заголовний файл класутрикутника, який успадкований від QGraphicsItem;
  • triangle.cpp - файл вихідних кодів класуТрикутник.

mainwindow.ui

У дизайнері інтерфейсів просто закидаємоQGraphicsView у віджет. Більше нічого не потрібне.

У цьому файлі лише оголошуємо графічну сцену, об'єкт трикутника, яким керуватимемо, а також таймер, за відліками якого буде проводитися перевірка стану клавіш клавіатури, якими ми керуватимемо трикутником на графічній сцені.

У цьому файлі проводиться ініціалізація графічної сцени та її розмірів, а також у графічній сцені відмальовуються межі поля, де переміщатиметься трикутник. Але ключовим моментом є ініціалізація таймера, з обробки сигналу від якого буде проводитися зміни стану графічної сцени, а також будуть змінюватися координати розташування трикутника при відстеженні стану клавіш клавіатури.

А ось тепер приступаємо до програмного коду, який відповідає за графічний об'єкт, яким ми керуватимемо. Клас успадковується відQObject до роботи з сигналами і слотами , і навіть відQGraphicsItem.

Саме в цьому файлі підключається заголовний файлwindows.h для роботи з функціоналом

triangle.cpp

Відмальовка трикутника взята з попереднього уроку з позиціювання графічних елементів у графічній сцені, а ось перемальовка в слоті, який оброблятиме сигнал від таймера, а також ініціалізація первинного повороту об'єкта вже є новим шматком коду.

Поворот об'єкта визначається в градусах змінноїangle і встановлюється функцієюsetRotation(), яка була успадкована відQGraphicsItem. Також для відстеженнястану кнопок клавіатури використовується функція зWinAPI, а самеGetAsyncKeyState(), яка за кодом кнопки визначає стан цієї самої кнопки. При кожному сигналі від об'єкта класу QTimer відбувається перевірка натиснутих клавіш і залежно від стану змінюється положення трикутника.

Примітка

Для того, щоб проект скомпілювався з комплектом збірки MSVC, додайте до pro файл проекту наступні рядки:

В результаті виконаної роботи ми зробили перші кроки до того, щоб написати гру. А саме навчилися керувати об'єктом, тобто нашим героєм-трикутником, з яким ми також попрацюємо в майбутніх уроках написання першої нашої гри.