Как стать автором
Обновить

Комментарии 67

туда бы ботов и рокетланч…
И частичную разрушаемость стен…
В старой версии была.
Тогда все было иначе:
скриншот
Бот есть.
Выстрелы умерли вместе с введением дискретных координат — я не знаю как их нормально реализовать. Единственное, что я придумал — нарисовать каждого игрока своим цветом, а все остальное — черным. После этого нарисовать все и посмотреть на цвет в прицеле. Это настолько криво, что не хочется даже начинать. Если кто-нибудь расскажет как реализованы выстрелы на современных и не очень движках — буду очень благодарен.
P.S. не дискретных, а непрерывных
Выстрел — это запуск небольшого тела (снаряда) с некоторой скоростью в некотором направлении. Скорость конечна (если это не лазер, но их пока не смотрим), а дальше — определение коллизий на каждом шаге времени, если снаряд попал в препятствие, он детонирует. Если в зоне взрыва оказывается игрок, ему защитывается урон.

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

не получится, что оно будет пролетать сквозь игрока?
Может и такое получиться. Вообще, обработка коллизий — обширная тема. Я предложил простейший вариант.
вообще, существует такая штука как CCD но тут она не нужна принципиально, достаточно рейкаста (выпустить лучик)
Если поставить лампочку в точку камеры и настроить attenuation, то во-первых, не сливалось бы все (да и картинка стала бы приятнее), а во-вторых плеер видел бы отчетливо только ближайшие развилки и мог бы по яркости определять, куда дальше стоит двигаться.
Спасибо, я постараюсь реализовать. Освещения нет, потому что я с ним не разобрался)
Попробуйте добавить затемнение по глубине. Т.Е. те точки, что дальше от игрока чуть темнее. Игра очень преобразится и появится объём.
ответил выше
Не часто нынче встретишь школьника решившегося на такое. Молодец.
Напомнило фильм куб. Сюда бы смертельных ловушек. Почти portal будет
Что-то такое делал в майнкрафте =)
Попилить исходники немного — и должно заработать.
По идее должно под маком заработать. Qt под мак есть.
Хотя не гарантирую — я не пробовал, у меня нет нигде мака.
Попробую собрать под мак.
Собрал с некоторыми правками кода, но клиент не запустился, увы. Точнее, запустился и тут же крашнулся после подключения.
Вы правильно расположили файлы?
Labyrus/bin/Client
Labyrus/bin/imageformats
Labyrus/bin/dlls
Labyrus/skins/Skin1/…

Также возможны некоторые проблемы с папкой imageformats.
А вообще, вероятно баг где-то в реализации потоков.
У меня тоже иногда падает после старта, но редко — отловить не удается. Видимо это надо дебажить на маке)
Насчёт правильного расположения файлов надо бы где-то написать ;)

Попробую попозже.
Спасибо, применил патч.
А что за процент показывает прогресс? Количество посещенных клеток по отношению к их общему количеству?
Да.
А прогресс бота показывает то же самое, но со времени последнего старта бота(у него своя память — он будет по новой все проходить)
Текстурки бы получше, да освещение посчитать. В принципе вообще постообработку на шейдерах бы сделать. Еще рекомендую посмотреть в сторону Qt3D, он умеет модельки грузить.
Текстурки — моя головная боль.
Нету ни навыков, ни желания. Все, что я пытался сделать выглядело гораздо хуже, чем то, что выложил.
ЗЫ, кстати, напомнило мне вот это.
Напомнило SCP
А у меня вообще текстуры не грузятся :( fff.jpg
Интересно…
Сколько систем — столько багов)
По идее должны пройти 4 секунды и произойти рестарт.
Но, судя по скрину, вас отключило от сервера.
Без сервера рестарт не работает.
Зачем показывать прогресс? Ведь по нему можно определить, куда идти.
Ну да, можно. Можно определить был ты в данной клетке или нет. Это не так уж и много — компас, показывающий изначально зеленой стрелкой на выход дает больше. Вообще, я показываю прогресс, потому что раньше лабиринт был одноэтажным. Тогда я показывал там поля про патроны, гранаты (снос стенок), стенки (построение стенок) и статус (живой/мертвый). Эти поля умерли, но выглядело оно очень красиво. Поэтому я оставил в левом нижнем углу хоть что-то — прогресс и этаж.
если на выходе из лабиринта разместить фото Памелы, то мотивация дойти до конца резко увеличится.

