Город, шаг третий — 2D RTS, релиз
Posted on

Город — это MMORPG про мегаполис в киберпанк и нуар стилистике. Третьим шагом к его реализации стала 2D RTS.
Финальный релиз. Реализованы атаки скелет-игрок, скорректирован баланс.
Технологии
Язык программирования: C++.
Сетевой фреймворк: Boost.Asio.
Графический фреймворк: Qt.
Что готово
- синхронный двухпоточный UDP-клиент:
- генератор уровня;
- загрузка уровня из файла;
- отображение уровня;
- добавление и удаление игроков;
- установка параметров и состояний игровых объектов;
- установка позиций игроков;
- указание адреса и порта сервера в конфигурационном файле;
- отдельный поток для обновления уровня;
- добавление и удаление скелетов;
- установка позиций скелетов;
- синхронный двухпоточный UDP-сервер:
- указание порта в параметрах командной строки;
- поддержка простого протокола;
- поддержка списка подключенных клиентов;
- отдельный поток для удаления потерянных игроков;
- перемещение игроков;
- collision detection;
- атаки игрок-игрок;
- атаки игрок-замок;
- респаун игроков;
- захват замков;
- пополнение отряда игрока его замками;
- атаки замок-игрок;
- атаки игрок-скелет;
- респаун скелетов;
- атаки скелет-игрок.
Протокол
Запрос: command[:parameter][:parameter].
Команды:
r— запрос регистрации; параметров не имеет; в ответ сервер вернёт новый ID игрока;m— запрос перемещения игрока; имеет 2 параметра — ID игрока и направление; порядок параметров важен; направление должно быть представлено числом от 0 до 3 включительно, которое означает, соответственно, направление вверх, вправо, вниз и влево; в ответ сервер вернёт строкуtrue, если перемещение удалось совершить, и строкуfalse, если нет;w— запрос состояния мира; имеет 1 параметр — ID игрока; в ответ сервер вернёт список игровых объектов, разделённых символом;; описание каждого игрового объекта будет иметь формат либоc:castle_id:castle_health:castle_stateдля замков (гдеcastle_stateпринимает значение 0, если замок свободен, значение 1, если он принадлежит игроку, сделавшему запрос, и значение 2, если замок принадлежит другому игроку), либоp:player_id:player_health:player_position_x:player_position_yдля игроков, либоs:skeleton_id:skeleton_health:skeleton_position_x:skeleton_position_yдля скелетов.
При ошибках сервер возвращает строку в формате error:description.
Репозиторий
Ссылка: http://github.com/thewizardplusplus/city/tree/v0.3.
Содержание: код.
Лицензия: MIT.
Авторские права
Рисунок дерева
Автор: laobc.
Лицензия: CC0 1.0.
Ссылка: http://openclipart.org/detail/65479/simple-tree-by-laobc.
Рисунок горы
Автор: nicubunu.
Лицензия: CC0 1.0.
Ссылка: http://openclipart.org/detail/9459/rpg-map-symbols:-mountain-by-nicubunu-9459.
Рисунок замка
Автор: MrBordello.
Лицензия: CC0 1.0.
Ссылка: http://openclipart.org/detail/17086/strategy-game-tileset-by-mrbordello-17086.
Рисунок игрока
Автор: MrBordello.
Лицензия: CC0 1.0.
Ссылка: http://openclipart.org/detail/17073/strategy-game-tileset-by-mrbordello-17073.
Рисунок скелета
Автор: MrBordello.
Лицензия: CC0 1.0.
Ссылка: http://openclipart.org/detail/17081/strategy-game-tileset-by-mrbordello-17081.