Войти
ПрограммированиеФорумИгровая логика и ИИ

Как можно реализовать диалоги с неписями в рпг? (20 стр)

Страницы: 119 20 21 2232 Следующая »
#285
0:54, 24 ноя 2022

FourGen
> Да может, и каждое надо обработать, я об этом уже писал.
> Что-то можно автоматизировать, но что-то глобальное придется писать отдельно.
Поэтому твой метод и плохо масштабируется, тебе приходится по всему коду писать эти ифчики, и изза этого тебе станет труднее модифицировать весь код.

Потому я тупо сделаю лямбды. MyDialog["alice"].pages["start"].answers.add("i have 500 money for you", ()=>{player.money>=500});

#286
1:09, 24 ноя 2022

>samrrr
Вы на вопрос не ответили. Навояйте по быстрому принцип изменения одного параметра и разных классов.

Да вижу верх масштабируемости. Круто!

#287
(Правка: 3:03) 3:02, 24 ноя 2022

FourGen
> Вы на вопрос не ответили. Навояйте по быстрому принцип изменения одного
> параметра и разных классов.
Если интересует изменение money из любой точки программы, то я сделаю

GetGameInstanceSubsystem<PlayerData>().Money+=42;

Или

auto Player = GetGameInstanceSubsystem<PlayerData>();
Player.SetMoney(Player.GetMoney()+42);

Что по факту одно и тоже в C#.

#288
3:38, 24 ноя 2022

>samrrr
И вы мне рассказываете про говнокод?

#289
3:56, 24 ноя 2022

FourGen
> И вы мне рассказываете про говнокод?
Да. У тебя говнокод, у меня корректная система с сервисами.

#290
4:18, 24 ноя 2022

FourGen
А в чем говно код?

#291
8:06, 24 ноя 2022

>samrrr

Да. У тебя говнокод, у меня корректная система с сервисами.

Знание операторов, не говорит о правильности их применения. Единственное, что тут верно это

GetGameInstanceSubsystem

и то оно находится не там, где надо )

>FlyOfFly

А в чем говно код?

В том, что любой хардкод - это говнокод, а не отсутсвие навернутых операторов. Навернутыми опрераторами надо уметь навернуто пользоваться правильно. Подобный подход приводит к вопросам:

Где ты эти ифчики расположишь?

Ответ: при таком стиле написания нигде, так как подобное не подлежит расширению и надо будет писать костыли на костыли.

#292
8:56, 24 ноя 2022

FourGen
> Знание операторов, не говорит о правильности их применения. Единственное, что
> тут верно это
В чём конкретно твои претензии? Мне надо дать игроку 42 монеты я их ему выдал. Естественно в проекте у меня стоит не 42 а значение взятое из xml.

FourGen
> и то оно находится не там, где надо )
Оно находится там где надо. По крайней мере для анреала.

#293
(Правка: 9:04) 9:04, 24 ноя 2022

FourGen
Ты знаешь о такой вещи как свойство?

 private int _money;
 
    public int Money
    {
        get
        {
            return _money;    
        }
        set
        {
  
            _money = value;  
    if(_money>=max_money) _money=max_money
        }
    }
Money+=50
#294
9:29, 24 ноя 2022

>samrrr

42 а значение взятое из xml

Это не имеет значения откуда оно там берется, это называется хардкод, причем достаточно глобальный.
1) Player получается локально - вы создали несвязанный кусок кода, который не знает работает ли остальная часть программы или нет.
2) В классе Player игроку добавляются деньги, но у игрока просто есть деньги, а сами деньги это отдельный объект, под него должен быть свой класс
3) У вас прописана переменная (+42) заполняемая локально из xml файла, это хардкод, тут должно быть получение ссылки что, добавлять, а не добавлять. Добавлением должен заниматься класс деньги.

Оно находится там где надо. По крайней мере для анреала.

Нет, потому, что я и поднял вопрос о масштабировании, после вопроса, "куда вставлять ифчики".
Отсутсвует конструктор, где и будет определяться ваш

auto Player =

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

>FlyOfFly

Ты знаешь о такой вещи как свойство?

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

#295
9:51, 24 ноя 2022

FourGen
> Player получается локально
Мне нужен плеер, я его получил. Всё. Плеер один и всегда существует.

FourGen
> не знает работает ли остальная часть программы или нет.
Знает, этоже GameInstanceSubsystem.

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

FourGen
> а сами деньги это отдельный объект, под него должен быть свой класс
Не, деньги это просто циферка, обычно инт.

FourGen
> У вас прописана переменная (+42) заполняемая локально из xml файла, это
> хардкод,
Неа, это загрузка данных из файла. Пропишу я в xml квеста 42 и будет у меня прибавляться 42.

FourGen
> тут должно быть получение ссылки что, добавлять,
Неа, нифига подобного быть не должно. Максимум функция AddMoney которая будет именно добавлять.

FourGen
> Добавлением должен заниматься класс деньги.
Неа, такого класса не должно быть. Это напиливание абстракций там, где их не должно быть.

FourGen
> Отсутсвует конструктор, где и будет определяться ваш
>
> auto Player =
>
> и вызывать этот конструктор, как вы понимаете будет не инициализация куска
> кода, где он прописан.
Это уже твои домыслы на ровном месте.

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

#296
9:54, 24 ноя 2022

FourGen
> Это ООПшная замута, лишняя писанина
Неа, это не лишняя писанина. Вот представь сделал ты деньги как в террарии и хочешь узнать есть ли 500 монет у игрока.

Ты росто добавляешь пропертю Money а в геттере пишешь функцию подсчёта монеток, и обращаешся так какбудто у тебя в классе есть поле Money.

#297
10:09, 24 ноя 2022

FourGen
>
> Если бы вы бы правильно его использовали, вы бы не спрашивали бы знаю ли я что
> это такое. Это ООПшная замута, лишняя писанина, (правда в более удобном виде
> получается) но так лень писать, все равно это не нужно, так как использование
> подобного свойства, это жесткий хардкод, применительно к данному случаю.
какая замануха? Мне часто в своем коде надо одновременно менять несколько парамметров и в том же godot часто не хватает свойство, что-бы не копипастить код

#298
10:09, 24 ноя 2022

>samrrr
Вопросы по масштабируемости

Плеер один и всегда существует

Мне вот захотелось еще одного Player?

Не, деньги это просто циферка, обычно инт.

Мне вот приспичило сделать еще одну валюту, причем не int, а float

Неа, нифига подобного быть не должно

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

Это напиливание абстракций там, где их не должно быть

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

Ты росто добавляешь пропертю Money а в геттере пишешь функцию подсчёта монеток

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

как в террарии и хочешь узнать есть ли 500 монет у игрока.

Да в чем проблема? Узнаю. Когда он их получил, в каком виде, за что, почему сколько осталось у того, кто ему их отдал, сколько видов денег у него и прочее.

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

#299
10:16, 24 ноя 2022

FlyOfFly
Самое банальное это хэлл-бар, тебе нужно что бы при каждом изменение здоровье менялся и healthbar. Без свойств тебе нужно постоянно контролировать где ты изменяешь здоровье и вместе с этим изменять ещё и healthbar

Страницы: 119 20 21 2232 Следующая »
ПрограммированиеФорумИгровая логика и ИИ