Система генерации оружия

Привет, Гиктаймс, я хотел бы рассказать про свой первый проект на c#. Так как мне интересны компьютерные игры, хотелось сделать что-нибудь из этой области. Я взял идею из серии игр Borderlands, а именно систему генерации оружия. У меня она, конечно, гораздо упрощена.

Думаю лучше начать с самого начала. Я уже пытался работать на с++, однако что-то не пошло. Интересоваться языком c# начал летом, изначально очень помогли видео лекции от Microsoft. После пройденного курса захотелось сделать что-то интересное. Так я и начал работу.

Что хотелось с самого начала:

  • Поработать с файлами .txt и .bmp
  • Сохранять файлы и удалять их из указанной директории
  • Чтобы все работало + чтобы был приятный процесс разработки


Сама система генерации оружия — это что-то вроде паззла. В игре Borderlands создается огнестрельное оружие, и части там соответствующие (Приклад, Цевье, Ствол, и т.д.). Они собираются в одно целое, и готовое снаряжение получает характеристики соответствующие частям. Также у него обязательно есть производитель, название и уровень. Еще есть отдельный список уже созданного «легендарного» оружия с особенными характеристиками и низким шансом на выпадение. Эту систему я и сделал в с#. Только делать захотел холодное оружие. Для начала я решил генерировать мечи из двух частей: лезвие + рукоять.

Что реализовал:

  • Считываем txt файлы со списками частей и соответствующими характеристиками.
  • Случайно выбираем по каждой части (лезвие + рукоять).
  • Соединяем их картинки, берем среднее арифметическое из их характеристик, применяем модификации от производителя, складываем их имена (прилагательное + существительное).
  • Несколько вспомогательных методов: «продать оружие», «найти сундук» и «убить противника» (последние два отличаются только шансом получить легендарное оружие).


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

Вот вид текстового файла для легендарных мечей:
UltraLord 5 100 20 1000 human 11 31.
TitanKiller 6 90 23 1000 orc 11 32.
SoulEater 4 120 21 1000 daemon 11 33.

С картинками было гораздо сложнее. Пришлось редактировать найденные в интернете изображения. Делал пиксельные картинки 200×600. Чтобы все совпало, я расположил части строго по центру. Позже возникла еще одна проблема, отличается цветовая гамма и детализация элементов. Эту задачу можно решить в начальной стадии создания изображений: рисовать в одном цвете, потом раскрашивать уже созданное оружие.

Все возможные варианты обычных мечей:

dc43d23324f7413080df390830df7be5.png

Три легендарных меча:

4d38416ef36745589a9a177c96b49b85.png

Плюсы этой системы:

  • Количество готового вооружения растет геометрически с добавлением еще одной части. У меня, например, 2 детали по 5 экземпляров — всего 25 различных мечей. При добавлении еще детали с 5 разными экземплярами, количество вариантов будет равно 125.
  • Добавление игрового азарта — стремление получить оружие из лучших частей.


Минусы:

  • Все детали должны подходить друг для друга.
  • Сложнее реализовать.


Все выложил на GitHub, сделал комментарии в своей программе. Процесс разработки, рисования, изучения был для меня увлекательным. Совместил приятное с полезным. Возможно добавлю еще видов оружия: луки, топоры… Также думаю про перенос этого проекта в Windows Forms с добавлением интерактива, чтобы сам мог выбирать из каких частей собирать. Если есть вопросы или замечания пишите, постараюсь ответить. Новым идеям буду особенно рад.

P.S. Ссылки на использованные картинки

© Geektimes