так же на пути на выход можно размещать кусочки фото и показывать собранное из кусочков фото, по мере прохождения лабиринта, где-нить в уголке…

п.с. вспоминаю старый стрип-покер. как давно это было… CGA… 8086… оторваться было не возможно…
Понял, что в линуксе с зависимостями все тоже не так прекрасно — их пришлось вычислять опытным путем и с помощью аналогичных программ на Qt.


В смысле? Вы либо используете библиотеку, либо нет. Соответственно, либо линкуете, либо нет. Ничего сложного.
Откройте для себя pkg-config.
В системе ArchLinux в репозитории AUR программы компилируются из исходников.
Под моей системой все прекрасно работало, я был уверен, что зависимость одна — Qt5-base.
Однако, при установке на системе, в которой не было Qt, ничего не скомпилилось — не хватало каких-то библиотек.
Опытным путем я выяснил, что нужен пакет icu.
Насколько я понял, это какая-то внутренняя зависимость Qt5, про которую никто ничего не написал.
Так у вас и есть зависимость только от Qt. Ничего удивительного в том, что программа не собирается, если нет Qt.

Существуют прямые зависимости и косвенные:
  • Прямые зависимости (для проекта) — это библиотеки, которые проект непосредственно использует.
  • Косвенные зависимости (для проекта) — это прямые и косвенные зависимости для библиотек, которые использует проект.


Так вот, ICU это библиотека для поддержки юникода и средств интернационализации, и Qt может быть собрана без поддержки этой библиотеки. Ваш «Лабирит» вполне себе переживёт такой расклад.

Отслеживайте только прямые зависимости, косвенные зависимости должны быть автоматически разрешены при разрешении прямых (рекурсивно). На этом принципе построены все современные менеджеры пакетов.
На машине, на которой не было qt — он поставился как зависимость.

Но вы правы: icu идет, как зависимость Qt5-base. Видимо, в старой версии версии пакета этой зависимости не было. Или кто-то не обновил систему.

Обновил PKGBUILD.

О как! Интересно! Надобно дома попробовать. А в будущем git будет использоваться для контроля версий? Ибо было бы время, закоммитил бы пару патчей, а к git'у уже слишком привык. На всякие svn и cvs даже за печеньки не переманишь… :)
P.S. с друзьями just for fun & experience пилили когда-то кросс-платформенный клон Arkanoid'а. Начинал друг по урокам, потом стали пилить совместно всей компахой. Arkilloid, ежели интересно.
Ну так в конце статьи есть ссылка на гиториус. Всё там уже в гите ;)
Да-да, видел :)) Мой вопрос был связан с тем, что в статье есть некоторая неоднозначность относительно git, вот я и вопросил, будет ли он использован при разработке в будущем :)
Поработал с Git, могу с чистой совестью сказать: Git — не для меня. Да простит меня Линус.


Я хотел сказать, что использование git — не совсем то, что мне нужно. Один разработчик. Ни одного отката. Только для AUR по сути, да для сохранения бэкапов кода. И идеологию коммитов я что-то не очень понял. Но переходить на другую систему контроля версий — не дай бог.

Git был выбран, так как единственный сайт, дающий систему контроля версий, про который я знал — gitorious.org
Кстати говоря, только что собрал с git'а… Побегал)) Весьма напомнило ту игрушку-лабиринт трёхмерный (обычно из прозрачного пластика) с шариком :) Один раз правда клиент упал в сегфолт, но я не был вооружён дебаггером :)
Но переходить на другую систему контроля версий — не дай бог.
А почему? На начальной стадии (когда нет хуков, CI, и большого количества alias’ов), а также нет привычки, VCS менять очень легко. Mercurial дружелюбнее — он хотя бы не торчит кишками наружу. Имеет возможность импорта из git (дополнение hg-git или встроенная команда hg convert).

