Изучая [эту страницу ], так понял, что не принимает. При разных настройках он предлагает использовать PayPal, Stripe или Payoneer, но ни то, ни другое, ни третье с Россией не работает из-за санкций.
если 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() строка со счётом получила вид (исчезло вычитание единицы):