Я припускаю, що це питання балансу гри, а не питання кодування, і існує маса способів вирішити це. З вашого існуючого алгоритму, я підозрюю, що ви ускладнюєте його, ніж це має бути (три атрибути І випадкове число створюють надзвичайно каламутну систему з точки зору гравця). Мій перший інстинкт - спростити!
Атрибути вибору, які роблять кілька речей, а не результати, що визначаються кількома атрибутами. DEX працює чудово як основний визначальний шанс потрапити в удар; додавання всього іншого служить лише для того, щоб зробити його складніше балансувати. Подумайте про це так: очікуваний збиток гравця при кожному ударі - це їхній відсотковий збиток, помножений на їх середній збиток під час удару. Як ви плануєте обчислити "очікуваний" або "типовий", щоб потрапити на% із такою кількістю змінних?
Я бачу ще одне питання - це те, що ваша формула не змінює масштаб, і це, мабуть, те, що ви відчуваєте. Якщо припустити, що DEX, LUCK та SPEED мають тенденцію до збільшення протягом гри, відмінності між гравцем та монстром у цих статистичних даних також будуть збільшуватися. Як приклад, якщо DEX ранньої гри гравця перебуває в діапазоні від 4 до 6, а також монстри - це модифікатор 10-20% до ударів. Якщо діапазон більше схожий на 10-20 на наступних етапах гри, це до 100% модифікатора.
Один із способів виправити це - виправити статистику. Діапазон гравців та монстрів однаковий протягом усієї гри, і отримати щось на кшталт +1 DEX - це величезна справа, вкрай рідкісна, і її розглядають як таку (якщо вона взагалі існує). Тоді ваша формула буде чудово працювати протягом всієї гри, і ви побачите гравця з приблизно однаковим шансом на влучення протягом усієї гри.
Інший спосіб - змінити жорсткий код "10" на масштаб з рівнем, тому, можливо, це "10 + рівень монстра" або "10 + підземелля" або щось подібне, що спричиняє незначне збільшення труднощів, коли гра прогресує, якщо гравець не підвищиться відповідно до їх статистики.
Третій спосіб, як говорили інші, - встановити жорсткі обмеження на найвищий і найнижчий прийнятний для удару%, а просто сказати "якщо обчислене значення менше X, замість цього використовуйте X".
Для повноти я зазначу, що не існує абсолютного закону, згідно з яким Ви ОБОВ'ЯЗКОВО включаєте ролик, який потрапив би в першу чергу. Діяти в неефективній грі не особливо весело і не дуже додає досвіду, за винятком рідкісних випадків. Альтернатива полягає в тому, щоб дозволити гравцям ВИНАГИ вдарятися і просто возитися з діапазоном ушкоджень, щоб іноді вони завдали набагато меншої шкоди, ніж інші. Пам'ятайте, що складні системи для дизайнера цікавіші, ніж плеєр.