Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.09.2014, 13:34   #21
marenko.lilia
Форумчанин
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Адрес: Украина
Сообщений: 91
Репутация: 68
По умолчанию

Всё - разрешение получено!!!

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

8Observer8, если вы мне и поможете, не признавайтесь, что делали что-то за меня

От себя - обещаю стараться!
marenko.lilia вне форума   Ответить с цитированием
Старый 12.09.2014, 13:35   #22
marenko.lilia
Форумчанин
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Адрес: Украина
Сообщений: 91
Репутация: 68
По умолчанию

8Observer8 я вам там сообщения отправляла (личные). Прочтите, пожалуйста )
marenko.lilia вне форума   Ответить с цитированием
Старый 12.09.2014, 13:37   #23
rrrFer
Санитар
Профессионал
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,596
Репутация: 972
По умолчанию

Цитата:
Лилия, выполните моё первое задание. У меня уже есть для вас и второе и третье и т.д. Мне полезно с вами поработать по причине написания туториалов. А я пока над логикой подумаю и почитаю, как у вас тут дела идут. Вы смогли запустить программу rrrFer?
Кстати, Лилия пишет туториалы (смотри на ссылку в подписи).
rrrFer вне форума   Ответить с цитированием
Старый 12.09.2014, 14:01   #24
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Лилия, разы вы пишете туториалы, значит меня поймёте. Мне надо, чтобы выполнили следующую инструкцию и доложили, если что-то непонятно или возникли проблемы:

Установка Qt

- Скачайте и установите: "Qt 5.3.1 for Windows 32-bit (MinGW 4.8.2, OpenGL, 735 MB)" отсюда: http://qt-project.org/downloads

Переключение Qt Creator'a на английский

- Если у Вас Qt Creator на русском, то я рекомендовал бы переключиться на английский. Для этого выбираем в меню "Инструменты" -> "Параметры..."

- В окне "Параметры" слева выбираем "Среда" -> открываем вкладку "Основные" -> выбираем в выпадающем списке "English" -> нажимаем кнопку "OK" -> перезапускаем Qt Creator

Создание нового проекта

- В меню Qt Creator'а выбираем "File" -> "New File or Project..."

- В разделе "Projects" выбираем "Applications" -> во второй колонке выбираем "Qt Widgets Application" -> нажимаем кнопку "Choose..."

- В поле "Name" пишем: Simple -> нажимаем кнопку "Browse..." и указываем путь, где будет создан наш проект -> нажимаем два раза кнопку "Next" и выбираем в списке "Base class" значение "QDialog" -> нажимаем последовательно: два раза "Next", "Finish"

- В разделе "Projects" кликаем правой кнопкой мыши по имени проекта и выбираем "Add new..." -> выбираем "C++" -> выбираем "C++ Class" -> нажимаем кнопку "Choose..."

- Вводим имя класса Scene ( соответствующие файлы должны называться: Scene.h и Scene.cpp ) -> нажимаем кнопку "Finish"

- Копируем содержимое файлов (лучше стараться набирать самому, так легче понять)

Scene.h
Код:
#ifndef SCENE_H
#define SCENE_H

#include <QGLWidget>

class Scene : public QGLWidget
{
public:
    Scene( QWidget *parent = 0 );

private:
    void initializeGL();
    void paintGL();
};

#endif // SCENE_H
Scene.cpp
Код:
#include "Scene.h"

Scene::Scene( QWidget *parent ) :
    QGLWidget( parent )
{
}

void Scene::initializeGL()
{
    glClearColor( 0.0f, 0.0f, 1.0f, 1.0f );
}

void Scene::paintGL()
{
    // Clear the window with current clearing color
    glClear( GL_COLOR_BUFFER_BIT );
}
- Дважды кликаем по файлу "Simple.pro" и дописываем opengl, вот так:
Код:
QT    += core gui opengl
- Дважды кликаем по файлу "Dialog.ui" -> с левой панели перетаскиваем элемент "Widget" на форму

- Один раз кликаем на форму, чтобы выделить -> на панели инструментов (сверху) нажимаем кнопку с тремя горизонтальными голубыми чертами "Lay Out Vertically" (или Ctrl+L)

- Кликаем правой кнопкой мыши по элементу "Widget" -> выбираем "Promote to ..."

- В поле "Promoted class name" пишем: Scene -> нажимаем кнопку "Add" -> нажимаем кнопку "Promote"

- Запускаем приложение, для этого нажимаем зелёный треугольник слева внизу

Последний раз редактировалось 8Observer8; 12.09.2014 в 14:07.
8Observer8 вне форума   Ответить с цитированием
Старый 12.09.2014, 19:00   #25
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

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

В оконном приложении фигуры лучше делать из треугольников:



Логика такая:

- Каждый объект-фигура будет хранить координаты вершин своих треугольников
- Сцена перерисовывается с новыми координатами падающего объекта. Старые объекты перерисовываются со старыми координатами
- Координату Y, падающего объекта, уменьшаем на единицу каждые 33 милисекунды и тут же обновляется сцена (1000мс/33мс=30 раз в секунду, как раз человек воспринимает 24, поэтому будет плавность движения)
- Координату X - меняем с помощью стрелок

Последний раз редактировалось 8Observer8; 12.09.2014 в 19:04.
8Observer8 вне форума   Ответить с цитированием
Старый 12.09.2014, 20:02   #26
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,893
Репутация: 1915
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
Не представляю, как можно отделить логику игры от отрисовки.
Тогда лучше всего отложить кодирование и сначала малость подумать...
waleri вне форума   Ответить с цитированием
Старый 12.09.2014, 20:04   #27
rrrFer
Санитар
Профессионал
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,596
Репутация: 972
По умолчанию

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

Прочитал то, что ты пишешь. Мне вот интересно, как ты юнит-тесты к этому напишешь? (надо покрыть тестами все).

Цитата:
- Сцена перерисовывается с новыми координатами падающего объекта. Старые объекты перерисовываются со старыми координатами
В кьют старые объекты не перерисовываются автоматически. Это и виджетов касается и объектов графической сцены. Иначе бы все лагало всегда.

Цитата:
- Каждый объект-фигура будет хранить координаты вершин своих треугольников
в предметной области задачи никаких треугольников не было короче. Откуда ты их взял?
rrrFer вне форума   Ответить с цитированием
Старый 12.09.2014, 22:00   #28
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Цитата:
Сообщение от rrrFer Посмотреть сообщение
В кьют старые объекты не перерисовываются автоматически. Это и виджетов касается и объектов графической сцены. Иначе бы все лагало всегда.
Я говорю не о Qt, а о OpenGL

Цитата:
Сообщение от rrrFer Посмотреть сообщение
в предметной области задачи никаких треугольников не было короче. Откуда ты их взял?
Я лучше код напишу, а потом поговорим.
8Observer8 вне форума   Ответить с цитированием
Старый 12.09.2014, 22:06   #29
marenko.lilia
Форумчанин
 
Аватар для marenko.lilia
 
Регистрация: 25.12.2013
Адрес: Украина
Сообщений: 91
Репутация: 68
По умолчанию

waleri, Ваши советы точно помогут нашему делу )))

"Тогда лучше всего отложить кодирование и сначала малость подумать..."

"Так сделайте все как следует и получите тетрис, который будет и консольным и оконным."

ну чувствуется, что Вы большой специалист, но не выдаете себя
marenko.lilia вне форума   Ответить с цитированием
Старый 12.09.2014, 22:42   #30
8Observer8
Профессионал
 
Регистрация: 02.01.2011
Сообщений: 3,238
Репутация: 915
По умолчанию

Можно и прямоугольниками рисовать:

Код:
void Scene::paintGL()
{
    //...

    // Draw a filled rectangle with current color
    glRectf( x, y, x + rsize, y - rsize );
}

Последний раз редактировалось 8Observer8; 12.09.2014 в 22:44.
8Observer8 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C тетрис Цукер Помощь студентам 0 21.11.2011 22:53
Тетрис на си фыф123 Помощь студентам 1 22.06.2011 10:48
Тетрис Александр123456 Общие вопросы C/C++ 1 03.12.2010 00:15
Тетрис k1r1ch Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 02.01.2010 13:20
массив и тетрис sid Паскаль 2 04.04.2007 14:41


15:05.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.