если accuracy выше 0.1749, то тренировку на этом мобе можно считать эффективной, но из-за того, что в расчетах с самого начала используется защита, приходится перебирать каждую группу мобов, чтобы найти необходимого
Не уверен, что понял, в чём заключается проблема.
Поскольку accuracy считается и по защите моба, и по характеристикам персонажа игрока, то её придётся вычислять каждый раз, когда что-то меняется либо у игрока (влияющее на урон), либо у моба (влияющее на защиту), то есть уйти от учёта защиты моба никак не получится. И если нужно понять, для каких мобов accuracy выше значения X, то нужно пройтись по всей коллекции мобов и посчитать accuracy для каждого встреченного моба -- таким образом и узнаем, для каких из мобов accuracy выше значения X. Не считая, не посчитать.
Если проблема в том, что accuracy пересчитывается чаще, чем обновляются характеристики мобов или персонажа, то можно поступить так: - для каждого персонажа хранить свою коллекцию пар {"идентификатор моба", accuracy}; - один раз посчитать accuracy для каждого моба; - отсортировать коллекцию пар по accuracy;
Тогда, если потребуется выбрать мобов, для которых accuracy выше значения X, то просто взять и выбрать их, ведь коллекция пар же отсортирована. Если характеристики мобов не обновляются, то accuracy достаточно пересчитывать только тогда, когда обновляются характеристики персонажа.
Сообщение отредактировал Oscillograph - Суббота, 30 Марта 2024, 18:04
Стриминговые сервисы хороши, пока: а) есть связь; б) сервис не прекращает доступ к записи У записей на своём носителе эти ограничения отсутствуют, и рекламу в эфир никто не пускает, поэтому оффлайн-плееры всё ещё актуальны.
Машинки, которые не тянут современные операционки и графику, до сих пор в ходу, и не только на работах, но и дома. При этом, со стороны пользователя, абсолютно неясны предпосылки, когда программы перестают поддерживать какую-то ОСь, ведь буквально только что весь тот же самый функционал работал достойно и всё было хорошо Например, Стим прекращает поддержку семёрки в клиенте, и есть мнение, что это из-за того, что так сделал лежащий в его основе хромиум. А пользователю-то что с этого?) Или клиент Дискорда несколько месяцев назад спокойно работал на машине с семёркой и OpenGL 3.3-4.1, а после своего обновления стал показывать белое полотно с подсказкой. А что творят иные веб-сайты -- вообще неописуемо. Количество контента и функционал визуально воспринимается меньшим, чем в древние нулевые, но страница может съедать сотни мегабайт оперативы и заставлять браузер виснуть от обилия метрик, асинхронных загрузок и непонятной активности -- а пользователь только успевает браузер обновлять, потом операционку и вообще всё железо, а вместе с ним покупать заново лицензии на все программы, которые привязывались к тому железу И всё чаще мучает пользователя один и тот же вопрос: "Ну ок, обновился, а что получил взамен кроме кратковременного избавления от тормозов?"
Чтобы уважать пользователя, которому комфортно в любимом окружении
Сообщение отредактировал Oscillograph - Среда, 22 Ноября 2023, 15:25
COOLGAMER, остановил выбор на C++, полагая, что в процессе заодно напишу такой движок, на котором буду делать удобные для работы инструменты -- мне как раз важна производительность и возможность оптимизировать какие-то мелочи при работе с памятью Я ещё маленький, поэтому начинать, конечно, буду с чего-то простого. С тетриса, например. На поверку оказалось, что это не так-то просто -- вместо него постоянно что-то не то получается.
Сообщение отредактировал Oscillograph - Суббота, 14 Октября 2023, 12:51
Помимо варианта заложить эту возможность можно рассмотреть и более простой: проверять длину текста в ответе. Если присмотреться к функции, которая удаляет тексты ответов, то можно заметить, что длина такого "пустого" ответа составляет всего два символа: "А:", например. Соответственно, всё, что длиннее двух символов, можно считать разрешённым для выбора. Вот, собственно, и всё, что достаточно проверять.
а мелким или вообще одиночкам бессмысленно делать свои движки т.к. они за всю жизнь по качеству могут так и не достигнуть
Есть ещё причина делать свой движок, но она из области личного роста: прокачать себя как программиста. Когда за плечами есть свой движок, то разобраться в том, как пользоваться более развитой технологией, гораздо проще, чем если бы такого опыта не было.
Сообщение отредактировал Oscillograph - Пятница, 15 Сентября 2023, 11:41
. . . function countdown(){ // функция обратного отсчета . . . this.displayTimerMessage() . . .
Если правильно помню, this в JS -- это ссылка на объект, которому принадлежит использующий её метод. То есть, если функция не принадлежит классу Game, то с помощью this она не получит доступ к его методу displayTimerMessage(). Зато к displayTimerMessage() может получить доступ та функция, которая создаёт объект game -- в main.js она зовётся initGame(). Думаю, что из неё можно вырастить что-то полезное, в том числе использующее таймеры.
Сообщение отредактировал Oscillograph - Вторник, 12 Сентября 2023, 21:27
Похоже, что под вечер я стал путаться в описании того, что же на самом деле сделал То последнее изменение в rightAnswer(), где исчезло вычитание единицы, -- лишнее, а вот где оно должно было быть, так это в функции resetGame() (и в constructor, наверное?):) После добавления невидимой кнопки ведь как получилось: теперь в контейнере ".stages" не 15 элементов, а 16 -- и это число минус единица сохраняется при запуске игры в свойство gameLength. Это значение используется для инициализации свойства pLen на старте. Обновляется же свойство pLen в rightAnswer() и указывает на индекс того элемента, который считается пройденным игроком. Индексы считаются от 0, поэтому, если в rightAnswer() из pLen не вычитать единицу, то на старте он указывает на кнопку с индексом 15 -- то есть, на ту самую невидимую шестнадцатую, у которой внутренний HTML равен "$0". И именно этот "$0" сохраняется в свойство amount, используемое updateStagesAndScore() при отображении счёта для игрока. Вот поэтому в rightAnswer() эту "минус единицу" менять не нужно было.
На всякий случай, здесь репозиторий, где у меня вчера это работало правильно.
Сообщение отредактировал Oscillograph - Вторник, 12 Сентября 2023, 13:11
Поужинал -- и полез с инспектором DOM на страницу игры. Сравнивая с процитированной функцией, вот что нашёл: 1) в разметке документа подсказка "Звонок другу" имеет класс "call", а не "callFriend"; 2) функция не обновляет иконку подсказки "Помощь зала", у которой класс "aud"; 3) функция не стирает стиль использованной подсказки и зачем-то вешает лишний обработчик события "onClick" на элемент.
Исходя из этого, переписал последние три строки так:
Хотя resetGame() и обновляет свойства объекта, в которых хранится текущий счёт, но ничего не меняет на странице -- это делается в функции rightAnswer(), обрабатывающей ответ игрока. Скопировал соответствующие строки в новую функцию updateStagesAndScore():
В результате, теперь после рестарта игры состояние подсказок обновляется до исходного, и счёт сбрасывается. Но до 100$ O_o Это из-за того, что в свойство amount пишется внутренний HTML помеченного классом "current" тега button из контейнера stages. Чтобы сброс был до 0, нужно как-то менять логику учёта и отображения очков.
1) В файле index.html добавил к последней кнопке в контейнере stages ещё одну -- невидимую:
2) В game.constructor() и в game.resetGame() в строке, обнулявшей счётчик очков, учёл появление "лишней" невидимой кнопки путём вычитания этого элемента из общего числа:
Код
this.gameLength = $(".stages button").length - 1;
3) Соответственно, в updateStagesAndScore() и в rightAnswer() строка со счётом получила вид (исчезло вычитание единицы):
После того, как Орден Дворников подвергся оптимизации, город стал утопать в использованных батарейках и аккумуляторах. На кучах высокотехнологичного мусора зарождается не менее высокотехнологичная жизнь, и по ночам осознающие себя домашние роботы выходят на улицы, чтобы совершать нечеловеческие ритуалы поклонения Электробогу, чьи терминалы прорастают на свалках. Большинство людей боится выбираться из дома с наступлением темноты, тогда как днём ни у кого попросту нет времени разбираться с проблемой. Лишь один человек отваживается каждую ночь отправляться на тропу борьбы с мусором -- Последний Дворник.
Сообщение отредактировал Oscillograph - Понедельник, 21 Августа 2023, 10:08
Герой живёт в этом городе, и в зданиях по ночам скапливаются газы-анксиогены. Народ привычно винит в этом прилетевших инопланетян. Герой не из числа тех, у кого есть возможность покинуть город. Чтобы страх не парализовал нервную систему, герой сублимирует свою тревогу в воображаемых жертв насилия, которых нужно найти и спасти. Пока не выбьется из сил, он обходит город в поисках требующей внимания несправедливости, чтобы, наведя порядок, испытать сильное чувство удовлетворения, с которым сможет спокойно уснуть. Однако, чем дольше он этим занимается, тем больше организм привыкает, и каждый раз нужно совершать всё более впечатляющий подвиг.
Страх погибнуть от ужаса и ограниченное время толкают героя в объятия вымышленного мира, где защищает подвернувшихся под руку от первых попавшихся злодеев. Сможет ли герой удержаться на грани безумия, или же эскапизм поглотит его, полностью исказив восприятие мира и сюжета? Что, если нет никаких инопланетян, и нет никакой катастрофы, а люди в городе живут обычной жизнью? Только игрок разберётся, кем стал его персонаж -- отчаянным выживальщиком или опасным сумасшедшим.
А вообще, маловато сведений -- занятия персонажа ведь напрямую следуют из условий жизни. То есть подходящий ответ вырастет из вопросов к сеттингу: В чём фантастичность города? В чём заключается антиутопия? Почему на улицах нет людей? Что за катастрофа? Что за инопланетяне, чего они хотели и хотят?
Сообщение отредактировал Oscillograph - Вторник, 15 Августа 2023, 10:58