arrow_back history This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. Войска. Часть 1. Обязательно для допуска. Базовые типы юнитов: - Unit: Абстрактный (НЕОБЯЗАТЕЛЬНО) воин специализирующийся на нанесении физического урона - SpellCaster: Абстрактный (НЕОБЯЗАТЕЛЬНО) воин специализирующийся на нанесении магического урона Вполне логично, что все юниты, наносящие магический урон способны наносить и физический. Физический урон, который наносит SpellCaster должен быть небольшим, так же SpellCaster имеет меньшее, по сравнению с Unit, количество очков здоровья. Юниты, наносящие физический урон: * Soldier [Солдат] : юнит без всяких специальных возможностей * Rogue [Разбойник] : разбойника невозможно контратаковать * Berserker [Берсерк] : на берсеркера не действует магия * Vampire [Вампир] : при атаке / контратаке потребляет часть жизненных сил противника * Werewolf [Оборотень] : умеет превращаться в волка (в состоянии волка имеет более высокий показатель жизненных сил и атаки, но получает больший урон от магии) Юниты, способные к магии: * Wizard [Волшебник] : атакует боевыми заклинаниями (лечебные заклинания имеют только половину силы) * Healer [Целитель] : владеет целебными заклинаниями (боевые заклинания имеют только половину силы) * Priest [Священник] : владеет целебными заклинаниями (боевые заклинания имеют только половину силы), наносит x2 урон нежити (Vampire, Necromancer) * Warlock [Чернокнижник] : призывает демонов (класс Demon немного расширяет класс Soldier) * Necromancer [Некромант] : следит за всеми кого атаковал, в случае смерти атакованого юнита, получает часть его жизненных сил Интерфейсы: * Observer [наблюдатель] : пригодится для Necromancer * Observable [наблюдаемое] : пригодится для всех остальных Напрячь мозг и: * Вынести механику атаки в виде отдельных классов * Вынести заклинания в виде отдельных классов * Вынести состояния юнитов в виде отдельных классов * Придумать внятную систему разделения боевых магов и целителей * Придумать внятную систему маркировки нежити * Разделить урон на физический и магический * Реализовать волшебникам книгу заклинаний (std::map и enum вам в этом помогут) * Структурировать исходный код Дополнительные возможности: * Вампир может сделать вампиром другого юнита (исключение Werewolf) * Оборотень может сделать оборотнем другого юнита (исключение Vampire) Важно: * Не забывайте, что в C++ есть наследование * Не забывайте, что в С++ есть множественное наследование * Не забывайте, что в С++ есть перегрузка функций P.S.: Господа, данная задача на творчество. Я не ставлю вам никаких ограничений. Не следует задавать вопросы типа "Какой урон юнит наносит при контратаке?" или "Сколько очков здоровья должен получать Некромант?". Эта задача на проработку ООП. Чем сложнее и интереснее вы придумаете, тем больше опыта заработаете. Часть 2. Не обязательно для допуска. Игровое поле. Смастерить доску размером 8x8, 16х16, 24х24 или других размеров. Каждая клетка доски - это объект Location с координатами. На одной клетке может находиться только один юнит. Соответственно, каждый юнит может перемещаться на какое-то количество клеток вперед, назад, вверх или вниз. Нововведения: * У каждого юнита есть радиус атаки и дальность ходьбы. * У каждого заклинания есть радиус действия. * Mount [Ездовые животные] - обладатель ездового животного может передвигаться на увеличенное количество клеток. * Archer [Лучник] - умеет наносить урон на расстоянии. * Солдата можно сделать лучником. Часть 3. Пишу так, чисто поржать. Все равно никто не сделает. Визуализация: * Нарисовать доску в консоли. * Если в клетке находится юнит - визуально это обозначить.