![]() |
|
|
![]()
|
|
| duckich |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.12.2008 Репутация: нет Всего: нет |
Здравствуйте!
Мне до мая надо сделать программу бомбермен с использованием библиотеки qt. Но не просто игру с компьютером, а сетевую игру. А я ни изучал ничего подобного. Посоветуйте книги и если у вас есть программы(игры на с++) которые поддерживают сетевой режим покажите, дабы разбираясь в командах быстрее понять как мне реализовать свою программу. Если знаете, где найти бомбермена на с++ под qt, то помогите ссылкой) Но не надо сильно сложные программы в виде примеров давать, а что-то наподобе "скелета" игры с небольшими дополнениями. Заранее благодарю! |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
хм... за месяц не имея опыта сделать игруху, да и еще сетевую - имхо слишком загнул)
Можешь посмотреть мой проект(игра в дурака по сети) по ссылке здесь. Сетевая часть там написана на основе библиотеки asio(используемая версия включена в trunk), но может быть в принципе переписана и для QtNetwork(я ее не использовал, чтобы не делать дополнительных зависимостей от Qt). Файлы networking.h и networking.cpp непосредственно работают с сокетами, messages.h и messages.cpp содержат классы и интерфейсы для передачи сообщений по сети. Комментариев там почти нет, если будут вопросы можешь писать в пм. Да, дополнительно оно требует boost версии 1.36+ |
|||
|
||||
| duckich |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.12.2008 Репутация: нет Всего: нет |
Ну вот так нам и сказали... Я думаю можно попозже сдать просто начнут принимать в мае. Да и нам не особо красивую надо сделать просто коричневые кубики-разрушаемые; серые-нет; бегает чёрный кружок и ставит бомбы. меню самое простое: подключится к серверу(если ты клиент) и создать игру(если ты сервер). Основное требование-чтобы не моргало и двигался чёрный кружок не лагая. Пересылать надо, как я думаю координаты разрушенного кубика, непосредственно перед взрывом и направление движение игрока(координаты 2-х точек). Просто я не знаю ни QT ни Сокеты... и не имею понятия как начать!
Это сообщение отредактировал(а) duckich - 4.4.2009, 13:38 |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
и прямо сказали на Qt надо сделать? Просто на нем с включенной по умолчанию double buffering требование типа "чтобы не моргало" теряет смысл)
Если Qt совсем не знаешь, сделать до мая наврят ли удасться. Но можно достать книжку "Qt4: программирование Gui" Бланшета, и выборочно ее изучить(первые главы - знакомство с Qt, главу 7 и 8(обработка событий, QPainter), и скорее всего глава 12/14(классы типа QDataStream, QtNetwork)). Параллельно читать соответствующие Overviews(статьи) в Qt Assistant. После знакомства с восьмой главой приступать к ознакомлению с Qt Graphics Framework(в качестве канваса для твоей игрушки скорее всего понадобится, если ты не собираешься делать вообще все рисование и расчеты координат вручную), куря при этом в основном Qt Assistant. Когда ознакомишься с основными принципами Qt, приступай к написанию каркаса программы(своего класса QMainWindow, структуры непосредственно связанные с игрой(класс игрового поля, игрока etc)). По мере ознакомления с соответствующими классами Qt пиши элементы Gui. С Graphics View желательно ознакомится в общих чертах пораньше, чтобы уже представлять как связать его с игровыми классами. Добавлено через 7 минут и 14 секунд Да, для анимации можешь скачать с Qt Labs проект Kinetic. Он пока еще не включен в основной Qt trunk, но уже выглядит многообещающе. Можешь почитать блог по нему - сам все увидишь. Хотя возмоно для твоей программки хватит и того, что есть в Qt относительно анимации сейчас |
|||
|
||||
| duckich |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 7.12.2008 Репутация: нет Всего: нет |
А сетевую часть тоже на QT лучше сделать? Я просто Qt для интерфейса хотел поюзать.. кнопки, меню, движение серверного игрока, а сетевую часть, например, с помощью winsock2.h
Не обязательно всё на Qt делать Это сообщение отредактировал(а) duckich - 4.4.2009, 14:14 |
|||
|
||||
| pan2004 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 357 Регистрация: 28.7.2007 Репутация: 6 Всего: 9 |
Не обязательно. В своем проекте я использую asio для сетевого интерфейса, только это заняло у меня примерно на три-четыре сотни строк больше, чем если бы я сделал то же с помощью Qt.
QtNetwork хорош тем, что он довольно прост в использовании и органично вписывается в уже написанное с применением Qt приложение. Так в нем используются преимущества механизма сигналов/слотов Qt а также класс QIODevice, позволяет писать/читать из сокетов через интерфейс типа QDataStream, делая их почти неотличимыми от обычных файлов. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я бы на такое не отважился (сделать за месяц), хоть с Qt не первый год. Совершенно нет навыков создания 2d игр. Могу лишь предположить, что карта - обычная сетка с квадратиками (массив тайлов). У бомбермена есть позиция - индекс в массиве. Она меняется в зависимости от нажатия клавиш. Соответственно функция отрисовки окна (скажем paintEvent()) должна знать о существовании всех объектов на карте с их индексами и сам массив квадратиков. Зная размер поля (окна) и размеры каждого тайла (размер ячейки карты, шага) можно определить в каком месте необходимо отрисовать нашего персонажа, стены, бомбы. Т.к. это не статичная картинка, а игра, то надо будет создать таймер, который будет вызывать перерисовку окна (repaint()) с необходимой частотой. Скажем 20 раз в секунду (20 = fps, 1000/20 = 50 мс таймер). Каждый объект на карте имеет свои функции и состояния. Например земля по которой проходит взрывная волна, если на её пути находится персонаж (индексы в массиве совпадают), то отрисовать смерть персонажа, уменьшить количество жизней, поставить в точку респавна. По сути взрывная волна - составной временный объект занимающий несколько квадратов. По прошествии некоторого времени она должна исчезать, а взамен её должны уничтожаться объекты или персонажи. В общем это моё видение, возможно подход не правильный. Но как я успел убедиться в большинстве программ приходится чётко знать алгоритм работы, что куда и зачем. Если опыта чего-то нет, то его придется получить. А за месяц скорее всего успеешь только копи-пастингом скопировать куски кода из примеров для организации связи по TCP/IP и нарисовать кружочек через painEvent. А когда дело дойдет до самого написания игры и фабрики объектов придет понимание того, что не знаешь как все это устроено и пока этого не узнаешь - дальше не двинуться. Да и месяц будет проходить таким образом - если что-то не понятно, создашь топик на форуме по Qt, где тебе ответят что-нибудь абстрактное через день (ну или вполне конкретное типа читай Assistant), вопросов будет куча, но основной контекст всех вопросов будет звучать так: "напишите за меня игру", а завуалирован он будет вопросом типа: "приведите рабочий пример". |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |