La risposta fornita da Grzegorz Sławecki è già buona, ma volevo spiegare la logica alla base del suo metodo e darti gli strumenti per adattare le soluzioni alle tue esigenze di gioco.
I parametri del presente problema sono il livello di attacco a del giocatore a , il danno dell'arma w , il danno totale inflitto in un attacco d , la salute del nemico H e il numero minimo di colpi necessari per uccidere il nemico, chiamiamolo n .
Se vuoi che il giocatore uccida in n colpi, il suo danno totale d deve essere tale
(n-1) .d <H ≤ nd o in altre parole, n = ceil (H / d) .
d dipende danno dell'arma w e del giocatore livello di attacco una e possiamo aspettarci armi per ottenere una migliore con l'aumentare del livello, quindi cerchiamo di scrittura d (a) e w (a) invece di d e w . Anche i nemici che il giocatore deve affrontare devono diventare più duri, quindi di nuovo H (a) . Queste sono tutte funzioni crescenti di a e vuoi che soddisfino le disequazioni di cui sopra. Le incognite del problema sono funzioni. Ne imposti uno come vincolo e trovi gli altri. Tuttavia hai dei gradi di libertà, il che è una buona cosa.
Se capisco bene la tua domanda, hai in mente un gameplay preciso, e questo gameplay è rappresentato principalmente dal numero di colpi necessari per uccidere il nemico, n (a) . Pertanto, imposta n (a) in base al gameplay che prevedi per il gioco, quindi trova il resto delle variabili del problema . Questo è ciò che dovresti sempre fare perché, come mostra la tua domanda, il tuo primo tentativo è stato quello di provare un algoritmo che pensavi potesse fare e poi realizzare che ha comportato un gameplay indesiderato.
Supponiamo, ad esempio, che tu voglia che il giocatore debba colpire sempre più volte mentre procede nel gioco. Volete anche che, man mano che aumenta il numero richiesto di colpi, aumenta sempre meno spesso, in modo che il giocatore spenda una parte più lunga del gioco colpendo 5 volte che 2 volte. Ecco come appare n (a) :

La funzione utilizzata è n (a) = ceil (2 / 3.sqrt (a)) .
Vogliamo che H (a) / d (a) rimanga all'interno degli intervalli di valori che fanno sì che n (a) abbia il valore desiderato e poiché n (a) = ceil (H (a) / d (a)) , questi intervalli sono i seguenti rettangoli:

e H (a) / d (a) può naturalmente essere impostato su 2 / 3.sqrt (a) in modo da ottenere il seguente grafico, con la curva rossa che è H (a) / d (a) :

Nota: possiamo facilmente trovare H (a) / d (a) qui perché conosciamo la funzione di cui n (a) è il ceil, ma se la nostra specifica per n fosse meno piacevole, dovremmo fare il nostro adattamento funzione usando vari trucchi. Non tutti i problemi sono così belli!
Quindi vogliamo che H (a) / d (a) assomigli a una funzione di radice quadrata personalizzata e sappiamo che H e d devono aumentare le funzioni. Le soluzioni sono molte. Per esempio,
H (a) = a. 2 / 3.sqrt (a) e d (a) = a

Ma vorremmo che il danno e gli HP del nemico aumentassero moltissimo in modo che alla fine del gioco ci fossero numeri grandi e impressionanti, solo per stile, quindi abbiamo impostato
H (a) = a². 20 / 3.sqrt (a) e d (a) = 10.a²

L'intero punto, e la parte migliore, è questo: sai che le tue soluzioni al problema ( H (a) e d (a) ) obbediscono alle specifiche ( n (a) ), quindi ottieni lo stesso n (a) , ma hai libertà. Conosci esattamente la libertà che hai e puoi usarla per personalizzare l'esperienza. Dovresti sempre cercare di concederti tale libertà soddisfacendo le tue esigenze più importanti, quando possibile.
Ora che abbiamo scelto il danno da un colpo d (a) , e poiché d (a) dipende dal danno dell'arma w (a) , possiamo usare d (a) come nostra specifica e provare a trovare un w (a ) che ci dà questo d (a) . I principi sono gli stessi, il problema è diverso: vogliamo che il giocatore causi più danni all'aumentare del suo livello, anche con l'arma che rimane invariata e vogliamo anche che il danno aumenti quando l'arma da sola migliora e il livello rimane lo stesso.
Ma quale importanza dovrebbe avere ciascun fattore? Supponiamo di voler che il livello sia più importante delle armi: una parte maggiore delle variazioni di d (a) = a² dovrebbe essere indipendente da w (a) , ad esempio con
w (a) = 22.sqrt (a) e, quindi, d (a) = (22.sqrt (a)). (10 / 22.a.sqrt (a)) = w (a). (10 / 22.a.sqrt (a))
Otteniamo il seguente grafico per w (a) ...

... e sempre la stessa d (a) , perché abbiamo trovato di nuovo una soluzione che obbediva alla specifica , qui d (a) , e abbiamo le proprietà sopra menzionate con w e un contributo al danno (supponiamo di guardare d in funzione di a e w : quindi se a fosse fisso e avessimo w variare nell'equazione d (a, w) = a / 30.w , d sarebbe comunque una funzione crescente di w , e lo stesso vale se correggi w e ne fai una variazione).
Questo w (a) potrebbe darti il valore da visualizzare nella descrizione del gioco dell'arma: ad esempio, otterremmo "Danno arma: 220" con l'arma migliore del gioco.
Avremmo potuto usare una specifica completamente diversa per il nostro gameplay e quindi per n (a) , ad esempio uno che fa aumentare rapidamente il numero di colpi richiesti man mano che il gioco procede e quindi plateau, e le soluzioni risultanti sarebbero state diverse.
playerAttackstatistica a 100? Considerando che questo è il valore massimo, non sarebbe appropriato uccidere il nemico in pochi colpi? (Il nemico da 1000 HP è qualcosa che vedresti all'inizio del gioco? Un nemico standard? Capo?)