O programa está pegando a distância dos números, dividindo essa distância por 2, pegando o resultado final desses valores e subtraindo da pontuação. Eu testei esse código imprimindo o número secreto gerado, no inicio do loop, no meu teste o número gerado foi 50, chutei 40, teoricamente eu teria que perder 5 pontos, já que a distância foi de 10 e esses 10 são divididos por 2, e então eu chutei 40 mais uma vez, e logo depois coloquei 50 pra acabar o jogo, e realmente a pontuação final foi a correta, foram 990.0 pontos.
Seu código está correto, a única coisa que eu mudei foi tirar os warnings, tirando os parênteses da função 'abs', que estava cobrindo a divisão, já que não precisa calcular o absoluta da divisão porque dividir absoluto por 2.0 sempre vai dar um número absoluto
abs((n-numerosecreto)/2.0);
abs(n-numerosecreto)/2.0;
e a outra coisa foi tirar o 'if' do último 'else if', pois essa condição é a oposta da condição anterior e a última da validação, e então saiu os avisos :3 mas fora isso já estava tudo certo até onde eu vi.