World Conquest Chronicles

World Conquest Chronicles

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

Скриншот примера работы клиента игры

Город — это 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.