Git Product home page Git Product logo

trenchwar's Introduction

TrenchWar

TrenchWar - некоммерческая 2D-игра в жанре Tower Defense, написанная на C++ с использованием Qt framework (6.3.0+). Игра предназначена для ПК. Целью является моделирование участия в военном конфликте. В игре есть две стороны: защита и атака, каждая из которых должна выставить солдат (а защитник - еще и окопы) на карту для выполнения своих задач: защита - не пропустить нападающего к башням, нападение - прорвать защиту.

В игре предусмотрен одиночный режим и сетевой. Также можно создавать собственные карты с расстановкой на них башен и солдат.

image

image

Статус разработки

Активный этап разработки окончен в июне 2022.

Разработчики

Игра является учебным проектом команды ESD team студентов 5 группы 1 курса факультета прикладной математики и информатики БГУ (2 семестр 2021-2022):

Кураторы-наставники-помощники-ревьюеры...:

trenchwar's People

Contributors

azyavchikovalex avatar klitsunova avatar daniildomnin avatar zolokinos avatar

Watchers

Dmitriy Baranov avatar Ulyanov Aleksey avatar  avatar

trenchwar's Issues

Optimize deleting objects

При нахождении в векторе солдат/пуль более чем 50% использованных объектов отсортировать вектор по использованности и удалить использованные

Make 2 sides of the conflict.

Реализовать 2 стороны: атакующих и защитников, которые будут считать врагами друг друга.

Adding units to map

Перед выполнением этого issue необходимо выполнение #34

Если пользователь нажимает на изображение отряда в пуле, то необходимо его подсветить. Если после этого нажимает на точку на карте, то отряд мгновенно перемещается в эту точку и пропадает из пула.

Если пользователь нажимает на изображение оружия, то необходимо его подсветить. Если после этого нажимает на изображение отряда на карте или в пуле, то оружие назначается солдатам в этом отряде. Если оружия меньше, чем солдат, то оружие получают рандомные солдаты. Если оружия больше, чем солдат, то лишнее оружие остается в пуле.

Если пользователь нажимает на изображение боеприпаса (пули), то необходимо его подсветить и показать виджет, который даст ввести нужное количество пуль. Если нажата кнопка подтвержения и после этого выделен отряд, у которого есть подходящее оружие, то пули равномерно распределяются по всем солдатам, у кого оно есть.

Fix towers destroy

Башни не удаляются с карты. При удалении башни булевой переменной is_need_update_towers_ присвоить true.

Make message windows more comfortable.

  1. Когда нажимается крестик в меню, сообщение появляется сбоку.
  2. Когда нажимается крестик в игре, меню появляется не в активной зоне.

Rewrite settings.h

Сейчас всё читается через магические константы, стоит переписать хранение в INI-файлы.

Split headers

Нужно пройтись по всему коду и вынести в файлы .cpp те хедеры, которые нужны только в .cpp и не нужны в заголовочном файле

Fire doesn't work properly

При изменении кол-ва юнитов до 500 на каждую сторону они не стреляют, а просто идут. Нужно пофикситть.

Update the settings

В настройки добавить сохранение базовых размеров и положения окна, выбранным пользователем. Отображаться не должно.

Landscape

Добавить на карту ландшафт, для этого:

  • создать структуру Landscape в карте (по аналогии с MapGenerator)
  • изменить view таким образом, чтобы отрисовывалась каждая клетка карты в зависимости от ландшафта
  • продумать и реализовать(скорее всего в конструкторе карты) загрузку карты из файла map.txt

Buying units

Нужно реализовать механику покупки солдат и оружия:

  • у игрока есть определенный запас денег;
  • у отрядов, оружия и боеприпасов есть стоимость;
  • под картой с игрой нужно разместить виджет с изображениями отрядов/оружия/боеприпасов и стоимостью;
  • по щелчку на изображение появляется виджет со счетчиком и кнопкой подтверждения; после нажатия на кнопку подтверждения (если хватает денег на покупку), выбранные юниты перемещаются в пул игрока (из пула потом можно будет выставить отряды на карту или назначить оружие/боеприпасы для отряда).
    "Магазин" можно отрисовать как QHBoxLayout из квадратов в левом нижнем углу, например, а пул как QGridLayout с изображениями в правой нижней части экрана.

Give soldiers weapon

Выдать солдатам оружие
выстрелы должны осуществляться солдатом, а не картой
характеристики пули должно задавать оружие
оружие должно решать, возможен ли выстрел
оружие пока будет только одно и с большим боекомплектом

Action queue

Перед выполнением этого issue необходимо выполнение #34 #35 #36 https://github.com/klitsunova/TrenchWar/issues/37

Добавить возможность отдавать юнитам приказы:

  • переместиться в указанную точку (щелчком по изображению отряда выбирается отряд, щелчком пкм, например, указывается точка на карте, куда перемещаться);
  • атаковать указанный отряд (щелчком по изображению отряда выбирается отряд, щелчком пкм, например, выбирается отряд противника; если с пкм нажат свой отряд, ничего не происходит; если расстояние до вражеского отряда больше, чем дальность поражения у оружия, то отряд сначала перемещается в указанную точку, а затем начинает атаковать).

Все приказы добавляются в очередь приказов.

map invalid

После #39

  1. Проверить валидность карты
  2. Предложить выбрать другую карту, если карта невалидна

Fix flicker

Убрать возможное мерцание за счет буферизации: в момент тика таймера для отрисовки карты отрисовка должна проходить сначала в каком-то буферном QPixmap а потом это буфер должен быть перерисован на карту. Так можно избежать ситуации, когда часть кадра не успела нарисоваться, а показывается уже следующий (мерцание)
Для лучшей визуализации вернуть функцию AddSoldier, убранную в пр Bullet

Towers

Добавить башни и возможность их уничтожать.
Переименование класса TerrainObject в Tower

Game preparation stage

Добавить этап подготовки к игре и активных действий

Settings

Добавить регулирование громкости, полноэкранный/оконный режим

Make shots

Солдаты должны после перемещения выпускать пули
Пули должны уметь по ходу лёта наносить урон в радиусе (пока в квадрате)
В данный момент планируется искать ближайшего полнопереборными алгоритмами - не оптимальное решение.
Для нанесения урона в некотором радиусе в клетки будут добавлены указатели находящихся в них солдат (не вижу более быстрого решения)

Map json

1)Переписать mapgenerator, чтобы выдавал карту в json
2)Загрузка карты через json

Compiler choice

Команда использует несколько компиляторов. Надо научиться в CMake определять, какой использовать для сборки проекта, чтобы CMake не менялся в каждом пулл реквесте

Fix shoortest paths

В логике кратчайших поиска путей была допущена ошибка.

Bots

Добавить возможность выставления в MapGenerator солдат на карту
Изменить формат хранения карт (добавить описания солдат уже находящихся на карте)

Fix Landscape

Landscape - должно быть полем Cell
перейти при загрузке карты от std::string к QString

Trench

Добавить механику окопов: клетка ландшафа с характеристикой проходимости, картинкой и булевской переменной окоп/нет

Map

  1. Поле
  2. Сетка
  3. Координаты поля не привязаны к координатам окна и перерисовываются в зависимости от размера окна
  4. У каждой клетки поля есть тип ландшафта (лес, поле и т. п.) и указатель на объект, который находится в этой клетке

Decorate the game

Поиграться с лейаутами, отступами, размерами окошек и всеми остальными штуками.

Network

Добавить возможность создать серверную комнату(?) после начала игры или подключиться к уже существующей. При создании комнаты определяется адрес/имя, по которому будет выполняться подключение.
Если выбрана опция подключения к существующей комнате, надо дать возможность ввести адрес/имя комнаты, проверить подключение и запустить игру, если все работает.
После подключения обоим игрокам должно показываться одно и то же поле.

Const getters

Нужно все геттеры в коде сделать константными

To erase unused components. To fix enam's. To fix some bug's

В soilder.h / soilder.cpp есть метод, который никогда не будет использоваться: void MoveSoldier(QSize); . Его стоит удалить. В тех же файлах есть enam, который предпочтительно всё же написать в разных строках (по кодстайлу). Найти подобные проблемы и исправить их.

Map Generator

Приложение для создания карт с собственными характеристиками ландшафта

Make sound play

Добавить в игру воспроизведение звука

To set up several playlists to user.

Делать только после https://github.com/klitsunova/TrenchWar/issues/30.

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

More optimized deleting objects

За счет того, что нет необходимости в сохранении порядка пуль в массиве, можно при использовании одной пули менять её с последней и удалять последнюю. Это будет работать за o(1) для каждой пули. Аналогично с башнями

Make styles

QRadioButton & QCheckButton. Стили для них предусмотрены только такие, что необходимо загружать сторонние кртинки. Оформить этот тип кнопок.

PixmapLoader

Создать класс PixmapLoader

1)Добавить возможность получения картинки по заданному пути. Класс не должен загружать картинки повторно

2)Добавить функции получения картинок солдата(объекта ландшафта) без передачи пути к ним

Memory leaks

Нужно проверить санитайзерами утечки памяти и поправить

Fix coordinates

координаты не совпадают с экранными, нужно перевернуть во избежание дальнейшей путаницы

Bullet

Реализовать класс пули работающий по принципу: солдат-камикадзе.
Пуля должны после выстрела отрисоваваться по прямой, однако программно будет реализовано так, что она движется по ломаной, которая ближе всего к нашей прямой.
Если на пути своей программной траектории пуля встречает персонажа, она должна нанести ему урон и удалиться из поля боя.
Долетая до назначенной цели пуля либо кого-то находит и наносит урон либо исчезает с карты, не летя дальше.

Fix team division

Солдаты должны храниться одним вектором
все поиски противника теперь будут сводиться к поиску в этом векторе солдатов не своей команды

PixmapLoader

Добавить чтение пути к файлам из JSON

Weapon

  1. Создать класс "снаряжение", от него отнаследовать класс "броня" (пока пустой) и класс "оружие". У класса оружия поля:
  • урон (damage);
  • дальность поражения (range);
  • время перезарядки (reload_time);
  • шанс попадания (hit_chance);
    класс "оружие" умеет возвращать, какого оно типа (enum нож, винтовка и т. п.)
  1. Класс солдата дополняется полями:
  • id
  • дальность видимости;
  • коллекция из pair<оружие, кол-во боеприпасов к оружию>
  • bool IsDead
  1. Класс солдата дополняется методами:
  • добавить оружие;
  • добавить боеприпасы к оружию (пока заглушка, принимает тип оружия, кол-во боеприпасов, ищет оружие такого типа в коллекции у солдата и изменяет количество боеприпасов);
  • мониторить обстановку на наличие врагов в радиусе видимости (пока что заглушка, алгоритм реализовать позднее);
  • выбрать оружие для стрельбы (пока что заглушка);
  • выстрелить (передается id солдата/юнита, по которому стрелять, и указатель на оружие, которым будет наноситься урон);
  • получить урон (если урон больше оставшегося хп, то сменить статус солдата на "мертв");

нужно обсудить, как реализовать стрельбу с перезарядкой - таймер, изменяющаяся переменная, что-то еще?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.