И идеологию коммитов я что-то не очень понял.
А что именно не поняли? Тут всё просто — делаете одно логически завершённое изменение (вроде «добавил возможность иметь две разные текстуры поверхности стены») и фиксируете его. Коммит должен содержать только одно значимое изменение (лучше иметь только одно независимое изменение, но я всё же часто засовываю в коммит мелкие исправления вроде опечаток в комментариях или indentation). Что считать значимым — решаете вы. Под «независимым» следует понимать изменение, которое вы можете кратко и понятно описать одним достаточно коротким (github режет первую строку по границе в 78 символов) предложением. Если вы пишете нормальные комментарии к изменениям, то можете, глядя в git log/hg log и копируя оттуда фразы, составлять описание сделанных в новой версии изменений.

Только для AUR по сути, да для сохранения бэкапов кода.
Есть ещё плюсы: bitbucket/github даёт в нагрузку удобный TODO лист (он же bug tracker, но при отсутствии пользователей это просто TODO), у первого он более удобен. Сам mercurial/git даёт более простое развёртывание и обновление на других машинах и восстановление в случае различных ошибок (в т.ч. испорченного вашими исилиями кода). Последнее преимущество для одного разработчика — возможность прогона тестов перед фиксацией изменения (git/mercurial) или же перед загрузкой зафиксированных изменений на сервер (только mercurial).

Про то, как сказанное соотносится с gitorius я не скажу — использую только git+github и mercurial+bitbucket.
А почему? На начальной стадии (когда нет хуков, CI, и большого количества alias’ов), а также нет привычки, VCS менять очень легко. Mercurial дружелюбнее — он хотя бы не торчит кишками наружу. Имеет возможность импорта из git (дополнение hg-git или встроенная команда hg convert).

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

А что именно не поняли? Тут всё просто — делаете одно логически завершённое изменение (вроде «добавил возможность иметь две разные текстуры поверхности стены») и фиксируете его. Коммит должен содержать только одно значимое изменение (лучше иметь только одно независимое изменение, но я всё же часто засовываю в коммит мелкие исправления вроде опечаток в комментариях или indentation). Что считать значимым — решаете вы. Под «независимым» следует понимать изменение, которое вы можете кратко и понятно описать одним достаточно коротким (github режет первую строку по границе в 78 символов) предложением. Если вы пишете нормальные комментарии к изменениям, то можете, глядя в git log/hg log и копируя оттуда фразы, составлять описание сделанных в новой версии изменений.


Это если вы нормальный разработчик)
А если вы одиночка, и за коммитами никто не следит, то смысла, вроде как, особого нет. Написал что-то завершенное — отправил на сервер. Логичнее, чем перед этим создавать коммит, а потом уже отправлять.
А про changelog'и я просто не думал. Все-таки Labyrus изначально назывался maze. И делался исключительно для саморазвития.

Есть ещё плюсы: bitbucket/github даёт в нагрузку удобный TODO лист (он же bug tracker, но при отсутствии пользователей это просто TODO), у первого он более удобен. Сам mercurial/git даёт более простое развёртывание и обновление на других машинах и восстановление в случае различных ошибок (в т.ч. испорченного вашими исилиями кода). Последнее преимущество для одного разработчика — возможность прогона тестов перед фиксацией изменения (git/mercurial) или же перед загрузкой зафиксированных изменений на сервер (только mercurial).

Про то, как сказанное соотносится с gitorius я не скажу — использую только git+github и mercurial+bitbucket.


Единственное, что дает gitorious, помимо того, что предоставляет git, это wiki. По крайней мере, я больше ничего на нем не нашел)
А вообще, перед написанием статьи я зарегистрировался на sourceforge.
Вот его возможности меня поразили. Чего только стоит возможность добавлять скриншоты. Я думаю, что если я буду впредь заниматься чем-либо подобным, я буду использовать sourceforge + svn.
буду использовать sourceforge + svn

Лучше git + github + github pages, имхо.
И, кстати, скриншоты можно на гитхабе и без pages вставлять.
Интересно. Правильно я понимаю, что на github pages можно загружать свои файлы?
Т.е. по сути github отличается от sourceforge только отсутствием возможности использовать mercurial/svn?
Ну, в указанном мной примере я лишь загрузил .png в репозиторий и с помощью Markdown вставил в Readme.
Но на github pages можно сделать полноценный сайт, с картинками и прочим.

Кстати о sourceforge. Он, как по мне, морально и технологически устарел. Он тяжеловесен и крив дизайном.

Я для себя выбрал гитхаб для opensource и bitbucket для личных проектов — оба очень удобны.
> Кстати о sourceforge. Он, как по мне, морально и технологически устарел. Он тяжеловесен и крив дизайном.

Они недавно сделали большое обновление и переехали на что‐то более приличное. Правда я уже практически перестал использовать sourceforge к этому времени (использую только как hosting для репозиториев), так что оценить изменения лучше не могу, но новый интерфейс определённо приятнее.

> Я для себя выбрал гитхаб для opensource и bitbucket для личных проектов — оба очень удобны.

Как ни странно, я тоже (помимо старых, тоже личных, проектов на sourceforge). Точнее, я бы с радостью перетащил на bitbucket всё, но для этого надо перетащить туда же всех. Правда, у меня «личный» — «начатый мною», а не «не opensource», а «opensource» на github — исключительно чужой opensource. У github слишком плохой bug tracker, а у git плохой CLI. У bitbucket для совместных проектов есть один большой минус: я не знаю бесплатной системы CI для него навроде travis. Остальные мешающие минусы они уже убрали (добавили комментарии к строкам в diff’ах и markdown вместо wiki в комментариях).
Побегал и набрал прогресс 125%… я думал, что такое может быть только на выборах.
Странный эффект…
Я правильно понимаю, что у вас не обнулялся прогресс после рестартов?
Была такая бага в какой-то старой версии.
У меня до 229% получилось :) Можно было и дальше накапливать.
Текстура вырвиглазная, все сливается в один фон. И сделайте, что ли, поребрик другого цвета по краям стенок, чтобы издалека были видны.
Неправильно, конечно, что карта мира целиком отправляется клиенту, да и коллизии проверяются на его же стороне.
Неужели исходники читали?
Ну да, неправильно. Я из принципа KISS. Просто писать все это на стороне сервера тяжелее. А для того, чтобы мне все это аукнулось, нужно, чтобы была достаточная аудитория, чтобы кто-нибудь захотел ее сломать. А когда ломать некому, то и защиту писать как-то неохота)
Не нашёл нормального способа завершения сервера после запуска labyrus-server-gui.exe, приходиться убивать процессы. Консольный вариант нормально работает.

Дизайн интерфейса ужасен. Есть простое правило: если не можешь сделать нормальный интерфейс, то сделай его простым.
Я бы сделал примерно так


В Qt можно узнать ширину в пикселях для текста, поэтому легко сделать, чтобы текст не вылезал в моём примере.
Курсивом лучше не делать текст, он заметно хуже выглядит.
Цвет текста тоже играет большую роль.
Забавно, в линуксе все прекрасно работает. После закрытия консоли, сервер завершается. А я решил, что если у меня работает, то и под виндой заработает. Сейчас проверил — действительно под виндой не работает. Удивительно, так как в той части кода нету никакой зависимости кода от системы.
Но, вообще, labyrus-server-gui.exe перед стартом нового, убивает предыдущий сервер, так что сильно мешать это не должно. Хотя, разумеется, это баг.

Насчет дизайна — ну не дизайнер я)
Как смог — так сделал. Буду знать про простой интерфейс. Спасибо, за интересный скрин.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Трехмерный лабиринт? Забавно)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации