Система генерации оружия
Привет, Гиктаймс, я хотел бы рассказать про свой первый проект на 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. Чтобы все совпало, я расположил части строго по центру. Позже возникла еще одна проблема, отличается цветовая гамма и детализация элементов. Эту задачу можно решить в начальной стадии создания изображений: рисовать в одном цвете, потом раскрашивать уже созданное оружие.
Все возможные варианты обычных мечей:
Три легендарных меча:
Плюсы этой системы:
- Количество готового вооружения растет геометрически с добавлением еще одной части. У меня, например, 2 детали по 5 экземпляров — всего 25 различных мечей. При добавлении еще детали с 5 разными экземплярами, количество вариантов будет равно 125.
- Добавление игрового азарта — стремление получить оружие из лучших частей.
Минусы:
- Все детали должны подходить друг для друга.
- Сложнее реализовать.
Все выложил на GitHub, сделал комментарии в своей программе. Процесс разработки, рисования, изучения был для меня увлекательным. Совместил приятное с полезным. Возможно добавлю еще видов оружия: луки, топоры… Также думаю про перенос этого проекта в Windows Forms с добавлением интерактива, чтобы сам мог выбирать из каких частей собирать. Если есть вопросы или замечания пишите, постараюсь ответить. Новым идеям буду особенно рад.
P.S. Ссылки на использованные картинки