l
May 6, 2017, 10:29 a.m.

Игра змейка в Qt

Помогите сделать меню для игры, что бы была кнопка паузы. И когда змейка умирает спрашивалось: начать снова или выход. Очень нужно.

untitled.rar
2
The question is asked by the articleHow to make game using Qt - Lesson 1. Control of object

Do you like it? Share on social networks!

14
Evgenii Legotckoi
  • May 6, 2017, 5:07 p.m.

Приложите рабочий проект, который скомпилируется сразу, без поиска ошибок и недостающих слотов. Ну и если на каком-то этапе уже есть рабочий вариант, когда змейка будет запускаться, то лучше именно этот вариант. Тогда можно будет о чём-то говорить, а так я скачал, запустил на компиляцию, а проект даже не собирается. Какой смысл тогда в код заглядывать? Если уж говорить о внедрении фукционала.

    l
    • May 6, 2017, 9:06 p.m.

    Не знаю, у меня работает. А что за ошибки?

      Evgenii Legotckoi
      • May 6, 2017, 10:31 p.m.

      Слот void on_listView_activated(const QModelIndex &index); объявлен, но отсутствует его реализация. А также в ui файле нет этого самого ListView . При сборке проекта начистую выдаёт ошибки слотов. У вас видимо мусор остался с последних сборок, вот якобы и работает. Если удалить build, то тот проект, что приложили не будет собираться.

        l
        • May 7, 2017, 12:17 a.m.

        Блин, а так можете сказать что нужно написать, что бы сделать паузу, я создал отдельное окно и в нем создал кнопку

          Evgenii Legotckoi
          • May 7, 2017, 2 a.m.

          Навешать слот на QShortcut (если активировать меню по нажатию кнопки) какой-нибудь кнопки и в этом слоте стопорить все игровые таймеры и показать окно, в котором меню для паузы.

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

            l
            • May 7, 2017, 11:13 a.m.

            А вот как это сделать? Я просто не совсем шарю.

              Evgenii Legotckoi
              • May 7, 2017, 11:42 a.m.

              В самом просто варианте это может выглядеть так.

              widget.h
              #ifndef WIDGET_H
              #define WIDGET_H
              
              #include <QWidget>
              #include <QTimer>
              
              namespace Ui {
              class Widget;
              }
              
              class Widget : public QWidget
              {
                  Q_OBJECT
              
              public:
                  explicit Widget(QWidget *parent = 0);
                  ~Widget();
              
              private slots:
                  // Слот для паузы
                  void pauseSlot();
              
              private:
                  Ui::Widget *ui;
                  QTimer m_gameTimer;  // Игровой таймер
              };
              
              #endif // WIDGET_H
              widget.cpp
              #include "widget.h"
              #include "ui_widget.h"
              
              #include <QShortcut>
              #include <QDialog>
              
              Widget::Widget(QWidget *parent) :
                  QWidget(parent),
                  ui(new Ui::Widget)
              {
                  ui->setupUi(this);
                  // Создаём hotkey
                  QShortcut* keyEsc = new QShortcut(this);
                  keyEsc->setKey(Qt::Key_Escape);
                  // Подключаем к этому хоткею слот
                  connect(keyEsc, &QShortcut::activated, this, &Widget::pauseSlot);
                  // Допустим имеется игровой таймер, который отвечает за тайминги в игре
                  m_gameTimer.start(1000);
              }
              
              Widget::~Widget()
              {
                  delete ui;
              }
              
              void Widget::pauseSlot()
              {
                  // Если таймер активен, то стопорим его
                  if (m_gameTimer.isActive())
                  {
                      m_gameTimer.stop();
                  }
                  // Создаём и диалог
                  QDialog menuDialog;
                  // Запускаем выполнение диалога
                  menuDialog.exec();
                  // пока диалог не закрыт выполнение кода не дойдёт до запуска таймера
                  m_gameTimer.start(1000);
              }

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

                l
                • May 7, 2017, 12:50 p.m.

                А в моем коде можно просто дописать вот это? Или что то еще надо?

                  Evgenii Legotckoi
                  • May 7, 2017, 1:08 p.m.

                  Естественно, что нужно будет что-то дописать. Это уже зависит от архитектуры самой программы. Я вам подал идею. Развейте её и внедрите в свой код.

                    l
                    • May 7, 2017, 1:13 p.m.

                    Так в том то и дело, у меня мозгов не хватает)

                      Evgenii Legotckoi
                      • May 7, 2017, 1:18 p.m.

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

                        l
                        • May 7, 2017, 1:47 p.m.

                        Частично не сам писал

                          l
                          • May 7, 2017, 1:52 p.m.

                          Посмотрите этот код, мб он у вас откроется

                            l
                            • May 7, 2017, 2:05 p.m.

                            Вот этот код я проверил на другом компе, в нем просто не загружается картинка, а так работает

                              Comments

                              Only authorized users can post comments.
                              Please, Log in or Sign up
                              • Last comments
                              • AK
                                April 1, 2025, 11:41 a.m.
                                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
                              • Evgenii Legotckoi
                                March 9, 2025, 9:02 p.m.
                                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
                              • VP
                                March 9, 2025, 4:14 p.m.
                                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
                              • ИМ
                                Nov. 22, 2024, 9:51 p.m.
                                Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                              • Evgenii Legotckoi
                                Oct. 31, 2024, 11:37 p.m.
                                Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup