Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2014, 08:33   #1
goshek
Пользователь
 
Регистрация: 07.01.2014
Сообщений: 33
По умолчанию двигающиеся кнопки

Здравствуйте, для домашнего задания создаю игру. Типа скачки, в виде лошадей кнопки. Создал форму, нарисовал три кнопки, старт и финиш. Подскажите как в мэйне вызвать эту форму? Одно из условий это задать лошадей массивом, какой тип массива использовать при объявлении, если его элементы это кнопки?

Прошу сильно не ругать, препод правда, ничего толком не объясняет, в интернете ничего путного не нашел.

Спасибо

С++

Последний раз редактировалось goshek; 09.11.2014 в 10:08.
goshek вне форума Ответить с цитированием
Старый 09.11.2014, 08:47   #2
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

А ЯП на котором вы пишите открывается только избранным?
В Delphi это может быть так
Код:
buttons : array[0..2] of TButton;
На С# так
Код:
Button [] buttons = new Button[3];
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 09.11.2014, 09:13   #3
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

goshek, вы не могли бы подробнее объяснить смысл игры?

На Qt C++
Код:
    QPushButton *buttons = new QPushButton[3];
    // ...
    delete buttons;
Я бы использовал вместо динамического массива - контейнер std::vector, чтобы не надо было освобождать память и хранил бы указатели в векторе:
Код:
std::vector<std::shared_ptr<QPushButton> > buttons( 3 );

Последний раз редактировалось Stilet; 09.11.2014 в 10:04.
8Observer8 вне форума Ответить с цитированием
Старый 09.11.2014, 10:07   #4
goshek
Пользователь
 
Регистрация: 07.01.2014
Сообщений: 33
По умолчанию

Цитата:
Сообщение от GetMax Посмотреть сообщение
А ЯП на котором вы пишите открывается только избранным?
В Delphi это может быть так
Код:
buttons : array[0..2] of TButton;
На С# так
Код:
Button [] buttons = new Button[3];
Прошу прощения, С++
goshek вне форума Ответить с цитированием
Старый 09.11.2014, 10:15   #5
goshek
Пользователь
 
Регистрация: 07.01.2014
Сообщений: 33
По умолчанию

Цитата:
Сообщение от 8Observer8 Посмотреть сообщение
goshek, вы не могли бы подробнее объяснить смысл игры?

На Qt C++
Код:
    QPushButton *buttons = new QPushButton[3];
    // ...
    delete buttons;
Я бы использовал вместо динамического массива - контейнер std::vector, чтобы не надо было освобождать память и хранил бы указатели в векторе:
Код:
std::vector<std::shared_ptr<QPushButton> > buttons( 3 );
Ну смысл игры такой, сделать игру с элементарной графикой, в роли лошадей три кнопки(самому смешно от такой графики) в роли ипподрома сама форма UI из вижуал студио. Задать кнопки-лошадей массивом это одно и требовании препода к работе.

Я создал всю эту форму, там куча кода, который вообще не сильно понятен, совсем ума не приложу, как работать с кнопками, как объектами. Да и как вызвать всю эту форму на экран через мэйн. То есть сама программа для консоли, ну и там при выборе пункта плей должна вызваться фома на экран ну и кнопки сдвинуться, каждая на рэндомное расстояние, ну и та что первая достигла финиша победила
goshek вне форума Ответить с цитированием
Старый 09.11.2014, 10:32   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
это одно и требовании препода к работе
Беги, глупецЪ. Твой препод прочно сидит на веществах!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.11.2014, 10:53   #7
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
std::vector<std::shared_ptr<QPushBu tton> > buttons( 3 );
На*ера?
Если 3 кнопки прямо очень хочется запихать в массив - сделай это так:
Код:
QPushButton* m_buttons[3];
Цитата:
Я бы использовал вместо динамического массива - контейнер std::vector, чтобы не надо было освобождать память
Если кнопки аж 3 - то память динамически выделять не обязательно, значит и освобождать не надо.
shared_ptr тут вообще ни в каком виде не нужен. Сборщик кусора Qt удалит сам твои кнопки при удалении формы. Указывай форму в качесте родительского виджета при создании кнопок.

Вектор может быть нужен если кнопки будут добавлять в рантайме, но тогда лучше использовать не вектор, а список, возможно.
rrrFer вне форума Ответить с цитированием
Старый 09.11.2014, 16:22   #8
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
QPushButton* m_buttons[3];
Думаю, имелось ввиду:
Цитата:
QPushButton m_buttons[3];
Писать контейнер вместо обычного массива это нормальная практика

Цитата:
Если кнопки аж 3 - то память динамически выделять не обязательно, значит и освобождать не надо.
А чем такой вариант хуже?
Код:
std::vector<QPushButton> buttons( 3 );
Цитата:
Указывай форму в качесте родительского виджета при создании кнопок.
Это фигня. Сколько раз забывал писать this. А ведь предупреждений не выдаётся. Можно конечно assert написать. Но зачем мучиться, если язык уже позволяет хранить в контейнере умные указатели
8Observer8 вне форума Ответить с цитированием
Старый 09.11.2014, 16:35   #9
8Observer8
Старожил
 
Регистрация: 02.01.2011
Сообщений: 3,328
По умолчанию

Цитата:
Сообщение от goshek Посмотреть сообщение
Ну смысл игры такой, сделать игру с элементарной графикой, в роли лошадей три кнопки(самому смешно от такой графики) в роли ипподрома сама форма UI из вижуал студио. Задать кнопки-лошадей массивом это одно и требовании препода к работе.

Я создал всю эту форму, там куча кода, который вообще не сильно понятен, совсем ума не приложу, как работать с кнопками, как объектами. Да и как вызвать всю эту форму на экран через мэйн. То есть сама программа для консоли, ну и там при выборе пункта плей должна вызваться фома на экран ну и кнопки сдвинуться, каждая на рэндомное расстояние, ну и та что первая достигла финиша победила
Я так понимаю у вас Widows Forms приложение. А можно использовать только Visual C++? С его GUI не знаком. На Qt можно?

В любом случае, вам для начала нужно вывести кнопку на форму программно. Создать таймер, который будет запускать какую-нибудь функцию по таймауту (то есть по истечению времени, с определённой периодичностью). В этой функции, которая запускается, например, каждые 10 мсек, нужно менять координаты кнопки, чтобы она двигалась. Когда доберётесь до этапа плавного движения кнопки, уже сами разберётесь, как создать несколько таких кнопок, и как заставить их двигаться по окружности

Последний раз редактировалось 8Observer8; 09.11.2014 в 16:49.
8Observer8 вне форума Ответить с цитированием
Старый 09.11.2014, 16:42   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
А чем такой вариант хуже?
Он избыточный, это же очевидно.
Затрудняет восприятие. Когда программист видит вектор, он скорее всего думает, что тут не обычный массив потому, что элементы могут добавляться в рантайме (размер не удалось определить до начала компиляции).
Даже тем что компилировать будет дольше - хуже.
Цитата:
Это фигня. Сколько раз забывал писать this. А ведь предупреждений не выдаётся. Можно конечно assert написать. Но зачем мучиться, если язык уже позволяет хранить в контейнере умные указатели
умные указатели работают медленнее, т.к. ведут подсчет ссылок и не только поэтому. Умные указатели реализуются через PIMPL, поэтому вместо обращения к указателю ты обращаешься к объекту который его хранит, который уже обращается к указателю. Т.е. выполняется каждый раз КАК МИНИМУМ одна лишняя операция. Подробнее про PIMPL читай у Майерса.

Цитата:
Но зачем мучиться, если язык уже позволяет хранить в контейнере умные указатели
К слову, в бусте есть shared_array. Возможно однажды он попадет в std.

Цитата:
Думаю, имелось ввиду:
Цитата:
QPushButton m_buttons[3];
Ваще имелось ввиду то, что было написано, но и так как ты написал - тоже можно вроде бы (проблем не вижу...).
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КНОПКИ surf135 Общие вопросы Delphi 2 27.05.2012 22:39
Кнопки в Qt Tema_Crazzzy Qt и кроссплатформенное программирование С/С++ 6 20.11.2010 18:30
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35