Привет, Гиктаймс, я хотел бы рассказать про свой первый проект на 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 с добавлением интерактива, чтобы сам мог выбирать из каких частей собирать. Если есть вопросы или замечания пишите, постараюсь ответить. Новым идеям буду особенно рад.

Комментарии (16)


  1. Hellsy22
    14.09.2017 23:11
    +2

    Мне кажется, что статья не совсем по теме сайта.

    Автогенерация предметов имеет свои очевидные минусы: несбалансированные характеристики приводят к тому, что игрок выбирает 1-2 главные и придерживается именно их (например — средний урон оружия), игнорируя остальные. Сбалансированные — к тому, что игроку вообще становится безразлично, что у него в руках. В итоге для игрока 99+% предметов оказываются бесполезны. А если еще и выдерживается паритетом между средним уроном оружия, доступном на конкретном уровне, и здоровьем противников, то оружие перестает меняться вообще.

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


    1. MonkAlex
      14.09.2017 23:53
      +1

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


      1. Nekto_TM
        15.09.2017 08:42

        Согласен — разнообразие в оружие это плюс для игрока.


      1. Tremere
        15.09.2017 17:58

        Я ходил всегда с револьвером, который стрелял взрывными патронами


    1. undeadi4ek
      15.09.2017 09:18
      +1

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


      1. Hellsy22
        15.09.2017 11:59
        +1

        данный параметр искусственно увеличит разнообразие

        Да-да, синяя винтовка против синих слонов, красная винтовка против красных слонов. Ключевое слово — «искусственно», игрок довольно быстро осознает, что его просто заставляют использовать одно и то же оружие, но разного цвета.


    1. Malligan0
      15.09.2017 09:19
      +1

      Сбалансированные — к тому, что игроку вообще становится безразлично, что у него в руках. В итоге для игрока 99+% предметов оказываются бесполезны.

      Наоборот. Игрок сможет выбрать приятное себе без ущерба своей эффективности. Отсутствие баланса как раз таки делает выбор остальных 99% сомнительным удовольствием, в зависимости от важности эффективности оружия.


      1. Hellsy22
        15.09.2017 11:54

        Я немного о другом. Реальное разнообразие оружия достигается особенностями его использования, и я не имею в виду костыль из уязвимостей или проков. Разницы в среднем уроне у SMG и снайперской винтовки может не быть вовсе, однако сами паттерны их использования отличаются радикально, что дает игроку как ситуативный выбор, так и общий выбор оружия.


    1. bro-dev
      15.09.2017 09:34
      -1

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


      1. diwnisos
        15.09.2017 10:45

        Ну а я диаблу 2 раз 10 гонял все 3 акта) Это все вкусовщина.


        1. ZurgInq
          15.09.2017 15:41

          В диабле2 актов 4(оригинал) + 1 (аддон LoD)


          1. Spruts
            15.09.2017 21:15

            я думаю тут акты перепутаны с уровнями сложности.


  1. Xandrmoro
    15.09.2017 14:16

    Чтобы все совпало, я расположил части строго по центру
    Обычно для этого используются пивоты


  1. dfgwer
    16.09.2017 05:29

    В Path of Exile, идейном наследнике диаблы2, 3 суффикса+3префикса+тип меча = тонны и тонны мусора из 1000 мечей юзабельна 0-5 штук, многие игроки не утруждаются подбором заведомого мусора, использую только легендарики с заранее прописанными статами.


  1. Mysterious
    18.09.2017 13:58

    Имхо все хорошо в меру. Так вышло что для меня Диабла стала первой в моей жизни RPG и я потом искренне удивлялся и сокрушался по поводу того что в других играх нет такого разнообразия оружия и доспехов и мир зажат рамками: вот тебе линейка мечей вот доспехов, качайся — получай более крутые, ствой стиль игры зависит от класса и тд. Конечно для подсчета баланса и написания гайдов так проще.
    Но вотето чувство когда тебе выпадает новая шмотка и ты примеряешся лучше она или хуже твоей текщей, складываешь в сундук да лучших вреен (пока уровень дорастет), или тестируешь какое-то время. Выбираешь можду скоростью и уроном, модернизируемостью… Или отдаешь наемнику, другу. Это огоромный пласт игры за что её и любил в том числе. Да 90% времени ты бегаешь в отдном и томже, но чтобы найти это что-то под себя — перерываешь тучи хлама и это по своему увлекательно. Это мне кузнец откует в крутую шмотку, а сюда я камень вставлю и тогда огонь! а тут я сделаю дырку и вставлю камень… Интересно же. Жаль что сейчас таких игр почти не осталось


    1. dfgwer
      18.09.2017 14:13

      Path of Exile. Половина игры проводиш в форумах, вики, ауке, калькуляторах, роясь в теорикрафте и мучительно выбирая фишки и особенности своего билда. Игра, где мне понадобилось знание матана и теории вероятности.